检测一台机器是否宕机的应用场景如下:
1, 工作机器宕机,总控节点需要能够检测到并且将原有服务迁移到集群中的其它节点。
2, 总控节点宕机,总控节点的备份节点(一般称为Slave)需要能够检测到并替换成主节点继续对外服务。
检测一台机器是否宕机必须是可靠的。在大规模集群中,机器可能出现各种异常,比如停电,磁盘故障,过于繁忙导致假死等。对于机器假死,如果总控节点认为机器宕机并将服务迁移到其它节点,假死的机器又认为自己还可以提供服务,则会出现多个节点服务同一份数据而导致数据不一致的情况。
首先必须明确,理论上检测另外一台机器是否宕机是无法做到的。可以简单理解如下: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 内总控节点重启,工作节点和总控节点重新联系上从而可以切换为正常状态继续提供服务。
分享到:
相关推荐
首先,宕机检测工具的核心功能是对多台服务器、多IP地址以及多个业务端口进行健康检查。这种检查通常包括以下几个方面: 1. **服务器状态监测**:通过定期发送HTTP请求或TCP连接尝试,检查服务器是否能够正常响应。...
服务器宕机是一种常见的IT灾难,它可能会导致业务中断、数据丢失和经济损失。因此,拥有一个完善的服务器故障应急预案对于企业的正常运营至关重要。本文将讨论服务器宕机的原因、备份和冗余措施、应急预案的实施等...
宕机的原因多种多样,但根据描述中的内容来看,最常见的原因之一是内存溢出(OutOfMemoryError)。此外,服务器挂起也是一种常见的问题,它虽然不会导致服务器完全停止运行,但会严重影响其性能和服务质量。 #### ...
2. **负载均衡**:通过分配工作负载到多个服务器,即使其中一台服务器出现故障,其他服务器仍能处理请求,保持服务运行。 3. **集群计算**:服务器集群是一种将多台服务器连接在一起,以单一系统形象对外提供服务的...
tomcat宕机重启脚本,比较简单的一种设置
更重要的是,nginx还提供了宕机自动切换的能力,这确保了在某后端服务器发生故障时,能够快速切换到健康节点继续提供服务,从而保障了服务的连续性和稳定性。 在nginx中进行负载均衡配置,一般会利用到默认安装的...
该宕机事件发生在测试环境中的一台装有ORACLE数据库的AIX小机上,导致数据库宕机。我们将从故障原因分析、故障解决过程、故障后分析和故障总结四个方面对该事件进行详细的分析和讨论。 一、故障原因分析 该宕机...
部署在winserver的c盘/program file/mail下,自动通过outlook给自己发送邮件,可在outlook设置收到邮件后保存一个savelog.txt的标记,脚本根据是否有savelog以及发邮件是否成功,判断服务器是否宕机。
MySQL复制(Replication)是MySQL数据库系统中一个重要的特性,它允许数据从一台MySQL服务器(称为Master)复制到另一台或多台MySQL服务器(称为Slave)。复制可以实现数据冗余和负载均衡,对于提高系统的可靠性和...
java监听Tomcat是否宕机 可以重启
在处理WebLogic宕机问题时,我们首先遇到的是与数据库相关的优化问题。在这个场景中,项目组最初认为数据库是问题所在,因为SGA(System Global Area)使用的是默认参数,导致缓冲区命中率低。这可能意味着数据读取...
例如,当一台计算机因为软件冲突、硬件故障等原因无法响应用户的指令时,我们通常会说这台计算机“死机”了。 ### 宕机的原因分析 #### 三、宕机的常见原因 宕机的发生可能由多种因素引起,主要包括但不限于以下几...
然而,当GitLab服务器遭遇宕机时,可能会导致开发者无法正常进行代码的提交和下载,这对任何依赖GitLab进行日常开发工作的团队来说都是一个重大的挑战。本文将详细解释如何在GitLab服务器宕机后恢复代码仓库,确保...
如发生在 mysql 软件可承受力够但是服务器硬件,或者其他服务导致的 宕机 又或者 MYSQL 参数配置过大或者参数配置不合理...,出现宕机的可能多种多样,本文档主要体现的是宕机后可能出现的问题和后遗症较大的情况是什么
根据生成的宕机文件监测并发送短信提示 也可以改为监测端口发送短信提示
### IT知识要点:宕机对企业的影响与IBM POWER7的应对策略 #### 1. 宕机对企业的影响 - **业务中断**:宕机会导致企业工作流程的中断,直接影响业务连续性和客户服务,造成收入损失。 - **经济损失**:包括直接的...
RAC 节点宕机故障分析是一个复杂的过程,需要对节点宕机故障的原因、事件、ORA-600 错误、Bug 和 LMS 进程进行分析和确认。通过对这些方面的分析,可以获取节点宕机故障的相关信息,诊断和解决 RAC 节点宕机故障。
由于项目需要,编写基于zookeeper集群监测服务器宕机...原理:服务器端向zookeeper注册,在znode节点创建文件,zookeeper心跳检测,一旦服务器宕机,znode节点的文件会删除,客户端会响应做出相应的操作,如发邮件通知。
主数据库服务器宕机应急预案(正式篇) 数据库服务器宕机应急预案 预案目的 主数据库服务器宕机应急预案的目的是在主数据库服务器宕机时,快速恢复主数据库服务器的正常使用,以保证金融线上业务的正常访问。 ...