Redis主复制集(master-replicaset)
第一次开启:
从服务器向主服务器发送 SYNC 命令。
接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件(类似于快照),并使用缓冲区记录接下来执行的所有写命令。
当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
以后主服务器每次写入文件,都会记录到缓冲区,通过广播形式发送给从服务器
主服务器将缓冲区储存的所有写命令(广播形式)发送给从服务器执行。
网络断开了一会儿后
以前的版本: 从服务器认为数据跟不上了, 会重新发送SYNC命令, 将主服务器的全部数据保存一次
若本来有十万键值对, 而断网期间只写了几条键值对, 这样就非常浪费时间
现在的版本:
重新执行的是PSYNC命令, 只获取缺失的部分数据
复制安全性提升
因为读写分离, 写是主库, 读是从库, 当客户端发送写的请求写入主库,返回了写入成功, 而主库还未来得及同步如从库, 客户端再次去查的时候发现查不到
解决:
通过以下两个参数
min-slaves-to-write 指定最少要几个从库写入成功
min-slaves-max-lag 指定从库与主库的最大延迟
在最大延迟时间内在指定个数的从库上写入成功了才会返回给客户端成功, 否则写操作不会被执行,返回失败
基于redis-sentinel实现自愈
- 监控
- 自动选主,切换
- 从库指向新主库(6381)
- 应用透明