Redis-集群-Sentinel(哨兵)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zanpengfei/article/details/85343104

1、如果主节点挂掉后,咋样进行主从切换,而不影响线上业务,毫无疑问是自动切换,Redis提供了一种高可用方案指出自动主从切换,即Redis Sentinel(哨兵),我们可以将Redis的集群看作是一个Zookeeper集群,它是高可用核心,一般由几个节点组成,如果个别节点挂掉后,不影响集群正常运行

2、自动切换原理:Redis的哨兵负责监控主从节点的健康,若主节点挂掉后,自动选择一个最优的从节点切换为主节点,客户端链接集群时,先连接哨兵,哨兵查询主节点的地址,然后在连接主节点进行交互

3、消息丢失:Redis采用异步复制,如果主节点挂掉后,从节点没有收到全部的同步消息,这部分未同步到就丢失了,哨兵无法保证完全不丢失,但是通过选项可以尽量保证消息少丢失

min-slaves-to-write 1

Min-slaves-max-lag 10

第一个参数表示主节点至少有一个从节点在正常的复制,否者就停止对外写服务,但是丧失了可用性。

第二个参数是衡量如何是正常的复制,如果10秒内没有收到从节点的反馈,则意味着从节点同步不正常

4、Sentinel基本使用:

sentinel 的默认端口是 26379,不同于 Redis 的默认端口 6379

哨兵进行主从切换后,客户端如何知道地址变更呢

1)连接池建立新的链接时,会去查询主库地址,然后和内存中主库地址进行对比,如果变更,就断开所有链接,重新使用新地址连接

2)如果是旧的主节点挂掉后,所有正在使用的链接都会被关闭,重链接时会用上新的地址

3)如果sentinel主动进行主从切换后,之前的主库被降级到从库,所有修改性的指令都会跑出ReadonlyError异常,redis-py在处理命令的时候捕获该异常,这个异常将所有的旧链接全部关闭,后续指令会进行重新链接,redis-py是python一个客户端

猜你喜欢

转载自blog.csdn.net/zanpengfei/article/details/85343104