拱墅网站建设制作,做外贸一般在什么网站,网页制作用什么软件,wordpress如何添加备案号代码文章目录 概念哨兵机制如何工作的监控#xff08;如何判断主节点真的故障了#xff09;哪个哨兵进行主从故障转移#xff1f;故障转移流程哨兵集群 概念
当进行主从复制时#xff0c;如果主节点挂掉了#xff0c;那么没有主节点来服务客户端的写操作请求了#xff0c;也… 文章目录 概念哨兵机制如何工作的监控如何判断主节点真的故障了哪个哨兵进行主从故障转移故障转移流程哨兵集群 概念
当进行主从复制时如果主节点挂掉了那么没有主节点来服务客户端的写操作请求了也没有主节点给从节点进行数据同步了。此时需要进行主从切换主从节点故障转移Redis在 2.8 版本以后提供的哨兵Sentinel机制。它会监测主节点是否存活如果发现主节点挂了它就会选举一个从节点切换为主节点并且把新主节点的相关信息通知给从节点和客户端。
哨兵机制如何工作的
哨兵其实是一个运行在特殊模式下的 Redis 进程所以它也是一个节点。用于观察主从节点哨兵节点主要负责三件事情监控、选主、通知。
监控如何判断主节点真的故障了 哨兵会每隔 1 秒给所有主从节点发送 PING 命令当主从节点收到 PING 命令后会发送一个响应命令给哨兵这样就可以判断它们是否在正常运行。如果主节点或者从节点没有在规定的时间内响应哨兵的 PING 命令哨兵就会将它们标记为「主观下线」 主观下线和客观下线 客观下线只适用于主节点。「主节点」设计「主观下线」和「客观下线」两个状态是因为有可能「主节点」其实并没有故障可能只是因为主节点的系统压力比较大或者网络发送了拥塞导致主节点没有在规定时间内响应哨兵的 PING 命令。因此一般设置多个哨兵哨兵集群至少三个哨兵通过多个哨兵节点一起判断就可以就可以避免单个哨兵因为自身网络状况不好而误判主节点下线的情况。 流程 当一个哨兵判断主节点为「主观下线」后就会向其他哨兵发起命令其他哨兵收到这个命令后就会根据自身和主节点的网络状况做出赞成投票或者拒绝投票的响应。当这个哨兵的赞同票数达到哨兵配置文件中的 quorum 配置项设定的值后这时主节点就会被该哨兵标记为「客观下线」 哪个哨兵进行主从故障转移
由于有多个哨兵所以只能选举一个哨兵的leader让leader执行主从切换 选举 leader 的过程其实是一个投票的过程在投票开始前肯定得有个「候选者」。 哪个哨兵节点判断主节点为「客观下线」这个哨兵节点就是候选者 候选者如何选举成为 Leader 每个哨兵只有一次投票机会如果用完后就不能参与投票了可以投给自己或投给别人但是只有候选者才能把票投给自己。 第一拿到半数以上的赞成票第二拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值。 为什么哨兵节点至少要有 3 个 如果哨兵集群中只有 2 个哨兵节点此时如果一个哨兵想要成功成为 Leader这时票数就没办法达到 2 票就无法成功成为 Leader这时是无法进行主从节点切换的。 Redis 1 主 4 从5 个哨兵 quorum 设置为 3如果 2 个哨兵故障当主节点宕机时哨兵能否判断主节点“客观下线”主从能否自动切换 哨兵集群可以判定主节点“客观下线”。哨兵集群还剩下 3 个哨兵当一个哨兵判断主节点“主观下线”后询问另外 2 个哨兵后有可能能拿到 3 张赞同票这时就达到了 quorum 的值因此哨兵集群可以判定主节点为“客观下线”。哨兵集群可以完成主从切换。当有个哨兵标记主节点为「客观下线」后就会进行选举 Leader 的过程因为此时哨兵集群还剩下 3 个哨兵那么还是可以拿到半数以上5/213的票而且也达到了 quorum 值满足了选举 Leader 的两个条件 所以就能选举成功因此哨兵集群可以完成主从切换。 总结quorum 的值建议设置为哨兵个数的二分之一加1例如 3 个哨兵就设置 25 个哨兵设置为 3而且哨兵节点的数量应该是奇数。 故障转移流程
主从故障转移操作包含以下四个步骤
第一步在已下线主节点旧主节点属下的所有「从节点」里面挑选出一个从节点并将其转换为主节点。第二步让已下线主节点属下的所有「从节点」修改复制目标修改为复制「新主节点」第三步将新主节点的 IP 地址和信息通过「发布者/订阅者机制」通知给客户端第四步继续监视旧主节点当这个旧主节点重新上线时将它设置为新主节点的从节点 选取新主节点 把网络状态不好的从节点过滤掉了接下来要对所有从节点进行三轮考察优先级、复制进度、ID 号。在进行每一轮考察的时候哪个从节点优先胜出就选择其作为新主节点。 第一轮考察哨兵首先会根据从节点的优先级来进行排序优先级越小排名越靠前(每一台从节点的服务器配置不一定是相同的(如果 「 A 从节点」的物理内存是所有从节点中最大的 那么我们可以把「 A 从节点」的优先级设置成最高。)第二轮考察如果优先级相同则查看复制的下标哪个从「主节点」接收的复制数据多哪个就靠前。( slave_repl_offset 最接近 master_repl_offset说明它的复制进度是最靠前的于是就可以将它选为新主节点。)第三轮考察如果优先级和下标都相同就选择从节点 ID 较小的那个。 哨兵 leader 向被选中的从节点发送 SLAVEOF no one 命令让这个从节点解除从节点的身份将其变为新主节点。哨兵 leader 会以每秒一次的频率向被升级的从节点发送 INFO 命令。并观察命令回复中的角色信息当被升级节点的角色信息从原来的 slave 变为 master 时哨兵 leader 就知道被选中的从节点已经顺利升级为主节点了。 将从节点指向新主节点 向「从节点」发送 SLAVEOF 命令来实现。如下图哨兵 leader 向所有从节点server3和server4发送 SLAVEOF 让它们成为新主节点的从节点。 通知客户的主节点已更换 这主要通过 Redis 的发布者/订阅者机制来实现的。每个哨兵节点提供发布者/订阅者机制客户端可以从哨兵订阅消息。 客户端和哨兵建立连接后客户端会订阅哨兵提供的频道。主从切换完成后哨兵就会向 switch-master 频道发布新主节点的 IP 地址和端口的消息这个时候客户端就可以收到这条信息然后用这里面的新主节点的 IP 地址和端口进行通信了。 将旧主节点变为从节点 故障转移操作最后要做的是继续监视旧主节点当旧主节点重新上线时哨兵集群就会向它发送 SLAVEOF 命令让它成为新主节点的从节点 哨兵集群
在配置哨兵的信息时只需要填下面这几个参数设置主节点名字、主节点的 IP 地址和端口号以及 quorum 值。哨兵节点之间是通过 Redis 的发布者/订阅者机制来相互发现的。
sentinel monitor master-name ip redis-port quorum 在主从集群中主节点上有一个名为__sentinel__:hello的频道不同哨兵就是通过它来相互发现实现互相通信的。哨兵 A 把自己的 IP 地址和端口的信息发布到__sentinel__:hello 频道上哨兵 B 和 C 订阅了该频道。那么此时哨兵 B 和 C 就可以从这个频道直接获取哨兵 A 的 IP 地址和端口号。然后哨兵 B、C 可以和哨兵 A 建立网络连接。 哨兵集群如何知道「从节点」的信息 主节点知道所有「从节点」的信息所以哨兵会每 10 秒一次的频率向主节点发送 INFO 命令来获取所有「从节点」的信息。 总结正式通过 Redis 的发布者/订阅者机制哨兵之间可以相互感知然后组成集群同时哨兵又通过 INFO 命令在主节点里获得了所有从节点连接信息于是就能和从节点建立连接并进行监控了。
文章参考https://xiaolincoding.com/