共计 1562 个字符,预计需要花费 4 分钟才能阅读完成。
作者:岳明强
爱可生北京分公司 DBA 团队成员,负责数据库治理平台的运维和 MySQL 问题解决。善于对 MySQL 的故障定位。
本文起源:原创投稿
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。
什么是 sentinel
Redis 作为最受欢迎的 NoSQL 数据库之一,次要特点为:高性能、高可用、高可扩大和具备丰盛的数据结构。其中 sentinel 作为 Redis 的高可用实现架构,可能实现主库产生故障后,主动切换到从库上。那么它的原理是什么呢,接下来咱们进行揭晓。
sentinel 之间的互相发现
当咱们配置 sentinel 集群的时候,每个 sentinel 只配置和主库的连贯,然而 sentinel 之间没有互相配置,那么 sentinel 之间怎么辨认呢?
每个 sentinel 定时(2s)向集群下主从的 Pub/Sub 的_sentinel_:hello 发送音讯,将本人的信息写入,同时进行订阅。当检测到新的 sentinel 时就会立刻退出到集群中。
判断主节点下线
失常状况下须要 3 个及以上奇数个的 sentinel 节点组成集群,sentinel 每隔 SENTINEL_PING_PERIOD(1000ms) 工夫给主库发送一次 PING 命令
当在 is-master-down-after-milliseconds 工夫内没有返回一次后果,那么就将状态设置为 s_down(主观下线),这时候能做切换吗?
答案是不能,因为这只是单节点 sentinel 对 redis 的监控,还须要联合其余 sentinel 节点的探测后果,再判断是否进行切换。
当判断主观下线后,会向其余 sentinel 节点发送 SENTINEL is-master-down-by-addr,当取得至多超过 quorum 的 sentinel 节点反对后,那么将状态设置为 o_down (主观下线),判断节点下线。
抉择新节点
当判断主节点下线后,会依据肯定的条件判断剩下节点是否选举为主:
1、从库状态失常。带有 S_DOWN、O_DOWN 和 DISCONNECTED 状态的从服务器不会被选中
2、从库响应失常。PING 超过 5s,INFO 超过 3 倍的 info_refresh 的工夫内没有收到回复的从服务器不会被选中
3、复制绝对失常的从库。主从连贯中断工夫不能过长
4、优先级不能为 0
对从库依照上面内容进行排序,抉择最佳的实例晋升为主库
优先级小的从库 > 复制偏移量较大的从库 > runid 较小的从库 > 执行较多命令的从库
神奇的 Gossip 协定
Redis 状态从 S_DOWN 到 O_DOWN 的状态转变,是由 sentinel 之间协商解决的,那他们是间接把信息间接播送给其余节点吗?
有一句话叫流言是世界上流传最快的病毒,那么流言是怎么病毒性流传的呢。譬如某男性艺人塌房,从极个别圈子到普罗公众之间的间隔,可能也就几天工夫。这当然不是那极少数的人给所有人颁布:我有谁谁的黑料。而是多数人先给身边的人散播,而后身边的人再加一些猜想,分布给更多的人,直到市面上某艺人的黑料满天飞。
sentinel 就是采取的这样的形式进行通信,叫 Gossip 协定。与上述不同的是两头所有的信息是实在的,每个节点都将本人节点的信息随机发送给一些节点,第二波的时候,会将本人把握的信息再随机发给其余节点,一波一波的散播,直到所有的节点数据统一。Gossip 协定在 Redis 上另一个用处是做 Redis Cluster 的外部通信。Redis Cluster 的分片数量如果太多,那么实例间的信息的传递也就很吃力,采取了 Gossip 协定,可能保障无论退出多少节点,所有节点之间的通信压力都不大。
结语
本文章次要是对 Redis sentinel 的概念性的货色做了一个解释,蕴含判断形式、选举形式、切换流程、通信伎俩等。大家如果想理解更多,请关注咱们公众号里 Redis 的后续文章。