高性能nosql ledisdb设计与实现 (2):replication

2022-04-18 00:00:00 数据 命令 文件 将其 同步

ledisdb如今已经支持replication机制,为ledisdb的高可用做出了保障。

使用

如果master的ip为10.20.187.100。端口6380,slave的ip为10.20.187.101。端口为6380.

首先我们须要master打开binlog支持,在配置文件里指定:

use_bin_log : true

在slave的机器上面我们能够通过配置文件指定slaveof开启replication。或者通过命令slaveof显示的开启或者关闭。

slaveof 10.20.187.100 6380

ledisdb的replication机制參考了redis以及mysql的相关实现,以下简单说明。

redis replication

redis的replication机制主要介绍在这里,已经说明的非常具体了。

  • slave向master发送sync命令
  • master将其当前的数据dump到一个文件,同一时候在内存中缓存新增的改动命令
  • 当数据dump完毕。master就将其发送给slave
  • slave接受完毕dump数据之后,将其本机先前的数据清空,然后在导入dump的数据
  • master再将先前缓存的命令发送给slave

在redis2.8之后,为了防止断线导致又一次生成dump,redis添加了psync命令。在断线的时候master会记住当前的同步状态,这样下次就能进行断点续传了。

mysql replication

mysql的replication主要是通过binlog的同步来完毕的。

在master的不论什么数据更新,都会写入binlog。至于binlog的格式这里不再累述。

如果binlog的basename为mysql,index文件名称字为mysql-bin.index。该文件记录着当前全部的binlog文件。

binlog有max file size的配置。当binlog写入的的文件大小超过了该值。mysql就会生成一个新的binlog文件。当mysql服务重新启动的时候,也会生成一个新的binlog文件。

在Percona的mysql版本号中,binlog另一个max file num的设置,当binlog的文件数量超过了该值,mysql就会删除早的binlog。

slave有一个master.info的文件。用以记录当前同步master的binlog的信息,主要就是当前同步的binlog文件名称以及数据偏移位置,这样下次又一次同步的时候就能从该位置继续进行。

slave同步的数据会写入relay log中,同一时候在后台有另一个线程将relay log的数据存入mysql。

由于master的binlog可能删除,slave同步的时候可能会出现binlog丢失的情况。mysql通过dump+binlog的方式解决。事实上也就是slave全然的dump master数据,在生成的dump中也同一时候会记录当前的binlog信息。便于下次继续同步。

ledisdb replication

ledisdb的replication机制參考了redis以及mysql,支持fullsync以及增量sync。

master没有採用aof机制,而是使用了binlog。通过指定max file size以及max file num用来控制binlog的整体大小,这样我就无需关心aof文件持续增大须要又一次rewrite的过程了。

binlog文件名称格式例如以下:

  1. 相关文章