来自:南非蚂蚁 http://www.efficient-it.com.cn/space/77/viewspace/itemid/4004.html
一、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集群的一般拓扑图
未完待续!
一、安装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/null || groupadd -r ${CLUSTER_GROUP}
- getent passwd ${CLUSTER_USER} >/dev/null || useradd -r -g ${CLUSTER_GROUP} -d /var/lib/heartbeat/cores/hacluster -s /sbin/nologin -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 <li xspace-imginlog"="" style="word-break: break-all; padding: 0px 3px 0px 10px !important; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 20px; border: 0px; line-height: 1.3em; list-style: decimal-leading-zero outside;">
一、启动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
来自:南非蚂蚁 http://www.efficient-it.com.cn/space/77/viewspace/itemid/4004.html