Linux高可用集群 Corosync

2024-09-02

Linux高可用集群 Corosync(精选2篇)

1.Linux高可用集群 Corosync 篇一

关键词:集群系统,高可用性,心跳机制,服务迁移

高可用性技术从最简单的双机热备到多节点的高可用集群系统, 用户对于可用性的需求在不断变化, 这种需求变化也推动着高可用集群技术不断的向前发展。目前, 高可用集群中的进程迁移技术、TCP连接同步技术、集群的可用性量化分析与测试是比较热门的研究方向。本文的创新点是设计并实现了基于串口和网络的混合心跳通信机制, 通过对系统的功能、性能测试以及在南阳理工学院数字图书馆中的实际应用, 表明系统功能完备, 性能稳定, 实现了预期设计目标。

一、集群系统

1.1 集群的概念及应用场合。集群是由若干台 (至少两台) 计算机组成的一种松散耦合的计算机系统。集群系统通过把若干台主机组织成为一个逻辑上的整体为用户服务。组成集群的单个计算机被称为集群系统中的节点 (node) 。当采用集群系统为用户提供服务时, 集群的内部组成及结构对用来说是完全透明的, 管理员对集群系统进行技术调整 (例如:增加或者删除节点) 时, 用户是感觉不到的。从用户的角度来看, 集群系统就好像一台功能强大的超级计算机, 从来不会出现故障或者宕机[1,2,3]。从管理者的角度来看, 集群系统内部一般是通过两台或者两台以上的具有独立管理能力的计算机通过相应的硬件设备、高速网络或软件相互连在一起, 每个单一集群节点就成为一个独立的计算机系统, 并且拥有各自独立的进程。集群节点主机上的进程可以进行通信和交换数据等交互工作, 共同协调以向用户提供应用程序、系统资源和信息等业务。

1.2集群系统的高可用性。在很多领域中单个独立的计算机系统是不能满足应用需求的。计算机系统的可扩展性、高性能等才是解决问题的根本。因此人们开始研究各种新的解决方案。集群系统就是在这种需求中产生的。最初人们通过提高中央处理器的主频和总线带宽来提升计算机性能。不过这一方法对系统性能的提供是有限的。后来出现的向量机和SMP (对称多处理机) 系统等, 都是在提高CPU的个数和内存的条数来提高性能, 这样一来, 新的问题就出现了, 当CPU的个数超过某一阈值时, 对称多处理机系统的可扩展性就变的极差, 原因是CPU访问内存的带宽和CPU个数不成正比, 这是SMP系统发展的一个瓶颈。在集群系统中, 系统的性能取决于CPU的颗数, CPU颗数的增加和性能提高呈线性变化。如图1所示。

高可用集群能够有效地保护用户提供不间断的服务, 主要是让对外服务程序不间断, 降低由易错带来的损失和影响。主要原理为:系统中的各节点通过心跳线连接, 当检测到某个节点发生故障时, 备用节点在几秒钟时间内接替它的工作。整个系统对用户来说是完全透明的, 根本感觉不到集群节点间的服务迁移。高可用集群软件用来管理集群系统中的节点, 检查故障和自动化切换业务。对用户来说, 集群永远不会宕机。

二、进程迁移与TCP连接同步

2.1进程迁移。为了使由若干独立运行的物理主机组成的集群系统能够协调工作起来, 并且形成对用户透明的单一系统映像, 必须为集群系统提供统一的调度、负载均衡和共享服务[5,6]。进程迁移是支持负载均衡和高容错性的一种非常有效的手段, 是实现高可用性的基础。

当活动进程所在的节点出现故障或者繁忙时, 使进程迁移到被选择的目标节点主机上, 进程在两台主机之间传送的一个活动就是进程迁移。当管理者检测不到某个节点心跳时, 可以让可用节点进行接管, 从而实现集群高实用性。管理者检测节点心跳, 并负责控制进程迁移, 心跳数据流框图如图2。

