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文件名称格式例如以下:
-