redis哨兵一直选举master是挂掉的服务器

在配置Redis哨兵系统进行主从故障转移时,发现哨兵无法正确选举新的主节点。问题源于只关闭了主服务的防火墙,而未关闭从机的防火墙,导致选举过程持续失败。解决方法是关闭从机的防火墙,从而顺利完成主机的切换,选择了6381作为新的主机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我在学习redis的哨兵的时候,配置哨兵的时候发现了 问题

我使用的是一主二从三哨兵模式

当主服务挂掉时,由于我设置了哨兵监控,会将没有挂掉的从机里选举出一个作为主机;

之前配置文件的时候一直没有问题

直到我挂掉主服务时,从机依然不会发生变化,由于配置了日志,我便查看日志,发现哨兵在投票选举的时候还在选举挂掉的主机6379.。。。之后又会监控到该主机挂掉了,然后重新选,一直循环。。。。。

 之后发现,我只关闭了主机也就是6379的防火墙,没有关闭两个从机的防火墙导致一直选举失败;

从机执行命令关闭防火墙

systemctl stop firewalld.service 

 解决问题:重新选择6381作为主机

 

<think>嗯,用户想了解Redis哨兵模式下,主节点宕机后从节点选举主节点的流程。我需要先回顾Redis哨兵的相关知识,确保回答准确。 首先,哨兵集群要功能是监控主节点和从节点,当主节点不可用时,自动进行故障转移。这个过程包括几个关键步骤:检测主节点下线、选举哨兵领导者、选择新的主节点、切换配置和通知客户端。 根据引用[1],哨兵节点会定期检查主节点的状态。如果超过半数的哨兵认为主节点观下线(SDOWN),就会触发客观下线(ODOWN)。这时候需要开始故障转移流程。这里要注意,客观下线的判断需要多数哨兵的确认,避免误判。 接下来,选举哨兵领导者。引用[2]提到,哨兵之间使用Raft算法来选出个领导者,由它来负责后续的故障转移操作。这步很重要,因为只有领导者才能执行故障转移,确保操作的唯性。 然后是选择新的主节点。引用[2]和[4]指出,领导者会根据从节点的健康状况、复制偏移量、优先级等因素进行评估。优先级高的从节点会被优先考虑,复制偏移量最新的节点数据更完整,所以这步要综合考虑多个因素,确保选出最合适的从节点。 之后,领导者会发送slaveof no one命令给选中的从节点,使其成为新的主节点,并更新其他从节点和客户端的配置。这里可能遇到的问题如引用[3]和[4]提到的端口开放或防火墙问题,导致故障转移失败,需要确保网络配置正确。 最后,通知客户端新的主节点地址,并持续监控旧主节点,以防它恢复后作为从节点加入集群。这部分在引用[1]和[3]中有提到,配置文件的正确设置和网络可达性很重要。 用户可能还想知道选举中的细节,比如如何避免多个领导者,或者如何处理网络分区的问题。另外,实际应用中可能遇到的配置错误,比如bind设置或防火墙问题,需要根据引用[3]和[4]的建议来解决。 总结回答时,要分步骤清晰地解释流程,引用相关参考资料,并指出常见问题及解决方法,这样用户能全面理解整个过程。</think>### Redis哨兵模式主节点故障转移流程解析 Redis哨兵模式下主节点宕机后的从节点选举流程可分为以下关键步骤,结合引用内容中的技术细节进行说明: 1. **检测主节点故障** - 每个哨兵节点每隔1秒向主节点发送`PING`命令(默认配置) - 当主节点连续无响应超过`down-after-milliseconds`阈值(默认30秒),哨兵将其标记为**观下线(SDOWN)** - **客观下线(ODOWN)** 需要满足:`quorum`数量(配置参数)的哨兵节点都确认主节点不可用[^1][^4] - 触发故障转移的条件:多数哨兵节点达成共识(哨兵总数/2 +1) 2. **选举哨兵领导者** - 使用Raft算法在哨兵节点间选举出领导者(Leader),只有领导者能执行故障转移[^2] - 选举规则: - 每个发现主节点ODOWN的哨兵会发起投票请求 - 先到先得的投票机制,最先达到多数票的哨兵成为Leader - 每个纪元(epoch)只产生个Leader 3. **筛选候选从节点** - 领导者哨兵根据以下标准评估从节点: ```python # 伪代码评估逻辑 def select_slave(slaves): valid_slaves = [s for s in slaves if s.info_repl_age < 60 # 数据同步延迟 and s.last_ack_time < 5000 # 最近响应时间 and s.slave_priority > 0] # 优先级配置 # 按优先级排序,相同优先级比复制偏移量 return sorted(valid_slaves, key=lambda x: (-x.slave_priority, -x.repl_offset)) ``` - 排除条件: - 长时间响应(超过`repl-timeout`配置) - 复制偏移量过时(与主节点差异超过阈值) - 手动配置`slave-priority=0`的节点不参与选举[^2] 4. **执行故障转移** - 领导者向目标从节点发送`SLAVEOF NO ONE`命令,将其提升为主节点 - 更新哨兵集群的拓扑信息: ```shell # 修改新主节点的配置 config set slave-read-only no # 通知其他从节点复制新主节点 sentinel failover <master-name> ``` - 更新所有哨兵的`sentinel.conf`,记录新主节点信息 5. **客户端重定向** - 哨兵通过`+switch-master`事件通知客户端 - 客户端订阅`__sentinel__:hello`频道获取新主节点地址 - 旧主节点恢复后会被哨兵自动设置为新主节点的从节点[^1] **常见问题解决方案**: - 故障转移失败时检查: 1. 确保所有节点间端口开放(6379+16379)[^3] 2. 配置文件添加`bind 0.0.0.0`允许跨服务器通信 3. 关闭防火墙或设置正确规则: ```shell systemctl stop firewalld.service # CentOS ufw allow 6379/tcp # Ubuntu ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值