2.2 TCP连接同步。由于TCP协议是面向连接的可靠的传输层协议, 绝大多数的网络应用都是基于TCP协议进行开发的。所以, 在高可用集群系统中TCP连接的高可用性起着至关重要的作用。为了使高可用集群系统中主节点失效时, 备用节点能够接替主节点上已经建立的TCP连接, 必须将这些已建立的TCP连接同步到备用节点以达到高可用的要求, 只用这样才能保证最终用户无缝的使用集群系统提供的高可用性服务[7]。

面向图书馆的高可用集群系统提供的服务是基于WEB的, 用户在访问图书馆的数字图书资源时, 通常都是将要阅读的资源下载到本地浏览器后阅读的, 所以对于TCP连接的同步要求并不高[8], 基于这种情况, 本系统忽略TCP连接同步, 同样能够对用户提供具有高可用性的服务。本系统将不采用TCP连接同步技术。

三、心跳机制

3.1 串口心跳机制。心跳机制是高可用集群的重要技术之一。节点之间通过心跳线连接, 周期性地检测集群中节点的工作状态, 当发现节点失效, 能够通知集群系统中的其它节点。

串行口是计算机中常用的通信接口, 由于其具有通讯简单, 连接线少等优点, 很快得到了广泛的使用。在高可用集群系统中, 用串口通信实现心跳机制是使用最早的也是使用最广泛的心跳机制。串口作为工业标准, 计算机中都自带有一个或者两个串口, 所以使用串口来实现心跳机制不需要添加格外的硬件设备, 而且由于是国际标准, 各种操作系统对于串口都提供了良好的编程接口, 编程实现起来比较方便。

3.2 网络心跳机制。使用串口线缆实现心跳机制虽然具有很多优点, 但是, 由于串口线的有效长度受限, 连接的主机数目较少, 另外一种比较常用的心跳机制就是使用网络通信的方式, 这种方式克服了上述串口线缆的缺点。

四、混合心跳机制

串口心跳和网络心跳两种心跳通信方式各有优缺点, 为了能够取得两种心跳的优点, 设计了串口加网络的心跳通信方式, 即混合的心跳通信机制, 集群节点距离较近时用串口连接, 当集群节点距离较远时使用网络连接[9,10]。这种机制很好的解决了集群节点分布着不同机房的情况。混合心跳机制系统图如图4:

混合心跳机制对应的物理连接方式使用串口连接和以太网链路连接相结合来实现, 串口连接采用环形心跳方式实现心跳通信, 由集群系统中的节点和相邻节点通过串口数据线相连形成环形网络, 可靠性相对较高。以太网链路连接采用广播心跳方式实现心跳通信, 节点把自身的状态信息打包成一个数据包, 通过网络广播的方式发送给每个信息可达的集群节点, 这样可有效把较远的节点包含进集群。

五、结论

该文研究了集群系统的高可用性, 分析了高可用集群系统的关键技术, 提出了用于高可用集群系统的混合心跳机制的设计方式, 有效增加了集群系统的节点, 同时提高了集群系统的可靠性, 该设计方式应用于南阳理工学院的图书馆, 测试结果满足了数字图书馆对高可用性的要求, 整个系统的各项技术指标达到了预期目标, 取得了较好的效果。但是在设计与实现时并没有考虑大量用户访问时的负载均衡技术, 存在一定的潜在问题, 要进一步实现负载均衡技术, 使其更加完备。

参考文献

[1]一茗, 张可, 陈龙.一种高可靠可控双冗余以太网的设计与实现[J].计算机科学, 2014, 41 (5) :97—101.

[2]李连登, 童艳.实时高可用测控集群关键技术研究[J].飞行器测控学报, 2015, 34 (3) :280一284.

[3]程子敬, 李富, 李周.一种高可靠并行环网的研究与实现[J].电子设计工程, 2011, 19 (23) :99-101.

[4]汪筱红.高可用集群技术的研究与应用[J].电脑知识与技术, 2011, 7 (20) :4855-4857.

