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

 

posted @ 2019-06-23 15:44  牧云文仔  阅读(400)  评论(0编辑  收藏  举报