分布式实现:如何检测一台机器是否宕机?

分布式实现:如何检测一台机器是否宕机?

作者:日照 2010-11-22 09:29:31

运维

系统运维

Linux

分布式 检测一台机器是否宕机必须是可靠的。在大规模集群中,机器可能出现各种异常,比如停电,磁盘故障,过于繁忙导致假死等。对于机器假死,如果总控节点认为机器宕机并将服务迁移到其它节点,假死的机器又认为自己还可以提供服务,则会出现多个节点服务同一份数据而导致数据不一致的情况。

编辑导读:本文转载自淘宝核心系统运维团队博客,文中描述的宕机检测方式适用于大规模集群环境,但原理仍是基于双节点,有需求的朋友们可以借鉴。

检测一台机器是否宕机的应用场景如下:

1, 工作机器宕机,总控节点需要能够检测到并且将原有服务迁移到集群中的其它节点。

2, 总控节点宕机,总控节点的备份节点(一般称为Slave)需要能够检测到并替换成主节点继续对外服务。

检测一台机器是否宕机必须是可靠的。在大规模集群中,机器可能出现各种异常,比如停电,磁盘故障,过于繁忙导致假死等。对于机器假死,如果总控节点认为机器宕机并将服务迁移到其它节点,假死的机器又认为自己还可以提供服务,则会出现多个节点服务同一份数据而导致数据不一致的情况。
 

首先必须明确,理论上检测另外一台机器是否宕机是无法做到的,有兴趣的同学可以参考Fischer的论文。可以简单理解如下:A机器往B机器发送心跳包,如果B机器不发送响应,A无法确定B机器是宕机了还是过于繁忙,由于A和B两台机器的时钟可能不同步,B机器也无法确定多久没有收到A机器的心跳包可以认为必须停止服务。因此,A机器没有办法确定B机器已经宕机或者采取措施强制B机器停止服务。

当然,工程实践中,由于机器之间会进行时钟同步,我们总是假设A和B两台机器的本地时钟相差不大,比如相差不超过0.5秒。这样,我们可以通过Lease机制进行宕机检测。Lease机制就是带有超时时间的一种授权。假设总控节点需要检测工作节点是否宕机,总控节点可以给工作节点发放Lease授权,工作节点持有有效期内的Lease才允许提供服务,否则主动下线停止服务。工作节点的Lease快要到期的时候向总控节点重新申请Lease(一般称为renewLease),总控节点定时检测所有工作机的Lease授权是否合法,如果发现某台工作机Lease失效,可以将工作机上的服务迁移到集群中的其它机器,这时因为工作机发现自己Lease失效会主动停止服务。当然,这里需要注意,由于总控节点和工作机的时钟可能不一致且有网络延迟,总控节点上的Lease超时时间要长,也就是说,如果工作节点的Lease超时时间是12秒,总控节点可能需要13秒后才能确认工作节点已经停止了服务,从而避免数据不一致问题。

同构节点之间的选主也有一个宕机检测问题。比如总控节点宕机,备份节点需要能够检测并升级为主节点继续对外服务。Mysql数据库经常采用Heartbeat + DRBD (Distributed Replicated Block Device) + Mysql的高可用性方案,据说能够达到3个9的高可用性,主节点和备节点维持Heartbeat心跳,当提供服务的主节点出现故障时,备节点的Heartbeat检测到主节点没有心跳(例如,Ping不通主节点),备节点自动接管虚拟IP,升级为主节点提供Mysql读写服务。由于Heartbeat检测机器主节点宕机不可靠,这个方案存在众所周知的脑裂问题,即集群中可能同时存在多个主节点同时提供服务。解决这个问题本质上还是需要引入仲裁节点,比如Heartbeat + DRBD方案中引入Fence节点使出现问题的节点从集群中脱离,或者引入分布式锁服务,比如Chubby的开源实现Zookeeper服务。分布式锁服务实现主节点选举大致如下:主节点和备节点到Chubby中抢锁,抢到锁的节点在锁的有效期(Lease期)内提供服务,当主节点锁的Lease快要到期时,主节点申请延长锁的超时时间,正常情况下分布式锁服务总是优先满足主节点的请求,当主节点出现故障时,备节点能够抢到锁切换为主节点提供服务。

***还有一个问题,假设总控节点通过Lease机制检测工作节点是否宕机,这种方案是可靠的,不过当总控节点宕机时,如果不采取任何措施,集群中的所有工作节点都将因为无法重新申请Lease而停止服务,这就是带有总控节点的设计固有的脆弱性,某个设计或者编码的错误都有可能造成严重的影响。解决这个问题一般会有一个叫做Grace Period的机制,工作节点Lease超时时将停止服务,但是工作节点并不一开始就重启或者下线,而是处于一种危险状态(称为Jeopardy),这种状态持续一个Grace Period,比如45秒。如果在Grace Period 内总控节点重启,工作节点和总控节点重新联系上从而可以切换为正常状态继续提供服务。

如果需要较好地理解宕机及选举相关的问题,可以阅读并思考Paxos相关的论文,比如Paxos made simple, The Part-time Parliament, Paxos made live, Paxos made practical, Chubby等。有任何问题,欢迎讨论。

【编辑推荐】

  1. 互联网40年:千里之行始于“宕机”
  2. 国外十大流行的服务器监控工具(外篇)
  3. 10款免费的企业级安全监控工具

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/282745.html<

(0)
运维的头像运维
上一篇2025-05-13 14:50
下一篇 2025-05-13 14:52

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注