Heartbeat3.x应用全攻略之:概念组成及工作原理

来自:南非蚂蚁 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文件内容如下:

   
   
  1. [root@node1 ~]#more /etc/hosts  
  2. 192.168.12.246  node1  
  3. 192.168.12.237  node2  
  4. 10.1.1.1   priv1  
  5. 10.1.1.2     priv1 


一切准备就绪,接下来开始安装heartbeat。
 

二、安装heartbeat


这里的安装以heartbeat3.x为讲解对象,以下操作需要在两个节点都进行安装,基本安装过程为:
首先建立相关用户hacluster和组haclient,然后设定环境变量,最后就是安装heartbeat,过程如下:
 

1、添加用户和组

   
   
  1. groupadd haclient  
  2. useradd -g haclient hacluster 

2、设置环境变量
vi /root/.bash_profile,添加如下内容:

   
   
  1. export PREFIX=/usr/local/ha   
  2. export LCRSODIR=$PREFIX/libexec/lcrso   
  3. export CLUSTER_USER=hacluster 
  4. export CLUSTER_GROUP=haclient 
  5. export CFLAGS="$CFLAGS -I$PREFIX/include -L$PREFIX/lib" 
  6. getent group ${CLUSTER_GROUP} >/dev/null || groupadd -r ${CLUSTER_GROUP}  
  7. 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.orghttp://hg.clusterlabs.org下载对应的软件包,这里使用的软件版本分别为:
glue-1.0.7、agents-1.0.3、heartbeat-STABLE-3.0.4、Pacemaker-1.0.10
 

3、安装各个模块软件包
(1)安装Cluster Glue

   
   
  1. tar –xjvf Reusable-Cluster-Components-glue--5e06b2ddd24b.tar.bz2  
  2. cd Reusable-Cluster-Components-glue--5e06b2ddd24b  
  3. ./autogen.sh  
  4. ./configure --prefix=$PREFIX  --with-daemon-user=${CLUSTER_USER} --with-daemon-group=${CLUSTER_GROUP} --enable-fatal-warnings=no 
  5. make  
  6. make install  

(2)安装Resource Agents

   
   
  1. tar jxvf Cluster-Resource-Agents-5ae70412eec8.tar.bz2  
  2. cd Cluster-Resource-Agents-5ae70412eec8  
  3. ./autogen.sh  
  4. ./configure --prefix=$PREFIX --enable-fatal-warnings=no 
  5. 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脚本的用法,如下所示:
 
   
   
  1. [root@node1 ~]# /etc/init.d/heartbeat   
  2. Usage: /etc/init.d/heartbeat {start|stop|status|restart|reload|force-reload} 
因而启动heartbeat可以通过如下命令进行:
 
   
   
  1. [root@node1 ~]#service heartbeat start 
  2. 或者通过 
  3. [root@node1 ~]#/etc/init.d/heartbeat start 
这样就启动了主节点的heartbeat服务
日志信息如下:
 
   
   
  1. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: bound send socket to device: eth0 
  2. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: bound receive socket to device: eth0 
  3. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: started on port 694 interface eth0 to 192.168.12.1 
  4. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ping heartbeat started. 
  5. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ping group heartbeat started. 
  6. Feb  5 19:09:48 node1 heartbeat: [22768]: info: Local status now set to: 'up' 
  7. Feb  5 19:09:49 node1 heartbeat: [22768]: info: Link 192.168.12.1:192.168.12.1 up. 
  8. Feb  5 19:09:49 node1 heartbeat: [22768]: info: Status update for node 192.168.12.1: status ping 
  9. Feb  5 19:09:49 node1 heartbeat: [22768]: info: Link group1:group1 up. 
  10. 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的输出信息如下:
 
   
   
  1. Feb  5 19:11:48 node1 heartbeat: [22768]: WARN: node node2: is dead 
  2. Feb  5 19:11:48 node1 heartbeat: [22768]: info: Comm_now_up(): updating status to active 
  3. Feb  5 19:11:48 node1 heartbeat: [22768]: info: Local status now set to: 'active' 
  4. Feb  5 19:11:48 node1 heartbeat: [22768]: info: Starting child client "/usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s" (102,105) 
  5. Feb  5 19:11:49 node1 heartbeat: [22768]: WARN: No STONITH device configured. 
  6. Feb  5 19:11:49 node1 heartbeat: [22768]: WARN: Shared disks are not protected. 
  7. Feb  5 19:11:49 node1 heartbeat: [22768]: info: Resources being acquired from node2. 
  8. 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”的警告提示。 
继续看下面的日志:
 
   
   
  1. Feb  5 19:11:50 node1 IPaddr[22966]: INFO:  Resource is stopped 
  2. Feb  5 19:11:50 node1 ResourceManager[22938]: info: Running /usr/local/ha/etc/ha.d/resource.d/IPaddr 192.168.12.135 start 
  3. Feb  5 19:11:50 node1 IPaddr[23029]: INFO: Using calculated nic for 192.168.12.135: eth0 
  4. Feb  5 19:11:50 node1 IPaddr[23029]: INFO: Using calculated netmask for 192.168.12.135: 255.255.255.0 
  5. Feb  5 19:11:51 node1 pingd: [22794]: info: attrd_lazy_update: Connecting to cluster... 5 retries remaining 
  6. 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 
  7. Feb  5 19:11:51 node1 avahi-daemon[2455]: Registering new address record for 192.168.12.135 on eth0. 
  8. Feb  5 19:11:51 node1 IPaddr[23015]: INFO:  Success 
  9. Feb  5 19:11:51 node1 Filesystem[23134]: INFO:  Resource is stopped 
  10. Feb  5 19:11:51 node1 ResourceManager[22938]: info: Running /usr/local/ha/etc/ha.d/resource.d/Filesystem /dev/sdf1 /data1 ext3 start 
  11. Feb  5 19:11:52 node1 Filesystem[23213]: INFO: Running start for /dev/sdf1 on /data1 
  12. Feb  5 19:11:52 node1 kernel: kjournald starting.  Commit interval 5 seconds 
  13. Feb  5 19:11:52 node1 kernel: EXT3 FS on sdf1, internal journal 
  14. Feb  5 19:11:52 node1 kernel: EXT3-fs: mounted filesystem with ordered data mode. 
  15. 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,与主节点方法一样,使用如下命令: 
 
   
   
  1. [root@node2 ~]#/etc/init.d/heartbeat start   
来自:南非蚂蚁 http://www.efficient-it.com.cn/space/77/viewspace/itemid/4004.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值