[5]周江, 王伟平, 孟丹, 马灿, 古晓艳, 蒋杰.面向大数据分析的分布式文件系统关键技术[J].计算机研究与发展, 2014, 51 (2) :382-394.

[6]刘双, 崔金玉.基于Linux集群的Web服务研究[J].科技视界, 2012 (35) :117.

[7]阚晓初.高可用负载均衡高职院校就业网站集群实现[J].科技视界, 2014 (32) :90-98.

[8]孟相武, 程劲, 罗克露, 韩淙.基于Linux的高可用基群系统的设计及实现[J].电子科技大学学报, 2005, 34 (4) :529-532.

[9]1.Robertson A.Linux—HA Heartbeat System Design[C].In:4th Annual Linux Showcase and Conferenee, Atlanta, Geo a, 2000-10-14:305-3l6

2.Linux高可用集群 Corosync 篇二

1 Linux对Watchdog的支持

1.1 Watchdog软件介绍

Watchdog在实现上可以是硬件电路也可以是软件计时器,能够在系统出现故障时自动重新启动系统。Linux下的软件Watchdog是一种从某特定起始值连续不断地递减计数的计时器/定时程序。一旦它达到零,一个名为“Watchdog_fire”的函数就会被立即调用来记录该事件并启动硬性复位也就是快速重启操作系统。因此Watchdog守护进程就需要不断刷新该倒数计时器。只要守护进程不断向计时器发送数据,那么计时器就决不会无故“发火(fire)”,但如果出于某些原因守护进程停止工作,那么计时器就会火冒三丈并重启设备。然而,无论如何,在没有额外硬件支持的情况下,不是每种可能的死机Watchdog都能成功复原的,毕竟它只是一次简单快速的重启,你不可能对它期待太多,比如自动修复受损的操作系统。

1.2 Linux下Watchdog的工作原理

在Linux内核下Watchdog的基本工作原理是:当启动Watchdog守护进程后,守护进程会首先去打开指定的/dev/watchdog设备,从而启动Watchdog进程——这是一个无限循环,守护进程交替地向Watchdog设备写数据以更新倒数计时器,该过程即所谓喂狗,默认情况下守护进程会每休眠10秒喂次狗,如此往复不断。如果在10秒内/dev/watchdog没有被执行写操作,硬件Watchdog电路或软件计时器就会重新启动系统。/dev/watchdog是一个主设备号为10、从设备号为130的字符设备节点。Linux内核不仅为各种不同类型的Watchdog硬件电路提供驱动支持,还提供了一个基于倒数计时器的纯软件Watchdog驱动。驱动源码位于内核源码树driverscharwatchdog目录下。

1.3 硬件与软件Watchdog的区别

硬件Watchdog必须有硬件电路支持,设备节点/dev/watchdog对应着真实的物理设备,不同类型的硬件Watchdog设备由相应的硬件驱动管理;软件Watchdog由内核标准模块softdog.ko通过模拟硬件Watchdog计时器机制实现,设备节点/dev/watchdog并不对应真实的物理设备,只是为应用提供一个与操作硬件Watchdog相同的接口而已。

硬件Watchdog比软件Watchdog有更好的可靠性。软件Watchdog基于内核的计时器实现,当内核或中断出现异常时,软件Watchdog将会失效。而硬件Watchdog由自身的硬件电路控制,独立于内核。无论当前系统状态如何,硬件Watchdog在设定的时间间隔内没有被执行写操作,仍会重新启动系统。一些硬件Watchdog卡如WDT501P以及一些Berkshire卡还提供了/dev/temperature接口,可以监测系统温度。对于应用程序而言,操作软件、硬件Watchdog的方式基本相同:打开/dev/Watchdog设备,在重启时间间隔内对/dev/Watchdog执行写操作。即软件、硬件Watchdog对应用程序而言基本是透明的。但须注意,在任一时刻,只能有一个Watchdog驱动模块被加载,管理/dev/watchdog设备节点。

1.4 Linux内核中关于Watchdog的配置

