I 概念及工作原理 一、Heartbeat的概念组成以及工作原理 1、 heartbeat的概念 Heartbeat是Linux-HA项目中的一个组件,也是目前开源HA项目中最成功的一个例子, Linux-HA的全称是High-Availability Linux,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案. Heartbeat提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等. Linux-HA的官方网站: http://www.linux-ha.org http://hg.linux-ha.org

2、 HA集群相关术语 (1) 节点(node) 运行heartbeat进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和heartbeat软件服务,在heartbeat集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。 (2)资源(resource) 资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,heartbeat中,可以当做资源的实体有: 磁盘分区、文件系统、IP地址、应用程序服务、NFS文件系统 (3)事件(event) 也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。 (4)动作(action) 事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源。 3、 Heartbeat的组成 (1) Heartbeat的结构 Heartbeat1.x和2.0.x版本的结构十分简单,各个模块都集中在heartbeat中,到了3.0版本后,整个heartbeat项目进行了拆分,分为不同的项目来分别进行开发。 Heartbeat2.0.x之前的版本具有的模块:  heartbeat: 节点间通信检测模块  ha-logd: 集群事件日志服务  CCM(Consensus Cluster Membership):集群成员一致性管理模块  LRM (Local Resource Manager):本地资源管理模块  Stonith Daemon: 使出现问题的节点从集群环境中脱离  CRM(Cluster resource management):集群资源管理模块  Cluster policy engine: 集群策略引擎  Cluster transition engine:集群转移引擎 Heartbeat3.0拆分之后的组成部分: Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及它们之前通信; Cluster Glue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,即为LRM和STONITH。 Resource Agent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。 Pacemaker:也就是Cluster Resource Manager (简称CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。 Pacemaker 提供了多种用户管理接口,分别如下: 1)crm shell:基于字符的管理方式; 2)一个使用Ajax Web配置方式的web konsole窗口; 3)hb_gui ,即heartbeat的gui图形配置工具,这也是原来2.1.x的默认GUI配置工具; 4)DRBD-MC,一个基于Java的配置管理工具。 (2) Pacemaker内部组成及与各模块之间关系 (3) Heartbeat3.x内部组成及之间关系 (4) Heartbeat各个版本之间的异同 与1.x风格相比,Heartbeat2.1.x版本之后功能变化如下: 1)保留原有所有功能 如,网络,heartbeat ,机器down时均可切换资源。 2)自动监控资源 默认情况下每2分钟检测资源运行情况,如果发现资源不在,则尝试启动资源, 如果60s后还未启动成功,则资源切换向另节点。时间可以修改。 3) 可以对各资源组实现独立监控. 比如apache运行在node1上,tomcat运行在node2上,Heartbeat可同时实现两台主机的服务监控。 4)同时监控系统负载 可以自动将资源切换到负载低的node上。 Heartbeat官方最后一个STABLE release 2.x 版本是2.1.4,Heartbeat 3官方正式发布的首个版本是3.0.2,Heartbeat 3与Heartbeat2.x的最大差别在于,Heartbeat3.x按模块把的原来Heartbeat2.x拆分为多个子项目,但是HA实现原理与Heartbeat2.x基本相同。配置也基本一致。 (5) Heartbeat集群的一般拓扑图 II 安装、配置及维护 一、安装heartbeat前的准备

1、Heartbeat集群必须的硬件

构建一个Heartbeat集群系统必须的硬件设备有:

节点服务器、网络和网卡、共享磁盘

2、操作系统规划

这里统一采用Centos5.3操作系统,每个节点服务器都有两块网卡,一块用作连接公用网络,另一块通过以太网交叉线连接两个节点,作为心跳监控。共享磁盘由一个磁盘阵列设备提供,两个节点共享一个磁盘分区。磁盘分区对应的硬件标识为/dev/sdf1,挂载点为/data1,文件系统类型为ext3。如图1所示: 图1 网络拓扑如图2所示: 图2 配置每个节点的/etc/hosts文件,保证两个节点内容一致,/etc/hosts文件内容如下: [root@node1 ~]#more /etc/hosts 192.168.12.246 node1 192.168.12.237 node2 10.1.1.1 priv1 10.1.1.2 priv1 一切准备就绪,接下来开始安装heartbeat。 二、安装heartbeat

