第7章 性能和可靠性模式 Failover Cluster(故障转移群集)
上下文
您已经决定在设计或修改基础结构层时使用群集以提供高度可用的服务。
问题
您应该如何设计一个高度可用的基础结构层,来防止因单台服务器或它所运行的软件出现故障而导致的服务丢失?
影响因素
在设计高度可用的基础结构层时,请考虑下列影响因素:
- 硬件组件、应用程序或服务出现故障可以使应用程序无法使用或不可用。 例如,设想一台正在提供应用程序的服务器出现了电源故障。 如果这是唯一的服务器或服务器中的唯一电源,则存在故障单点,并且应用程序将不可用。
- 计划内的服务器停机时间可以影响应用程序的可用性。 例如,如果要更新无备用服务器的一台数据库服务器上的操作系统,您可能必须停止应用程序运行才能在服务器上安装修补程序。
- 监视和维护多服务器层增加了对系统和网络资源的要求。
- 使用故障转移群集的应用程序可能需要特殊的编码,以确保发生故障时故障转移过程对用户是透明的,并且应用程序仍然可用。 例如,如果在用来将数据保存到数据库的代码中放置超时和重试,则可确保在发生故障转移时事务将会完成。
解决方案
将 应用程序或服务安装在配置为发生故障时彼此接管对方工作的多台服务器上。 一台服务器接管发生故障的服务器的过程通常称为"故障转移"。 故障转移群集是一组这样配置的服务器:如果一台服务器变为不可用,则另一台服务器自动接管发生故障的服务器并继续处理任务。 群集中的每台服务器将群集中至少一台其他服务器确定为其备用服务器。
检测故障
要让备用服务器变成活动服务器,它必须设法确定活动服务器不再正常工作。 通常,系统使用下列某个常规类型的心跳机制来做到这一点:
- 发送信号。 对于发送信号,活动服务器以定义好的时间间隔将指定信号发送到备用服务器。 如果备用服务器在某个时间间隔内未收到信号,则确定活动服务器发生了故障并取得活动角色。 例如,活动服务器每隔 30 秒将状态消息发送到备用服务器。 由于内存泄漏,活动服务器最终用尽内存,然后崩溃。 备用服务器注意到在 90 秒(三个时间间隔)内未收到任何状态消息,因此它会接管活动服务器的工作。
- 接收信号。 对于接收信号,备用服务器向活动服务器发送请求。 如果活动服务器没有响应,则备用服务器按特定次数重复发送此请求。 如果活动服务器仍然没有响应,则备用服务器接管活动服务器的工作。 例如,备用服务器可能每隔一分钟将 getCustomerDetails 消息发送到活动服务器。 由于内存泄漏,活动服务器最终崩溃。 备用服务器发送 getCustomerDetails 请求三次,但未收到响应。 此时,备用服务器将接管活动服务器的工作。
群集可以使用多个级别的信号。 例如,群集可以在服务器级别使用发送信号,并在应用程序级别使用一组接收信号。 在此配置中,每当活动服务器启动并连接到网络时它都将心跳消息发送到备用服务器。 这些心跳消息是按比较频繁的时间间隔(例如每隔 5 秒)发送的,而备用服务器可能通过编程设置为如果仅仅未收到两个心跳消息,它就接管活动服务器的工作。 也就是说,在活动服务器发生故障后不超过 10 秒的时间内,备用服务器将检测到这一故障并启动备用进程。
相当常见的情况是,信号是通过专用通信通道发送的,以便网络拥塞和一般网 络问题不会导致假的故障转移。 此外,备用服务器可能将查询消息发送到运行在活动服务器上的一个或多个关键应用程序,并在指定的超时间隔内等待响应。 如果备用服务器收到正确的响应,则它不采取任何进一步行动。 为了将对活动服务器的性能影响减少到最小,应用程序级别的查询通常要经过比较长的时段,如每隔一分钟或更长。 备用服务器可能通过编程设置为:一直等到至少已经发送五次请求但未收到响应,然后才接管活动服务器。 这意味着,可能在长达 5 分钟之后,备用服务器才会启动故障转移进程。
同步状态
备用服务器必须首先将其状态与发生故障的服务器的状态进行同步,然后才能开始处理事务。 主要有三种不同的同步方法:
- 事务日志。 在 事务日志方法中,活动服务器将其状态的所有更改记录到日志中。 一个同步实用工具定期处理此日志,以更新备用服务器的状态,使其与活动服务器的状态一致。 当活动服务器发生故障时,备用服务器必须使用此同步实用工具处理自上次更新以来事务日志中的任何添加内容。 在对状态进行同步之后,备用服务器就成为活动服务器,并开始处理事务。
- 热备用。 在热备用方法中,将把活动服务器内部状态的更新立即复制到备用服务器。 因为备用服务器的状态是活动服务器状态的克隆,所以备用服务器可以立即成为活动服务器,并开始处理事务。
- 共享存储。 在共享存储方法中,两台服务器都在共享存储设备(如存储区域网络或双主机磁盘阵列)上记录其状态。 这样,因为不需要进行状态同步,故障转移可以立即发生。
确定活动服务器
对 于指定的一组应用程序,只存在一台活动服务器,这是极其重要的。 如果多台服务器都像是活动服务器,则通常会导致数据损坏和死锁。 解决此问题的常见方法是使用"活动令牌"概念的某个变体。 令牌在其最简单级别上是一个标志,用来将服务器标识为某个应用程序的活动服务器。 对于每组应用程序来说,只存在一个活动令牌;因此,只有一台服务器可以拥有令牌。 当服务器启动时,它会验证其合作伙伴是否拥有活动令牌。 如果拥有,则该服务器将作为备用服务器启动。 如果它未检测到活动令牌,则它会取得活动令牌的所有权,并作为活动服务器启动。 当备用服务器成为活动服务器时,故障转移进程将把活动令牌交给备用服务器。
在大多数情况下,当备用服务器成为活动服务器时,对于它正在支 持的应用程序或用户来说,它是透明的。 如果在事务过程中发生了故障,则可能必须重试该事务以使其成功完成。 这就使编写应用程序代码时使故障转移进程保持透明显得更为重要。 这样做的一个示例是,在将数据提交到数据库时,包括重试和超时。
此外, 大多数服务器使用 Internet 协议 (IP) 地址进行通信,因此,为了使故障转移成功,基础结构必须能够支持将 IP 地址从一台服务器转移到另一台服务器。 比如,可以使用能够支持 IP 地址转移的网络交换机。 如果系统基础结构不支持这一转移功能,则您可能需要使用负载平衡群集,而不是故障转移群集。 有关详细信息,请参阅Load-Balanced Cluster 模式。
扩展故障转移群集服务器
故障转移群集中的可伸缩性通常是通过扩展群集内的单个服务器,或向其中添加更多功能来实现的。 了解以下两点是很重要的:故障转移群集必须设计为处理预期负载,各个服务器的大小应当能够适应 CPU、内存和磁盘使用的预期增长。 Failover Cluster 服务器通常是高端多处理器服务器,并且它们被配置为使用多个冗余子系统来获得高可用性。 如果解决方案的资源要求超过了群集中服务器的限制条件,则扩展群集将是极其困难的。
示例
为了帮助您更好地了解如何使用故障转移群集来实现高可用性,下面的讨论分步演示了如何将已经实现的基本解决方案(它包含单个系统,即故障单点)重构为高度可用的解决方案。
非故障转移解决方案
一开始,组织可能只有基本解决方案体系结构(例如,图 1 中略述的体系结构)。虽然该解决方案可能满足最初的可用性要求,但是某些因素(如用户数的增长或需要应用程序停机时间更短)可能迫使您对设计进行更改。
图 1:具有故障单点的非故障转移解决方案
在图 1 中,数据层仅包含一台为应用程序层提供服务的数据库服务器 (Database10)。 如果数据库服务器或它运行的软件发生故障,则应用程序服务器将不再能够访问用来为客户端提供服务的数据。 这将使应用程序对客户端不可用。
故障转移群集解决方案
为 了提高解决方案的可用性,组织可能决定消除数据层中的单个数据库服务器造成的潜在故障单点。 为此,可以将服务器添加到数据层,并利用现有数据库服务器、新服务器和共享存储设备创建故障转移群集。 在说明该更改的图 2 中,群集由连接到共享存储阵列的两台服务器组成。
图 2:具有故障转移数据层的解决方案
第 一台服务器 (Database01) 是处理所有事务的活动服务器。 仅当 Database01 发生故障时,处于空闲状态的第二台服务器 (Database02) 才会处理事务。 群集将一个虚拟 IP 地址和主机名 (Database10) 在客户端和应用程序所使用的网络上公开。
注意:您可以将此设计扩展为包括多台活动服务器(除了所示的服务器外),要么使它们共享单个备用服务器,要么将每个活动服务器配置为另一个活动服务器的备用服务器。
结果上下文
Failover Cluster 模式具有的优缺点:
优点
- 适应计划内的停机时间。 故障转移群集可以允许系统有停机时间,而不会影响可用性。 这样,就适应了日常的维护和升级需要。
- 减少计划外停机时间。 故障转移群集通过消除系统和应用程序级别上的故障单点,减少了与服务器和软件故障有关的应用程序停机时间。
缺点
- 会增加响应时间。 对于故障转移群集设计来说,由于备用服务器上的负载增长,或需要更新多台服务器的状态信息,因此会增加响应时间。
增加设备成本。 故障转移群集所要求的额外硬件很容易使基础结构层的成本加倍。
第7章 性能和可靠性模式 Failover Cluster(故障转移群集)的更多相关文章
- 第7章 性能和可靠性模式 Load-Balanced Cluster(负载平衡群集)
上下文 您已经决定在设计或修改基础结构层时使用群集,以便在能够适应不断变化的要求的同时保持良好的性能. 问题 在保持可接受的性能级别的同时,如何设计一个可适应负载变化的.可伸缩的基础结构层? 影响因素 ...
- 第7章 性能和可靠性模式 Server Clustering(服务器群集)
上下文 您正在设计要部署应用程序的基础结构层.运行要求包括无法满足的可用性或性能能力,因为基础结构中存在性能瓶颈或故障单点. 影响因素 设计基础结构时,请考虑下列影响因素: 用户希望在使用应用程序时这 ...
- 第十课——cluster故障转移操作,codis部署
作业描述] 1.cluster的故障转移操作,截图展示 2.部署codis,并写代码访问codis ================================================== ...
- failover swarm 故障转移
#故障转移 Failover #当其中一个节点关闭宕机时,其节点中的service会转移到另一个节点上.Swarm会检测到node1发生故障并把此故障节点的状态标记为Down; docker node ...
- windows server 2003R2\2008R2\2012\2016 安装【故障转移群集】cluster
温故而知新! 靠,突然觉得it技能只要一年的时间就能忘记! virtualbox虚拟机安装群集,注意点: clone的虚拟机,sid问题.sysprep太慢了,不如重新安装快! 虚拟机增强组件,会影响 ...
- 基于Windows Server 2008 R2的Failover Cluster
转载一下别人的文章吧,写的不错 基于Windows Server 2008 R2的Failover Cluster(故障转移群集)部署Sql Server 2008 AA(主主) 模式群集(第一部分) ...
- SQL Server 2016 Failover Cluster + ALwaysOn
SQL Server 2016 Failover Cluster + ALwaysOn 环境的搭建 近期公司为了提高服务的可用性,就想到了部署AlwaysOn,之前的环境只是部署了SQL Server ...
- 第11章 享元模式(Flyweight Pattern)
原文 第11章 享元模式(Flyweight Pattern) 概述: 面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情况下,对象的数量可能会太多,从而导致了运行时 ...
- 设计模式之第13章-职责链模式(Java实现)
设计模式之第13章-职责链模式(Java实现) “请假都那么麻烦,至于么.”“咋的了?”“这不快过年了么,所以我想早两天回去,准备一下,买买东西什么的,然后去给项目经理请假,但是他说快过年了,所以这个 ...
随机推荐
- 编程领域中的 "transparent" 和 "opaque"
引言 在学习计算机的过程中,经常会接触到 “透明” 和 “非透明” 的概念. 刚开始理解 “透明” 这个概念的时候,认为 “透明” 就是程序员可以看见其中的构造,但是老师却说透明是程序员意识不到其中的 ...
- day003 python解释器、变量和数据类型基础讲解
Python解释器 打开官网https://www.python.org/downloads/windows/ 下载中心下载对应电脑版本的Python安装包,选择custom后一路next安装完成.过 ...
- luogu P4719 【模板】动态 DP 矩阵乘法 + LCT
方法二:LCT+矩阵乘法 上文中,我们用线段树来维护重链上的各种矩阵转移. 第二种方法是将树链剖分替换为动态树. 我们知道,矩阵乘法 $\begin{bmatrix} F_{u,0} & F_ ...
- 【剑指Offer】11、二进制中1的个数
题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题思路: 本题有以下两个解决方案: (1)依次判断每一位.判断的方法是先与1相与,为1则说明该位为1 ...
- spring-boot 访问时,加与不加项目名分析
众所周知,springboot非常便捷,可以简化项目开启步骤,加快开发进度. 很多新手也许都遇到过这样一个问题,在以往的springMvc项目里,大家伙都是把打的war放在tomcat中运行,下意识的 ...
- opencv学习HighGUI图形用户界面初步【1】
HighGUI是图形用户界面模块.包括:1.输入与输出:2.视频捕捉:3.图形和视频的解码编码:4.图形交界面与接口. 由于opencv.hpp包含了core.objdetect.ingproc.ph ...
- 第一次训练 密码:acmore
#include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...
- 【ACM】hdu_1106_排序_201308071928
排序Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissio ...
- [bzoj2529][Poi2011]Sticks_贪心
Sticks bzoj-2529 Poi-2011 题目大意:给你n根木棒,每种木棒有长度和颜色,颜色共有k种,求满足条件的3根木棒使得这3根木棒颜色互不相同且可以围成三角形. 注释:$1\le n ...
- [jQuery]$.get跨域提交不发送原因
使用 $.ajax({ url: "http://pastebin.com/embed_js.php?i=sy9gt3FR", dataType: "jsonp" ...