HEARBEAT介绍

Heartbeat 是可以从 Linux-HA 项目 Web 站点公开获得的软件包之一。它提供了所有 HA 系统所需要的基本功能,比如启动和停止资源、监测群集中系统的可用性、在群集中的节点间转移共享 IP 地址的所有者等。它通过串行线、以太网接口或者同时使用二者来监测特定服务(或多个服务)的健康状况。当前版本支持两节点配置,使用专门的 heartbeat“pings”来检查服务的状态和可用性。

LINUX heartbeat使用一个心跳协议,心跳协议意味着消息规则的在两个或更多节点之间发送,如

果消息没有在给定的节点间接收到,就会认为这个节点是失效的并且运行某种失败切换或恢复动

作,LINUX heartbeat使用标准的以太网接口来发送心跳消息。

当LINUX heartbeat被初始化设置好以后,需要选择一个节点作为主节点,当主节点的心跳启动以

后,它将分配一个虚拟IP地址给主节点的网络接口,外部的进程和应用等将按照这个方式访问这

个节点,如果主节失效,那么在集群中的另一个节点将为这个虚拟IP地址启动一个接口并且用地址转换保证所有访问这个IP的请求都绑定到本机,也就是IP自动漂移到本机,这种就是IP地址

接管。

每一个虚拟IP地址都可以被看作是一个资源,它被封装作为程序其工作方式类似于UNIX的INIT

脚本,这意味着它能够启动和停止,并且它也能够被查询是否正在运行,用这种方式,LINUX

heartbeat能够根据用heartbeat协议,根据节点间通信的状态启动或停止这些虚拟IP。

LINUX HEARTBEAT的配置

三个最关键的修改文件: <"/etc/ha.d/authkeys">

<"/etc/ha.d/haresources">

<"/etc/ha.d/ha.cf">