这里的安装以heartbeat3.x为讲解对象,以下操作需要在两个节点都进行安装,基本安装过程为:

首先建立相关用户hacluster和组haclient,然后设定环境变量,最后就是安装heartbeat,过程如下: 1、添加用户和组 groupadd haclient useradd -g haclient hacluster 2、设置环境变量

vi /root/.bash_profile,添加如下内容: export PREFIX=/usr/local/ha export LCRSODIR=$PREFIX/libexec/lcrso export CLUSTER_USER=hacluster export CLUSTER_GROUP=haclient export CFLAGS=”$CFLAGS -I$PREFIX/include -L$PREFIX/lib” getent group ${CLUSTER_GROUP} >/dev ull || groupadd -r ${CLUSTER_GROUP} getent passwd ${CLUSTER_USER} >/dev ull || useradd -r -g ${CLUSTER_GROUP} -d /var/lib/heartbeat/cores/hacluster -s /sbin ologin -c “cluster user” ${CLUSTER_USER} heartbeat3.x版本把安装包分成了4个部分,分别是:Cluster Glue、Resource Agents、heartbeat和pacemaker,所以要分别安装,可以从 http://hg.linux-ha.org 、 http://hg.clusterlabs.org 下载对应的软件包,这里使用的软件版本分别为:

glue-1.0.7、agents-1.0.3、heartbeat-STABLE-3.0.4、Pacemaker-1.0.10 3、安装各个模块软件包

(1)安装Cluster Glue tar –xjvf Reusable-Cluster-Components-glue–5e06b2ddd24b.tar.bz2 cd Reusable-Cluster-Components-glue–5e06b2ddd24b ./autogen.sh ./configure –prefix=$PREFIX –with-daemon-user=${CLUSTER_USER} –with-daemon-group=${CLUSTER_GROUP} –enable-fatal-warnings=no make make install (2)安装Resource Agents tar jxvf Cluster-Resource-Agents-5ae70412eec8.tar.bz2 cd Cluster-Resource-Agents-5ae70412eec8 ./autogen.sh ./configure –prefix=$PREFIX –enable-fatal-warnings=no make make install (3)安装heartbeat tar jxvf Heartbeat-3-0-fcd56a9dd18c.tar.bz2 cd Heartbeat-3-0-fcd56a9dd18c ./bootstrap ./configure –prefix=$PREFIX –enable-fatal-warnings=no make make install (4)安装pacemaker tar jxvf Pacemaker-1-0-c3869c00c759.tar.bz2 cd Pacemaker-1-0-c3869c00c759 ./autogen.sh ./configure –prefix=$PREFIX –with-lcrso-dir=$LCRSODIR –enable-fatal-warnings=no make make install 4、安装图像管理工具Pacemaker-Python-GUI [root@drbd1 Pacemaker-Python-GUI-18332eae086e]# tar jxvf Pacemaker-Python-GUI-18332eae086e.tar.bz2 [root@drbd1 Pacemaker-Python-GUI-18332eae086e]#cd Pacemaker-Python-GUI-18332eae086e [root@drbd1 Pacemaker-Python-GUI-18332eae086e]#./bootstrap –prefix=$PREFIX CFLAGS=”$CFLAGS -I$PREFIX/include -L$PREFIX/lib” [root@drbd1 Pacemaker-Python-GUI-18332eae086e]#make [root@drbd1 Pacemaker-Python-GUI-18332eae086e]#make install 可能出现如下报错: aclocal:configure.in:57: warning: macro AM_PO_SUBDIRS' not found in library ./configure: line 2064: syntax error near unexpected token 0.35.2’ ./configure: line 2064: `AC_PROG_INTLTOOL(0.35.2)‘ 只需安装gettext和intltool-0.35.0-2软件包即可 三、配置heartbeat 对HA的配置分为两个部分,配置heartbeat和pacemaker,与heartbeat版本相对应,配置文件也有两个版本,即为heartbeat1.x的1.x style版本和heartbeat2.1.x版本之后的2.1.x style版本,我们可以借助1.x style的集群资源配置文件转换为2.x style的格式,同时,在heartbeat2.1.x版本之后使用CRM来管理整个集群。集群开始时,通过在各节点间选举产生一个节点成为DC(Designated Coordinator),所有配置操作都在该DC主机上进行,并由其分发到集群下的各个节点上。下面依次讲述。 1、1.x和2.x配置文件对比

 /usr/local/ha/etc/ha.d/authkeys 该文件在两个版本作用是完全相同的,都必须设置,并且保证每个节点(node)内容一样

 /usr/local/ha/etc/ha.d/ha.cf 这个是主要配置文件,由其决定v1或v2 style格式

 /usr/local/ha/etc/haresources 这是v1的资源配置文件

 /usr/local/ha/var/lib/heartbeat/crm/cib.xml 这是v2的资源配置文件,两者根据ha.cf的设定只能选其一.

