主从复制高可用问题
-
手动故障转移
就是一旦主节点出现故障,那么故障转移基本上是需要手工来完成的。 -
写能力和存储能力受限
写只能写在一个节点上,而且存储也是在一个节点上进行存储。(分布式解决)
主从复制-master宕掉
当master发生宕机时,那么复制也必然断掉了,而从节点与主节点的连接肯定也是失败的,这样数据的读取是正常的,但是数据的更新就无法保障了。
-
首先要
选择一个slave执行命令 slave no one,使其成为master节点
。然后对其余的slave执行 slaveof new master,这样就完成了新的master节点以及其从节点的构建过程。同时需要让客户端的写操作在新的master上进行
。 -
整个过程都是完全手工进行的,即使不手工而采用编写脚本的方式,让脚本不断监控master是否有问题,有问题之后选择一个新的master,然后让其他的slave都指向新的master节点,最后再去迁移所有的客户端。单独写这么一个完美的组件,也是非常困难的。
-
为了弥补主从模型在高可用方面的不足,Redis为我们提供了 Redis Sentinel 这样一个高可用的实现。
Redis Sentinel架构
故障转移处理流程
- 多个sentinel发现并确认master有问题
- 选举出一个sentinel作为领导
- 选出一个slave作为master
- 通知其余slave成为新的master的slave
- 通知客户端主从变化
- 等待老的master复活成为新master的slave
配置
port $(port]
dir "/usr/local/redis/data/"
logfile "$(port).log"
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000