Redis高可用性:主从、哨兵和集群
一、主从模式:master-slave
1. 引入背景:单实例Redis由于数据量大性能会降低
2. master保证客户端的读写,slave保证与master的数据同步和客户端的读取,从而实现备份和读写分离
3. 只需手动要修改slave机器的配置文件即可;如果master挂了,可以升级slave为master,即可读写
仅需要在slave node上修改配置:
找到slaveof这行,参考下面的修改(填上master node的Ip和端口就完事了)
slaveof 10.6.144.155 7030
另外注意下 slave-read-only yes 这行,这表示slave只读不写,也是推荐设置
4. 原理:主节点做一次bgsave
二、高可用性方案:Sentinel机制(哨兵机制)
1. 引入背景:在主从模式下,需要手动切换主备,会造成服务一段时间不可用
2. 哨兵是一个独立的进程,通过发送命令,监控多个Redis实例(包括主Redis和从Redis)的运行状态
3. 一个哨兵可能出现问题,所以使用多个哨兵进行监控Redis,并且哨兵之间会相互监控
4. 故障切换(failover):主观下线(一个哨兵监测到master故障)和客观下线(通过发布订阅模式切换主从)
5. 以上过程对客户端透明
三、redis集群:Redis3.0版本推出了集群(Cluster)功能,进行负载均衡,提高扩展性
1. redis集群并不能保证数据的强一致性,可能会丢失写操作
2. 哈希槽:redis集群没有使用一致性hash,而是使用哈希槽,一共有16384个哈希槽,每个节点负责一部分哈希槽
3. 开源集群方案:codis
参考:
https://www.jianshu.com/p/06ab9daf921d
https://www.cnblogs.com/PatrickLiu/p/8444546.html
https://segmentfault.com/a/1190000002680804
https://www.cnblogs.com/xiaoblog/p/5776892.html
https://blog.csdn.net/keketrtr/article/details/78802571