redis 复制、哨兵

复制

向服务器127.0.0.1:12345 发送 slaveof 127.0.0.1 6379

127.0.0.1:12345会成为127.0.0.1:6379的从服务器

也可以设置slaveof选项

 

复制时需要执行同步和命令传播两个操作

同步:

从向主发送psync命令,主执行bgSave命令,后台生成RDB文件,

并在缓冲区里记录从现在开始执行的所有写命令。

主把RDB发给从,从载入RDB。

主把缓冲区里的写命令发给从,从执行这些命令。

命令传播:

同步完成后,每当主执行写命令后,就会把写命令发给从,并写入积压缓冲区中

 

主从断线重连后,从发送psync命令时,会把自己的偏移量发给主,

如果该偏移量在积压缓冲区里,那么就执行部分重同步,即只同步断线之后的部分。

 

偏移量:主从分别维护一个复制偏移量,主每发送n个字节,就把自己的偏移量加n,

从每接受n个字节,就把自己的偏移量加n

复制积压缓冲区:主上的一个队列,保存最近传播的命令和偏移量,默认1m

 

心跳检测

从默认每隔1秒向主发送一个命令,包含当前的偏移量。有以下三个作用:

1、检测连接状态

2、辅助实现min-slaves配置选项。

min-slaves-to-write 3 表示从服务器数量少于3个时拒绝写命令

min-slaves-max-lag 10 表示所有从服务器延迟都>=10秒时拒绝写命令

3、检测命令丢失,主发现从的偏移量比自己小,就会重发最近的一些命令

 

启动哨兵:

redis-sentinel /path/to/sentinel.conf 或

redis-server /path/to/sentinel.conf --sentinel

 

哨兵本质上是一个运行在特殊模式下的redis服务器

 

哨兵发现主下线后,会在该主的从服务器里挑选一个作为新的主服务器

然后向其他从服务器发送复制指令,让他们成为新的主服务器的从服务器

当已下线的主服务器重新上线时,让它作为一个从服务器

 

posted @ 2020-05-27 19:36  是的哟  阅读(131)  评论(0编辑  收藏  举报