Redis 哨兵机制(Redis Sentinel)(后端学习笔记)

本文介绍了哨兵机制如何通过监控、通知和自动故障转移功能提高Redis服务的可用性,包括哨兵如何检测主节点故障、选举新的主节点以及维护服务的无缝切换。同时讨论了哨兵集群的组建和监控Redis库的过程,以及故障转移的具体步骤。
摘要由CSDN通过智能技术生成

哨兵机制

哨兵的核心是功能是主节点的自动故障转移

哨兵机制的作用

假如主服务宕机后,我们需要手动把一台从服务器切换成主服务,这个动作全程需要人工干预。 中间可能发生操作失误,且在操作过程中会导致一段时间内服务不可用。为了解决上面的问题,我们需要引入一套自动化的解决方案,那就是哨兵机制。

[Redis中文文档]  https://redis.com.cn/topics/sentinel.html 

官方文档中提及到的功能:

监控(Monitoring):Sentinel不断的去检查你的主从实例是否按照预期在工作。

通知(Notification):Sentinel可以通过一个api来通知系统管理员或者另外的应用程序,被监控的Redis实例有一些问题。

自动故障转移(Automatic failover): 如果一个主节点没有按照预期工作,Sentinel会开始故障转移过程,把一个从节点提升为主节点,并重新配置其他的从节点使用新的主节点,使用Redis服务的应用程序在连接的时候也会被通知新的地址。

配置提供者(Configuration provider):Sentinel给客户端的服务发现提供来源:对于一个给定的服务,客户端连接到Sentinels来寻找当前主节点的地址。当故障转移发生的时候,Sentinels将报告新的地址。//客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。

其中,监控和自动故障转移功能,使得哨兵可以及时发现主节点故障并完成转移;而配置提供者和通知功能,则需要在与客服端的交互中才能体现

哨兵集群的组建

哨兵实例之间可以互相发现,要归功于Redis提供的pub/sub机制,也就是发布/订阅机制

[Redis pub/sub 发布订阅机制原理与实战]  https://juejin.cn/post/7134591236195188744 

在主从集群中,主库上有一个名为sentinel:hello的频道,不同哨兵就是通过它来互相发现,实现互相通信的。在下图中,哨兵1把自己的IP(172.16.19.3)和端口(26579)发布到sentinel:hello频道上,哨兵2和3就可以从这个频道直接获取哨兵1的IP地址和端口。然后,哨兵2、3可以和哨兵1建立网络连接。

img

通过这个方式,哨兵2和3也可以建立网络连接,这样一来,哨兵集群就形成了。它们相互间可以通过网络连接进行通信,比如说对主库有没有下线这件事进行判断和协商。

哨兵监控Redis库

这是由哨兵向主库发送INFO命令来完成的。就像下图所示,哨兵2给主库发生INFO命令,主库接受到这个命令后,就会把从库列表返回给哨兵。接着,哨兵就可以根据从库列表中的连接信息,和每个从库建立连接,并在这个连接上持续地对库进行监控。哨兵1和3可以通过相同的方法和从库建立连接。

img

主库下线的判定

主观下线:就是哨兵各自自己对Redis节点下线的判断

客观下线: 由哨兵集群共同决定Redis节点是否下线

由当某个哨兵判断主库主观下线后,向哨兵集群发起了投票,各个哨兵会根据自己和主库连接的情况做出投票,Y相当于赞成 N相当于反对 如果判断后赞成的数大于quorum的值,那么就可以判断为客观下线了

哨兵集群的选举

判断完主库下线后,由哪个哨兵节点来执行主从切换,这里就需要哨兵集群的选举机制了

为什么必然会出现选举

为了避免哨兵的单点情况发生,所以需要一个哨兵的分布式集群。作为分布式集群,必然涉及共识问题;同时故障的转移和通知都只需要一个主的哨兵节点就可以了

哨兵的选举机制是什么样的

选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举

成为Leader的条件

1.拿到一半以上的赞成票

2.同时还需要大于等于配置文件中的quorum值

新主库的选出

规则

1.去除没有回复过哨兵ping响应的从节点,或者下线断线的

2.选择salve-priority从节点优先级最高(redis.conf)的

(什么是slave-priority:Redis 有个叫slave-priority 配置项,可以给从节点设置优先级。 每一台从节点的服务器配置不一定是相同的,我们可以根据服务器性能配置来设置从节点的优先级。 比如,如果「A 从节点」的物理内存是所有从节点中最大的,那么我们可以把「A 从节点」的优先级设置成最高。)

3.选择复制偏移量最大,只复制最完整的从节点

故障转移

新的库选完后就可以开始进行故障转移了

假设刚刚开始 1.判断了主库客观下线 同时选出sentinel 3 是哨兵leader

img

故障转移流程

img

1.将slave-1脱离原来的从节点,升级变成主节点

2.将从节点slave-2指向新的主节点

3.通知客户端主节点已更换

4.将原来的主节点变成从节点,指向新的主节点

img

[Redis集群模式与主从模式有什么区别 ]  https://cloud.tencent.com/developer/article/2327774 

[主从、集群、分布式的区别]  https://www.cnblogs.com/fulaien/p/17758914.html 

[Redis:主从库模式、哨兵和分片集群]  https://cloud.tencent.com/developer/article/1747028 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值