您的位置:首页 > 运维架构 > Linux

linux heartbeat 的原理及配置过程

2014-04-23 00:00 513 查看
Linux-HA的全称是High-Availability Linux,它是一个开源项目。这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强Linux可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案。 高可用集群是由一些硬件和软件组成连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效,何时恢复为可用。这个任务通常由一组被称为“心跳”的代码完成。在Linux-HA里这个功能由一个叫做heartbeat的程序完成。Heartbeat是Linux-HA项目中的一个组件,也是目前开源HA项目中最成功的一个例子,它提供了所有HA软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享IP地址的所有者等。heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

Heartbeat有三个版本分别为Heartbeat v1.x,Heartbeat v2.x,Heartbeat v3.x。Heartbeat v1.x和Heartbeat v2.x版本的组成结构十分简单,所有模块都集中在heartbeat中,到了v3版本后,整个heartbeat项目进行了拆分,分为不同的项目来分别进行开发。

Heartbeat包括以下几个组件:

heartbeat � 节点间通信校验模块

CRM - 集群资源管理模块

heartbeat v1: haresources (配置接口:配置文件,文件名也叫haresources)

heartbeat v2: crm (各节点均运行进程crmd,配置接口:客户端crmsh(shell),heartbeat-GUI)

heartbeat v3 = heartbeat + pacemaker + cluster-glue:

pacemaker:

配置接口:

CLI: crm(SuSE), pcs

GUI: hawk, LCMC, pacemaker-mgmt

cman + rgmanager:

resource group manager: Failover Domain

配置接口:

RHCS: RedHat Cluster Suite

配置接口:Conga (完全生命令周期的配置接口)

CCM - 维护集群成员的一致性

LRM - 本地资源管理模块

StonithDaemon - 使出现问题的节点从集群环境中脱离

logd - 非阻塞的日志记录

Recovery Manager - 应用故障恢

这里主要分析的是Heartbeat的集群通信机制,所以这里主要关注的是heartbeat模块。

heartbeat模块由以下几个进程构成:

master进程(masterprocess)

FIFO子进程(fifochild)

read子进程(readchild)

write子进程(writech



ild)

Heartbeat的原理

