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服务器
哨兵发现主下线后,会在该主的从服务器里挑选一个作为新的主服务器
然后向其他从服务器发送复制指令,让他们成为新的主服务器的从服务器
当已下线的主服务器重新上线时,让它作为一个从服务器