在应用Watchdog机能之前,须先确认内核已经正确地配置以支持Watchdog机能。内核源码下的drivers/char/watchdog/Kconfig文件提供了各种Watchdog配置选项的详细介绍。

1.4.1 关键参数nowayout的配置

从列表1软件Watchdog的模块信息可知,模块参数'nowayout'的缺省值是'CONFIG_WATCHDOG_NOWAYOUT'内核选项。如果'CONFIG_WATCHDOG_NOWAYOUT'选项在内核配置时设为'Y',缺省情况下Watchdog一旦启动即设备节点/dev/watchdog被打开后,无论是执行close操作还是写入字符'V'都不能停止Watchdog的运行。

列表1 Linux内核中softdog驱动信息

1.4.2 关键参数soft_margin的配置

各种硬件以及软件Watchdog驱动都设有一个缺省的重启时间间隔,此重启时间间隔也可在加载驱动模块时设置。从列表1软件Watchdog的模块信息可知,'soft_margin'参数代表softdog.ko的重启时间间隔,缺省值是60秒,可在加载softdog.ko时指定重启时间间隔,如'modprobe softdog soft_margin=100'。

2 使用Watchdog提升Heartbeat的高可用性

不同的系统与应用有自己的监控需求,不同的被监控对象有相应的监控方法。下文将介绍如何在Heartbeat中加入Watchdog机制,在系统出现故障时重新启动系统,以提高系统的可用性。

2.1 在服务应用中增加Watchdog模块以提高应用的可用性

Linux因为其强大的功能已成为很多企业级应用的开发平台。这些管理或服务程序对可用性有较高的要求,通过在这类应用中加Watchdog模块,一方面监测系统状态,另一方面监测此应用中其它模块的工作状态。系统出现故障时能自动重启,因为应用已加在系统的init.d启动服务中,应用会随着系统的启动而启动,自动提供服务。

这类服务应用通常是多线程的,甚至是多进程的。加入Watchdog机制的通常作法是在应用中加入一个Watchdog线程,Watchdog线程在进入主循环之前的初始化阶段打开/dev/Watchdog启动Watchdog,然后执行喂狗的循环操作。如果此应用是多进程的,子进程的fork可以放在Watchdog线程的初始化阶段执行。Watchdog线程可以获得这些子进程的pid,从而检测这些子进程的工作状态。

2.2 在Heartbeat中加入Watchdog机能以提高数据库服务器集群的可用性

对于没有Watchdog支持的Heartbeat,如果主进程'master.control.process'所对应的PID(进程标识符)通过"kill-9 PID"被瞬时强杀,那么将导致集群中出现无法释放资源的失效节点的存在,于是整个集群陷入“头脑分裂”状态。

可使用Watchdog指令将软件Watchdog配置进Heartbeat中,告诉Heartbeat更新softdog计时器,这让Watchdog知道Heartbea正在运行并很健康,如果计时器没有更新,Watchdog将通知内核触发重启,实际上,我们是告诉Watchdog监视Heartbeat。当在/etc ha.d/ha.cf文件中启用Watchdog选项(参见列表2)后,Heartbeat将每隔相当于deadtime时长向/dev/Watchdog设备写数据,因此,出现任何导致Heartbeat更新Watchdog设备失败的事情,一旦超过deadtime时限softdog计时器归零,Watchdog将通知内核重启系统。

如果在编译内核时保留着'CONFIG_WATCHDOG_NOWAYOUT'选项,那么必须用参数'nowayout=0'来加载softdog.ko模块(参见列表2),否则,即使一个有序关闭Heartbeat的操作也会触发重启。

列表2配置Heartbeat加入Watchdog机能:

2.3 测试

列表3是对加入Watchdog机能的Heartbeat的测试详情:

2.4 结论

【Linux高可用集群 Corosync】推荐阅读:

可用性工程开发分析09-02

农业产业集群08-29

浅谈正确规范使用集群对讲机08-22

上一篇:人事招聘的请示格式下一篇:《岳阳楼记》直译及赏析

本站热搜

    相关推荐