v2版本使用CRM管理集群,而cib.xml文件有如下几种方式来编写:

 人工编写XML文件;

 使用admintools工具,其已经包含在heartbeat包中;

 使用GUI图形工具配置,也包含在heartbeat-gui包里面,这个一会介绍;

 使用python脚本转换1.x style的格式配置文件到2.x style格式。

这四种方法实质都是相同的,并且以python脚本转换最为简单容易。为此,可以先配置好1.x style的格式,然后通过python脚本进行转换。 2、配置heartbeat

1)首先拷贝模板配置文件 cp /usr/local/ha/share/doc/authkeys /usr/local/ha/etc/ha.d cp /usr/local/ha/share/doc/ha.cf /usr/local/ha/etc/ha.d cp /usr/local/ha/share/doc/haresources /usr/local/ha/etc/ha.d 3、主配置文件(/etc/ha.d/ha.cf)

下面对ha.cf文件的每个选项进行详细介绍,其中“#”号后面的内容是对选项的注释说明。 #debugfile /var/log/ha-debug logfile /var/log/ha-log #指名heartbeat的日志存放位置。 #crm yes #是否开启Cluster Resource Manager(集群资源管理)功能。 bcast eth1 #指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。 keepalive 2 #指定心跳间隔时间为2秒(即每两秒钟在eth1上发送一次广播)。 deadtime 30 #指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。 warntime 10 #指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。 initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。 udpport 694 #设置广播通信使用的端口,694为默认使用的端口号。 baud 19200 #设置串行通信的波特率。 #serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网。 #ucast eth0 192.168.1.2 #采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址。 #mcast eth0 225.0.0.1 694 1 0 #采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。 auto_failback on #用来定义当主节点恢复后,是否将服务自动切回,heartbeat的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。 #stonith baytech /etc/ha.d/conf/stonith.baytech # stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。 #watchdog /dev/watchdog #该选项是可选配置,是通过Heartbeat来监控系统的运行状态。使用该特性,需要在内核中载入”softdog”内核模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入”insmod softdog”加载该模块。然后输入”grep misc /proc/devices”(应为10),输入”cat /proc/misc |grep watchdog”(应为130)。最后,生成设备文件:”mknod /dev/watchdog c 10 130” 。即可使用此功能。 node node1 #主节点主机名,可以通过命令“uanme –n”查看。 node node2 #备用节点主机名。 ping 192.168.12.1 #选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。 ping_group group1 192.168.12.251 192.168.12.239 #类似于ping。 #respawn hacluster /usr/local/ha/lib/heartbeat/ipfail apiauth pingd gid=haclient uid=hacluster respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s #该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是pingd,此进程用于检测和监控网卡状态,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动pingd进程的身份。 #下面的配置是关键,也就是激活crm管理,开始使用v2 style格式 crm respawn #注意,还可以使用crm yes的写法,但这样写的话,如果后面的cib.xml配置有问题 #会导致heartbeat直接重启该服务器,所以,测试时建议使用respawn的写法 #下面是对传输的数据进行压缩,是可选项 compression bz2 compression_threshold 2 注意,v2 style不支持ipfail功能,须使用pingd代替 4、资源文件(/etc/ha.d/haresources)

Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为: node-name network < resource-group> node-name表示主节点的主机名,必须和ha.cf文件中指定的节点名一致,network用于设定集群的IP地址、子网掩码、网络设备标识等,需要注意的是,这里指定的IP地址就是集群对外服务的IP地址,resource-group用来指定需要heartbeat托管的服务,也就是这些服务可以由heartbeat来启动和关闭,如果要托管这些服务,必须将服务写成可以通过start/stop来启动和关闭的脚步,然后放到/etc/init.d/或者/etc/ha.d/resource.d/目录下,heartbeat会根据脚本的名称自动去/etc/init.d或者/etc/ha.d/resource.d/目录下找到相应脚步进行启动或关闭操作。