集群成员一致性管理模块(CCM

CCM用于管理集群节点成员,同时管理成员之间的关系和节点间资源的分配。Heartbeat模块负责检测主次节点的运行状态,以决定节点是否失效。ha-logd模块用于记录集群中所有模块和服务的运行信息。
本地资源管理器(LRM
LRM负责本地资源的启动、停止和监控,一般由LRM守护进程lrmd和节点监控进程Stonith Daemon组成。lrmd守护进程负责节点间的通信;Stonith Daemon通常是一个Fence设备,主要用于监控节点状态,当一个节点出现问题时处于正常状态的节点会通过Fence设备将其重启或关机以释放IP、磁盘等资源,始终保持资源被一个节点拥有,防止资源争用的发生。
集群资源管理模块(CRM
CRM用于处理节点和资源之间的依赖关系,同时,管理节点对资源的使用,一般由CRM守护进程crmd、集群策略引擎和集群转移引擎3个部分组成。集群策略引擎(Cluster policy engine)具体实施这些管理和依赖;集群转移引擎(Cluster transition engine)监控CRM模块的状态,当一个节点出现故障时,负责协调另一个节点上的进程进行合理的资源接管。
在Heartbeat集群中,最核心的是Heartbeat模块的心跳监测部分和集群资源管理模块的资源接管部分。心跳监测一般由串行接口通过串口线来实现,当然,也可以用交叉网线连接。两个节点之间通过串口线相互发送报文来告诉对方自己当前的状态。如果在指定的时间内未受到对方发送的报文,就认为对方失效,这时资源接管模块将启动,用来接管运行在对方主机上的资源或者服务。

演示过程

前提:

一、要保持hosts文件的主机名和uname -n 显示的要一致。

[root@node1 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.0.1 server.magelinux.com server

172.16.24.6 node1.edu.com node1

172.16.24.7 node2.edu.com node2

172.16.24.8 node3.edu.com node3

~

[root@node1 ~]# uname -n

node1.edu.com

如果不一致可以通过以下命令修改:

[root@node1 ~]# vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=node1.edu.com

[root@node1 ~]# vim /etc/hosts

[root@node1 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.0.1 server.magelinux.com server

172.16.24.6 node1.edu.com node1

172.16.24.7 node2.edu.com node2

172.16.24.8 node3.edu.com node3

二、让两台主机基于ssh不通过密钥相互信





第二个主机上执行相同的命令记提把主机名改成第一个主机的主机名

三、时间要同步

[root@node1 ~]# ssh node2.edu.com 'date';date

Sun Apr 20 10:21:25 CST 2014

Sun Apr 20 10:21:25 CST 2014

四、安装heartbeat2

  heartbeat2各包之间有依赖关系,执行下面的命令解决依赖关系,

  yum install perl-TimeDate net-snmp-libs libnet PyXML

  rpm -ivh heartbeat-2.1.4-12.e16.rpm heartbeat-pils heartbeat-stonith

五配置heartbeat2

5.1 配置主配置Ha.cf

以下将对主配置文件ha.cf的基本常用选项作详细说明:
[root@node1 ~]# vim /etc/ha.d/ha.cf
#logfacility local0 可注释掉此选项,开启下面的日志路径;
logfile /var/log/ha-log 设置heartbeat日志存放位置;
keepalive 2 设定心跳(监测)时间时间为2秒;
warntime 5 连续多长时间联系不上后开始警告提示;
deadtime 20 连续多长时间联系不上后认为对方挂掉了(单位是妙);
initdead 120 这里主要是给重启后预留的一段忽略时间段
udpport 694 设置广播通信的端口,默认为694;
baud 19200 设置串行通讯的波特率;
bcast eth1 指明心跳使用以太网的广播方式,并且在eth1口上进行广播;
auto_failback off 恢复正常后是否需要再自动切换回来,此处off说明恢复后不需要切换;
node node1.edu.com 主节点主机名,可以通过“uname -n”查看;
node node2.edu.com 备用节点主机名;
ping 192.168.0.254 测试网络连通性,此处自定义,一般设为网关地址,但要保证是通的;
respawn hacluster /usr/lib/heartbeat/ipfail #可选,列出和heartbeat一起启动和关闭的进程;

5.2 配置资源文件Haresources

Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源。
下面针对本测试项目作如下编辑:
[root@node1 ~]# vim /etc/ha.d/haresources
node1.edu.com 172.16.24.19/16/eth0/ httpd

5.3 配置双机互联认证文件Authkey

可以先利用penssl生成一个密钥文件然后把密钥粘贴到配置方件中,具体如下

[root@node1 ~]# openssl rand -hex 8

314bb3c63ddbc062

[root@node1 ~]# vim /etc/ha.d/authkeys

auth 2
2 sha13 14bb3c63ddbc062

5.4 配置备份节点的Heartbeat

在备份节点上也需要安装Heartbeat,安装方式与在主节点安装过程一样,这里不再重述,依次安装libnet和heartbeat源码包,安装完毕,注意,配置文件不需作任何更改:安装完成之后在主机1 上执行下面的操作:
[root @node1 ~]# scp -p authkeys haresources ha.cf.node2:/etc/ha.d
六、为两台主机配置WEB服务

[root @node1 ~]# rpm -q httpd

[root @node1 ~]# ssh node2 'rpm -q httpd'

[root @node1 ~]# cd /var/www/html

[root @node1 ~]# vim index.html

<h1>node1.magedu.com</h1>

[root @node1 ~]# service httpd start

[root @node1 ~]# curl http://172.16.100.7
[root @node1 ~]# service httpd stop

[root @node1 ~]# chkconfig httpd off

为第二台主机配置web服务

[root @node2 ~]# vim /var/www/html

[root @node2 ~]# vim index.html

[root @node2 ~]# <h1>node2.magedu.com</h1>

[root @node2 ~]# service httpd start

[root @node2 ~]# curl http://172.16.100.8
[root @node2 ~]# service httpd stop

[root @node2 ~]# chkconfig httpd off

七、启动heartbeateb服务

[root @node1 ~]# service heartbeat start

[root @node1 ~]# ssh node2.magedu.com 'service heartbeat start'

[root @node1 ~]# ssh node1.magedu.com 'service heartbeat stop'

[root @node1 ~]# ssh node1.magedu.com 'service heartbeat start'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息