1 配置/etc/ha.d/ha.cf(只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/ha.cf

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

debugfile /var/log/ha-debug #写debug信息到这个文件中

logfile /var/log/ha-log #写运行日志到这个文件中

keepalive 2 #设置心跳时间为2秒

deadtime 30 #设置离最近一次心跳多长时间没有心跳时表明节点失败

warntime 10 #设置离最近的一次心跳多长时间没有心跳时发出警告

initdead120 #机器重启动或是刚开机时,网络能正确开始工作的时间,最小设置为deadtime的两倍

udpport 694 #bcast/ucast方式心跳通讯所用的UDP端口

#baud 19200 #串口的波特率,使用串口作心跳时需设置

#serial /dev/ttyS0 #串口设备名,使用串口作心跳时需设置

bcast eth0 #使用哪一个设备(网卡)做心跳

#bcast eth1 eth2 #使用多个设备(网卡)做心跳时的设置

auto_failback on #当主节点从失败状态恢复时是否恢复其主节点的身份,即应用是否返回到其自身运行

#on 返回

#off 不返回,其它节点继续作为主节点运行

#legacy 当所有节点都不支持自动返回时,将自身设为自动返回

node gfs132 #节点的主机名或域名,需在/etc/hosts文件或

node gfs133 #所有节点都以node开始的行列出

ping 172.20.16.2 #ping节点,不属于cluster内的节点,通常选一台路由器或交换机作为Ping节点,

#ipfail模块通过此节点来验证网络的连通性,可指定多个Ping节点

respawn hacluster /usr/lib64/heartbeat/ipfail #由heartbeat调用并监视ipfail模块

2 配置/etc/ha.d/haresources (只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/haresources

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

gfs132 172.20.16.99 mysqld mon #设置heartbeat管理的资源或服务

#格式为:主节点主机名或域名 浮动IP 服务名

#主节点主机名或域名为ha.cf中node行中指定的任一节点

#浮动IP 为对外提供访问的IP,主节点失败后会自动漂移到其它节点,继续对外提供服务.

#服务名为 heartbeat管理的服务

#注意,此文件内容所有节点必须保持一致。

3 配置/etc/ha.d/authkeys(只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/authkeys

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

auth 3 #设置认证方式

#1 crc #格式为:auth <number>

3 md5 Hello! #<number> <authmethod>

[<authkey>] 说明:

#如果是用心跳是用交叉线直接对连两个节点,用crc方式即可,CPU占用最少

#如果心跳位于不安全的网络,如通过共用交换机连接节点,则选用sha1或md5

#sha1占用CPU资源更多,但是更安全,md5安全性及CPU占用率居中

#sha1和md5都需要提供认证KEY,即用来加密的KEY

#注意,此文件权限必须设置为600

4 copy以上配置文件到其它节点

scp /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeys root@172.20.16.211:/etc/ha.d/

5 分别设置各节点/etc/ha.d/authkeys文件权限

chmod 600 /etc/ha.d/authkeys (文件权限必须设置为600,否则heartbeat不能正常启动)

#至此安装完毕

拓扑图

image

至于web的配置这里就不多做介绍。上一篇博客里有详细的配置

这里直接说heartbeat的配置

1.节点的名字必须跟uname -n 的名字相同,而且两个主机必须能通过主机名来访问。尽量不通过DNS 来访问。时钟时间保持一样。

2.双方的通信要必须通过SSL 的无障碍通信机制

3.双节点之间可以通过某个IP 来提供连接,但是这只是通信Ip,我们需要VIP 来对外提供服务。

4.我采用虚拟机的方式实现配置,操作系统使用rhel5.4,x86 平台

5.两个节点主机IP 分别为192.168.145.10(node1.a.com),以及

192.168.145.20(node2.a.com)

6.集群服务为lvs 的ipvsadm 服务

7.提供Web 服务的地址(VIP)为192.168.145.101

1.准备工作
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node1.a.com
[root@localhost ~]# hostname node1.a.com
重新登录
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node2.a.com
[root@localhost ~]# hostname node2.a.com
我们首先要保证两节点之间时间相差不应该超过1 秒
[root@node1 ~]# hwclock -s
[root@node2 ~]# hwclock -s
分别在两个节点上设置
# vim /etc/hosts
192.168.145.10 node1.a.com node1
192.168.145.20 node2.a.com node2
生成密钥,确保通信正常
node1 节点
[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub node2
node2 节点
[root@node2 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub node1
由于需要用到软件的依赖,这里配置yum,在node1 上
# vim /etc/yum.repos.d/rhel-debuginfo.repo
1 [rhel-server]
2 name=Red Hat Enterprise Linux server
3 baseurl=file:///mnt/cdrom/Server
4 enabled=1
5 gpgcheck=1
6 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
7 [rhel-cluster]
8 name=Red Hat Enterprise Linux cluster
9 baseurl=file:///mnt/cdrom/Cluster
10 enabled=1
11 gpgcheck=1
12 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
13 [rhel-vt]
14 name=Red Hat Enterprise Linux vt
15 baseurl=file:///mnt/cdrom/VT
16 enabled=1
17 gpgcheck=1
18 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
- 3 -
19 [rhel-clusterstorage]
20 name=Red Hat Enterprise Linux clusterstorage
21 baseurl=file:///mnt/cdrom/ClusterStorage
22 enabled=1
23 gpgcheck=1
24 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
[root@node2 ~]# scp node1:/etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/

node1.a.com

挂载光盘:

[root@node1 ~]# mkdir /mnt/cdrom
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom

[root@node1 ~]# yum install -y ipvsadm     //安装ipvsadm

添加规则

访问192.168.145.101的80端口时采用rr调度算法,并且发送给Web服务器群集节点

[root@node1 ~]# ipvsadm -A -t 192.168.145.101:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.100 -g
[root@node1 ~]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.200 -g

[root@node1 ~]# service ipvsadm save //保存规则

安装heartbeat

[root@node1 ~]# ll
总计 2736
-rw------- 1 root root    1287 08-11 23:13 anaconda-ks.cfg
drwxr-xr-x 2 root root    4096 08-11 15:20 Desktop
-rw-r--r-- 1 root root 1637238 10-25 18:34 heartbeat-2.1.4-9.el5.i386.rpm
--rw-r--r-- 1 root root  111742 10-25 18:34 heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root   92070 10-25 18:34 heartbeat-pils-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root  179199 10-25 18:34 heartbeat-stonith-2.1.4-10.el5.i386.rpm

-rw-r--r-- 1 root root   35369 08-11 23:13 install.log
-rw-r--r-- 1 root root    3995 08-11 23:11 install.log.syslog
-rw-r--r-- 1 root root   56817 10-25 18:34 libnet-1.1.4-3.el5.i386.rpm
-rw-r--r-- 1 root root   92071 10-25 18:34 perl-MailTools-1.77-1.el5.noarch.rpm

[root@node1 ~]# yum localinstall –y heartbeat-2.1.4-9.el5.i386.rpm heartbeat-ldirectord-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm –-nogpgcheck       //不进行签名检测安装

拷贝相关文件

[root@node1 ~]# cd /usr/share/doc/heartbeat-2.1.4/
[root@node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/
[root@node1 ha.d]# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/

[root@node1 ha.d]# vim ha.cf

91 #bcast  eth0            # Linux
92 #bcast  eth1 eth2       # Linux
93 #bcast  le0             # Solaris
94 #bcast  le1 le2         # Solaris 
95 bcast eth1               //广播接口

212 #node   ken3
213 #node   kathy
214 node    node1.a.com
215 node    node2.a.com         //指明结点

生成通过md5加密的随机数:

[root@node1 ha.d]# dd if=/dev/random bs=512 count=1 |openssl md5
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.000335324 seconds, 382 kB/s
af42fae97f8db1512bfc7eac86da60ea

编辑修改authkeys文件:

[root@node1 ha.d]# vim authkeys

23 #auth 1
24 #1 crc
25 #2 sha1 HI!
26 #3 md5 Hello!
27 auth 3
28 3 md5 af42fae97f8db1512bfc7eac86da60ea      //md5加密数

[root@node1 ha.d]# chmod 600 authkeys

编辑修改haresources文件:

[root@node1 ha.d]# vim haresources

45 node1.a.com 192.168.145.101/24/eth0/192.168.145.255 ipvsadm

node2.a.com上

[root@node2 ~]# mkdir /mnt/cdrom

[root@node2 ~]# mount /dev/cdrom /mnt/cdrom

[root@node2 ~]# yum install -y ipvsadm //安装ipvsadm

[root@node2 ~]# scp node1:/root/*.rpm ./
heartbeat-2.1.4-9.el5.i386.rpm                                     100% 1599KB   1.6MB/s   00:00   
heartbeat-ldirectord-2.1.4-9.el5.i386.rpm                          100%  109KB 109.1KB/s   00:00   
heartbeat-pils-2.1.4-10.el5.i386.rpm                               100%   90KB  89.9KB/s   00:01   
heartbeat-stonith-2.1.4-10.el5.i386.rpm                            100%  175KB 175.0KB/s   00:00   
libnet-1.1.4-3.el5.i386.rpm                                        100%   55KB  55.5KB/s   00:00   
perl-MailTools-1.77-1.el5.noarch.rpm                               100%   90KB  89.9KB/s   00:00   

[root@node2 ~]# yum localinstall -y *.rpm --nogpgcheck

[root@node2 ~]# scp node1:/etc/ha.d/ha.cf /etc/ha.d/
ha.cf                                                              100%   10KB  10.3KB/s   00:00   
[root@node2 ~]# scp node1:/etc/ha.d/haresources /etc/ha.d/
haresources                                                        100% 5963     5.8KB/s   00:00   
[root@node2 ~]# scp node1:/etc/ha.d/authkeys /etc/ha.d/
authkeys                                                           100%  691     0.7KB/s   00:00   
[root@node2 ~]# scp node1:/etc/init.d/ipvsadm /etc/ha.d/resource.d/
ipvsadm                                                            100% 2618     2.6KB/s   00:00   

[root@node2 ~]# scp node1:/etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm
ipvsadm                                                            100%  141     0.1KB/s   00:00   
 

启动heartbeat

[root@node1 ha.d]# service heartbeat start
Starting High-Availability services:
2012/10/25_19:41:45 INFO:  Resource is stopped
                                                           [确定]

[root@node2 ~]# service heartbeat start
Starting High-Availability services:
2012/10/25_19:42:37 INFO:  Resource is stopped
                                                           [确定]

 

可以看到ip资源在node1.a.com上

[root@node1 ha.d]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C2:B2:80 
          inet addr:192.168.145.10  Bcast:192.168.145.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fec2:b280/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8750 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5788 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6124592 (5.8 MiB)  TX bytes:2939570 (2.8 MiB)
          Interrupt:67 Base address:0x2000

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:C2:B2:80 
          inet addr:192.168.145.101  Bcast:192.168.145.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:67 Base address:0x2000

eth1      Link encap:Ethernet  HWaddr 00:0C:29:C2:B2:8A 
          inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fec2:b28a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:97 errors:0 dropped:0 overruns:0 frame:0
          TX packets:186 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:25706 (25.1 KiB)  TX bytes:45553 (44.4 KiB)
          Interrupt:67 Base address:0x2080

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:99 errors:0 dropped:0 overruns:0 frame:0
          TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:9065 (8.8 KiB)  TX bytes:9065 (8.8 KiB)

测试

image

刷新网页

image

当node1节点停止服务时

[root@node1 ha.d]# cd /usr/lib/heartbeat/

[root@node1 heartbeat]# ./hb_standby
2012/10/25_19:53:46 Going standby [all].

可以看到node2节点上的IP资源

[root@node2 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F1:76:1E 
          inet addr:192.168.145.20  Bcast:192.168.145.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef1:761e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4290 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2402 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2602734 (2.4 MiB)  TX bytes:311906 (304.5 KiB)
          Interrupt:67 Base address:0x2000

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:F1:76:1E 
          inet addr:192.168.145.101  Bcast:192.168.145.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:67 Base address:0x2000

eth1      Link encap:Ethernet  HWaddr 00:0C:29:F1:76:28 
          inet addr:192.168.10.2  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef1:7628/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:906 errors:0 dropped:0 overruns:0 frame:0
          TX packets:885 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:226068 (220.7 KiB)  TX bytes:217983 (212.8 KiB)
          Interrupt:67 Base address:0x2080

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:135 errors:0 dropped:0 overruns:0 frame:0
          TX packets:135 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:11459 (11.1 KiB)  TX bytes:11459 (11.1 KiB)

[root@node2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.145.101:80 rr
  -> 192.168.145.100:80           Route   1      0          0        
  -> 192.168.145.200:80           Route   1      0          0      

从上述实验可以看到通过heartbeat实现director的高可用性。即使其中一个停止服务。也可以访问网站。