LSB: Linux标准脚本文件(init script),通常放在/etc/init.d/目录下,heartbeat1.x版本之前的管理脚本一半放在/etc/ha.d/resource.d,在这里是/usr/local/ha/etc/ha.d/resource.d

OCF:Open Cluster Framework,默认放在/usr/lib/resource.d/heartbeat/目录下;在这里是/usr/local/ha/etc/ha.d/resource.d

下面介绍一下ocf和lsb格式的区别:

LSB格式的脚本必须支持status功能,必须能接收start,stop,status,三个参数;而如果是OCF格式,则必须支持start,stop,monitor三个参数.其中status和monitor参数是用来监控资源的,非常重要.

例如LSB风格的脚本,运行./Mysql status时候, 返回值包含OK或则running则表示资源正常,返回值包含stopped或者No则表示资源不正常。 假如是OCF风格的脚本,运行./Mysql monitor时候, 返回0表示资源是正常的, 返回7表示资源出现问题. 下面对配置方法进行具体说明: 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/sdf1::/data1::ext3”相当于在命令行下执行mount操作,即“mount –t ext3 /dev/sdf1 /data1”,最后依次启动httpd和tomcat服务。

16

5、认证文件(/etc/ha.d/authkeys)

authkeys文件用于设定heartbeat的认证方式,共有三种可用的认证方式:crc、md5和sha1,三种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果heartbeat集群运行在安全的网络上,可以使用crc方式,如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高,如果是处于网络安全和系统资源之间,可以使用md5认证方式。这里我们使用crc认证方式,设置如下: auth 1 1 crc #2 sha1 sha1_any_password #3 md5 md5_any_password 需要说明的一点是:无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了“auth 6”,下面一定要有一行“6 认证类型”。

最后确保这个文件的权限是600(即-rw——-)。 6、配置pacemaker

在使用CRM管理的时候,也就是heartbeat第二种配置格式,就需要配置pacemaker了。通过pacemaker可以对集群资源进行监控和配置。

在HA环境中,所有资源的信息,和对其的配置都是以xml格式进行存储的,所以对其进行管理监控配置都是对xml文件进行读写。所以对pacemaker进行配置其实就是对cib.xml文件进行读写,这个文件在不同环境中存在于不同位置,在我们的环境中存在于/usr/local/ha/var/lib/heartbeat/crm/cib.xml,可以用vi对其进行查看。

但需要说明的是对其的改写一定不能用vi或其他编辑器进行,而是要通过提供的工具,如cibadmin, crm等命令来进行。这是基于以下原因:

xml不易读写,而crm提供了具体的,对应的命令来进行资源信息的监控,配置管理。

