heartbeat学习记录

通过今天对(循序渐进Linux 第18章 Linux-HA开源软件Heartbeat 高俊峰),如果我没有记错的话 高俊峰,应该是兄弟连的老师吧
http://book.51cto.com/art/200912/167780.htm http://book.51.cto.com有很多不错书,还有试读章节,很多错,再买实体书的时候可以先去读一下试读章节

(等我环境搭建好,并运行一段时间后,我会分析一些脑裂现象,以及如何解决)

(时间很重要,对于群集来说很重,对日志也很重要,一定要在安装完系统后立即同步时间,我建议是安装ntpd服务,可以联网去向外网ntp服务器同步,不能联网自建ntp服务器)

Heartbeat是基于主机或网络的服务的高可用方式;
keepalived的目的是模拟路由器的双机
heartbeat的目的是用户service的双机
lvs的高可用建议用keepavlived
业务的高可用用heartbeat

Heartbeat支持3种类型的网络,即公用网络(public network)、私用网络(private network)和串行网络(serial network)。

HA群集中的相关术语:
1.节点:
运行Heartbeat进程的独立主机,成为节点。节点有主备之分,每个节点拥有唯一的主机名和属于自己的一组资源,主节点一般运行着一个或多个应用服务,而备用节点一般处于监听状态。

2. 资源(resource):
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其他节点接管。
可以当做资源的实体有:
磁盘分区、文件系统;
IP地址;
应用程序服务;
NFS文件系统。

3.事件(event) :
也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障和应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。
4.动作(action) :
事件发生时HA的响应方式、动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动,进而接管故障节点的资源

Heartbeat的组成与原理
Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序。
eartbeat 2.0的内部组成,主要分为以下几大部分:
heartbeat:节点间通信检测模块。
ha-logd:集群事件日志服务。
CCM(Consensus Cluster Membership):集群成员一致性管理模块。
LRM(Local Resource Manager):本地资源管理模块。
Stonith Daemon:使出现问题的节点从集群环境中脱离。
CRM(Cluster Resource Management):集群资源管理模块。
Cluster policy engine:集群策略引擎。
Cluster transition engine:集群转移引擎。

Heartbeat 2.0内部结构图

要监控资源和应用程序是否运行正常,必须使用第三方的插件,heartbeat自身包含了几个插件,分别是ipfail、stonith、Ldirectord

ipfail使用ping节点或者ping节点组来检测网络连接是否出现故障,从而及时做出转移措施。
Stonith插件可以在一个没有响应的节点恢复后,合理接管集群服务资源,防止数据冲突。当一个节点失效后,会从集群中删除。
Ldirector是一个监控集群服务节点运行状态的插件。Ldirector如果监控到集群节点中某个服务出现故障,就屏蔽此节点的对外连接功能,同时将后续请求转移到正常的节点提供服务

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

对于操作系统自身出现的问题,Heartbeat也无法监控。如果主节点操作系统挂起,一方面可能导致服务中断,另一方面由于主节点资源无法释放,而备份节点却接管了主节点的资源,此时就发生了两个节点同时争用一个资源的状况。
针对这个问题,就需要在Linux内核中启用一个叫watchdog的模块。watchdog是一个Linux内核模块,它通过定时向/dev/watchdog设备文件执行写操作,从而确定系统是否正常运行。如果watchdog认为内核挂起,就会重新启动系统,进而释放节点资源。
Linux中完成watchdog功能的软件叫softdog。softdog维护一个内部计时器,此计时器在一个进程写入/dev/watchdog设备文件时更新。如果softdog没有看到进程写入/dev/watchdog文件,就认为内核可能出了故障。watchdog超时周期默认是一分钟,可以通过将watchdog集成到Heartbeat中,从而通过Heartbeat来监控系统是否正常运行。

Heartbeat集群的一般拓扑图

存储:
Heartbeat支持两种对共享磁盘的访问方式:独占访问和共享访问。在独占访问方式下,保持活动的节点独立使用磁盘设备,只有当活动节点释放了磁盘设备,其他节点才能接管磁盘进行使用。在共享访问方式下,集群所有节点都可以同时使用磁盘设备。当某个节点出现故障时,其他节点无需接管磁盘。共享访问方式需要集群文件系统的支持,这一点将在下个章节讲述。

配置Heartbeat
Heartbeat的主要配置文件有ha.cf、haresources和authkeys。在Heartbeat安装后,默认并没有这3个文件,可以从官方网站下载得到,也可以直接从解压的源码目录中找到。将这三个文件放到/etc/ha.d目录下
1.主配置文件(/etc/ha.d/ha.cf)
指定心跳检测支持Bcast、Ucast和Mcast,多台建议组播,2台单播,不建议广播
在设置时间上要考虑系统启动时间的延迟(initdead 【至少要设置deadtime2倍时间】){可以参考rip的时间设置,玩路由交换的,对此有更好的认知}
对于ping IP 和 持续往/dev/watchdog写文件的原因对看vmware vcenter 的 HA原理吧(很重要,这两个一定要开)
2.资源文件(/etc/ha.d/haresources)
Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:
服务写成可以通过start/stop来启动和关闭的脚步,然后放到/etc/init.d/或者/etc/ha.d/resource.d/目录下,Heartbeat会根据脚本的名称自动去/etc/init.d或者/etc/ha.d/resource.d/目录下找到相应脚步进行启动或关闭操作。
node-name network <resource-group
例:node1 IPaddr::192.168.60.200/24/eth0/ Filesystem::
/dev/sdb5::/webdata::ext3 httpd tomcat
node1是HA集群的主节点,IPaddr为heartbeat自带的一个执行脚步,Heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 192.168.60.200/24 start的操作,也就是虚拟出一个子网掩码为255.255.255.0,IP为192.168.60.200的地址。此IP为Heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口为eth0。接着,Heartbeat将执行共享磁盘分区的挂载操作,”Filesystem::/dev/sdb5::/webdata::ext3″相当于在命令行下执行mount操作,即”mount -t ext3 /dev/sdb5 /webdata”,最后依次启动httpd和Tomcat服务。
{主节点和备份节点中资源文件haresources要完全一样}

3.认证文件(/etc/ha.d/authkeys)
authkeys有3种可用的认证方式,即crc、md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。
设置如下:
auth 1
1 crc
需要说明的一点是:无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了”auth 6″,下面一定要有一行”6 认证类型”。
最后确保这个文件的权限是600

备份节点配置
在备份节点上也需要安装Heartbeat,安装方式与在主节点安装过程一样,这里不再重述。依次安装libnet和heartbeat源码包,安装完毕,在备份节点上使用scp命令把主节点配置文件传输到备份节点。
[root@node2 ~]#scp -r node1:/etc/ha.d/* /etc/ha.d/
其中,node1是主节点的主机名。

启动:
/etc/init.d/heartbeat start
chkconfig heartbeat on

查看启动日记
tail -f /var/log/ messages
(一行一行的看日志太痛苦了,我正在找最合适我的分析日志的工具…)

验证:
1.正常关闭和重启主节点的Heartbeat
2.在主节点上拔去网线
3.在主节点上拔去电源线
4.切断主节点的所有网络连接
5.在主节点上非正常关闭Heartbeat守护进程
(kill -9)

Leave a Reply

Your email address will not be published. Required fields are marked *