这个文件的修改直接作用于HA环境的变更,如果在里面执行了一个删除服务的操作,那么这个操作可能会破坏整个环境的运行,所以HA提供了一套机制来避免这种状况的发生,这个机制名为shadow。即我们在通过命令工具修改这个文件时,会将修改后的配置尝试运行,检测一遍,看是否有错误,如果有错则会不能进行修改的提交,这样就保证了配置的正确性和环境的稳定性。因为手动直接修改这个文件无法应用这个机制,所以不能使用手动修改。

另外需要说明的是这个文件在所有节点上会自动保持同步,如果有一个节点上面的cib.xml有变更,则其他节点会自动进行该文件的增量拷贝。

采用pacemaker管理集群的方法有两种,分别如下:

(1) 转换v1.x为v2.x格式文件

如果要采用heartbeat的v2.x格式配置文件,最简单的办法就是通过heartbeat提供的一个使用python写的转换工具,可直接将资源配置文件从v1.x转换为v2.x格式, /usr/local/ha/lib/heartbeat/haresources2cib.py /usr/local/ha/etc/ha.d/haresources 这样就自动生成/usr/local/ha/var/lib/heartbeat/crm/cib.xml文件了。

(2)通过Pacemaker-Python-GUI

也就是通过GUI图形界面进行相关的配置 7、通过pacemaker配置和管理HA集群

通过以下几个步骤即可完成:

 安装Pacemaker-Python-GUI

 将集群配置为Pacemaker(CRM)集中管理方式,即修改ha.cf文件

 给hacluster用户创建密码

 启动heartbeat服务

 登陆xwindow,执行hb_gui程序即可,如图3所示: 图3 III 测试Heartbeat HA功能 一、启动Heartbeat 1、启动主节点的Heartbeat Heartbeat安装完成后,自动在/etc/init.d目录下生成了启动脚步文件heartbeat,直接输入/etc/init.d/heartbeat可以看到heartbeat脚本的用法,如下所示: [root@node1 ~]# /etc/init.d/heartbeat Usage: /etc/init.d/heartbeat {start|stop|status|restart|reload|force-reload} 因而启动heartbeat可以通过如下命令进行: [root@node1 ~]#service heartbeat start 或者通过 [root@node1 ~]#/etc/init.d/heartbeat start 这样就启动了主节点的heartbeat服务 日志信息如下: Feb 5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: bound send socket to device: eth0 Feb 5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: bound receive socket to device: eth0 Feb 5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: started on port 694 interface eth0 to 192.168.12.1 Feb 5 19:09:48 node1 heartbeat: [22768]: info: glib: ping heartbeat started. Feb 5 19:09:48 node1 heartbeat: [22768]: info: glib: ping group heartbeat started. Feb 5 19:09:48 node1 heartbeat: [22768]: info: Local status now set to: ‘up’ Feb 5 19:09:49 node1 heartbeat: [22768]: info: Link 192.168.12.1:192.168.12.1 up. Feb 5 19:09:49 node1 heartbeat: [22768]: info: Status update for node 192.168.12.1: status ping Feb 5 19:09:49 node1 heartbeat: [22768]: info: Link group1:group1 up. Feb 5 19:09:49 node1 heartbeat: [22768]: info: Status update for node group1: status ping 此段日志是Heartbeat在进行初始化配置,例如,heartbeat的心跳时间间隔、UDP广播端口、ping节点的运行状态等,日志信息到这里会暂停,等待120秒之后,heartbeat会继续输出日志,而这个120秒刚好是ha.cf中“initdead”选项的设定时间。此时heartbeat的输出信息如下: Feb 5 19:11:48 node1 heartbeat: [22768]: WARN: node node2: is dead Feb 5 19:11:48 node1 heartbeat: [22768]: info: Comm_now_up(): updating status to active Feb 5 19:11:48 node1 heartbeat: [22768]: info: Local status now set to: ‘active’ Feb 5 19:11:48 node1 heartbeat: [22768]: info: Starting child client “/usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s” (102,105) Feb 5 19:11:49 node1 heartbeat: [22768]: WARN: No STONITH device configured. Feb 5 19:11:49 node1 heartbeat: [22768]: WARN: Shared disks are not protected. Feb 5 19:11:49 node1 heartbeat: [22768]: info: Resources being acquired from node2. Feb 5 19:11:49 node1 heartbeat: [22794]: info: Starting “/usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s” as uid 102 gid 105 (pid 22794) 在上面这段日志中,由于node2还没有启动,所以会给出“node2: is dead”的警告信息,接下来启动了heartbeat插件pingd,由于我们在ha.cf文件中没有配置STONITH,所以日志里也给出了“No STONITH device configured”的警告提示。 继续看下面的日志: Feb 5 19:11:50 node1 IPaddr[22966]: INFO: Resource is stopped Feb 5 19:11:50 node1 ResourceManager[22938]: info: Running /usr/local/ha/etc/ha.d/resource.d/IPaddr 192.168.12.135 start Feb 5 19:11:50 node1 IPaddr[23029]: INFO: Using calculated nic for 192.168.12.135: eth0 Feb 5 19:11:50 node1 IPaddr[23029]: INFO: Using calculated netmask for 192.168.12.135: 255.255.255.0 Feb 5 19:11:51 node1 pingd: [22794]: info: attrd_lazy_update: Connecting to cluster… 5 retries remaining Feb 5 19:11:51 node1 IPaddr[23029]: INFO: eval ifconfig eth0:0 192.168.12.135 netmask 255.255.255.0 broadcast 192.168.12.255 Feb 5 19:11:51 node1 avahi-daemon[2455]: Registering new address record for 192.168.12.135 on eth0. Feb 5 19:11:51 node1 IPaddr[23015]: INFO: Success Feb 5 19:11:51 node1 Filesystem[23134]: INFO: Resource is stopped Feb 5 19:11:51 node1 ResourceManager[22938]: info: Running /usr/local/ha/etc/ha.d/resource.d/Filesystem /dev/sdf1 /data1 ext3 start Feb 5 19:11:52 node1 Filesystem[23213]: INFO: Running start for /dev/sdf1 on /data1 Feb 5 19:11:52 node1 kernel: kjournald starting. Commit interval 5 seconds Feb 5 19:11:52 node1 kernel: EXT3 FS on sdf1, internal journal Feb 5 19:11:52 node1 kernel: EXT3-fs: mounted filesystem with ordered data mode. Feb 5 19:11:52 node1 Filesystem[23205]: INFO: Success 上面这段日志是进行资源的监控和接管,主要完成haresources文件中的设置,在这里是启用集群虚拟IP和挂载磁盘分区 此时,通过ifconfig命令查看主节点的网络配置,可以看到,主节点已经自动绑定了集群的IP地址,在HA集群之外的主机上通过ping命令检测集群IP地址192.168.12.135,已经处于可通状态,也就是该地址变的可用。 同时查看磁盘分区的挂载情况,共享磁盘分区/dev/sdf1已经被自动挂载。 2、启动备用节点的Heartbeat 启动备份节点的Heartbeat,与主节点方法一样,使用如下命令: [root@node2 ~]#/etc/init.d/heartbeat start 或者执行 [root@node2 ~]#service heartbeat start 这样就启动了备用节点的heartbeat服务,备用节点的heartbeat日志输出信息与主节点相对应,通过“tail -f /var/log/messages”可以看到如下输出: Feb 19 02:52:15 node2 heartbeat: [26880]: info: Pacemaker support: false Feb 19 02:52:15 node2 heartbeat: [26880]: info: ********** Feb 19 02:52:15 node2 heartbeat: [26880]: info: Configuration validated. Starting heartbeat 3.0.4 Feb 19 02:52:15 node2 heartbeat: [26881]: info: heartbeat: version 3.0.4 Feb 19 02:52:15 node2 heartbeat: [26881]: info: Heartbeat generation: 1297766398 Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: UDP multicast heartbeat started for group 225.0.0.1 port 694 interface eth0 (ttl=1 loop=0) Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ucast: write socket priority set to IPTOS_LOWDELAY on eth0 Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ucast: bound send socket to device: eth0 Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ping heartbeat started. Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ping group heartbeat started. Feb 19 02:52:15 node2 heartbeat: [26881]: info: Local status now set to: ‘up’ Feb 19 02:52:16 node2 heartbeat: [26881]: info: Link node1:eth0 up. Feb 19 02:52:16 node2 heartbeat: [26881]: info: Status update for node node1: status active Feb 19 02:52:16 node2 heartbeat: [26881]: info: Link 192.168.12.1:192.168.12.1 up. Feb 19 02:52:16 node2 heartbeat: [26881]: info: Status update for node 192.168.12.1: status ping Feb 19 02:52:16 node2 heartbeat: [26881]: info: Link group1:group1 up. Feb 19 02:52:16 node2 harc[26894]: info: Running /usr/local/ha/etc/ha.d//rc.d/status status Feb 19 02:52:17 node2 heartbeat: [26881]: info: Comm_now_up(): updating status to active Feb 19 02:52:17 node2 heartbeat: [26881]: info: Local status now set to: ‘active’ 二、测试heartbeat的高可用功能 如何才能得知HA集群是否正常工作,模拟环境测试是个不错的方法,在把Heartbeat高可用性集群放到生产环境中之前,需要做如下几个步骤的测试,从而确定HA是否正常工作: (1)正常关闭和重启主节点的heartbeat 首先在主节点node1上执行“service heartbeat stop”正常关闭主节点的Heartbeat进程,此时通过ifconfig命令查看主节点网卡信息,正常情况下,应该可以看到主节点已经释放了集群的服务IP地址,同时也释放了挂载的共享磁盘分区,然后查看备份节点,现在备份节点已经接管了集群的服务IP,同时也自动挂载上了共享的磁盘分区。 在这个过程中,使用ping命令对集群服务IP进行测试,可以看到,集群IP一致处于可通状态,并没有任何延时和阻塞现象,也就是说在正常关闭主节点的情况下,主备节点的切换是无缝的,HA对外提供的服务也可以不间断运行。 接着,将主节点heartbeat正常启动,heartbeat启动后,备份节点将自动释放集群服务IP,同时卸载共享磁盘分区,而主节点将再次接管集群服务IP和挂载共享磁盘分区,其实备份节点释放资源与主节点绑定资源是同步进行的。因而,这个过程也是一个无缝切换。 (2)在主节点上拔去网线 拔去主节点连接公共网络的网线后,heartbeat插件ipfail通过ping测试可以立刻检测到网络连接失败,接着自动释放资源,而就在此时,备用节点的ipfail插件也会检测到主节点出现网络故障,在等待主节点释放资源完毕后,备用节点马上接管了集群资源,从而保证了网络服务不间断持续运行。 同理,当主节点网络恢复正常时,由于设置了“auto_failback on”选项,集群资源将自动从备用节点切会主节点。 (3)关闭主节点的系统 在主节点拔去电源后,备用节点的heartbeat进程会立刻收到主节点已经shutdown的消息,备用节点就开始进行资源的接管,这种情况其实和主节点网络故障的现象类似。 (4)让主节点系统内核崩溃 当主节点系统崩溃后,网络也就失去了响应,那么备用节点的heartbeat进程就会立刻检测到主节点网络故障,然后进行资源切换,但是由于主节点系统内核崩溃,导致自身不能卸载所占有的资源,例如共享磁盘分区、集群服务IP等,那么此时如果没有类似Stonith设备的话,就会出现资源争用的情况,但是如果有Stonith设备,Stonith设备会首先将故障的主节点电源关闭或者重启此节点等操作,这样就让主节点释放了集群资源,当Stonith设备完成所有操作时,备份节点才拿到接管主节点资源的所有权,从而接管主节点的资源。