HeartBeat用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
官方网站: http://www.linux-ha.org
当然在linux 下面除了heartbeat还有很多,比如redhat的cluster软件等等。下面将简单介绍heartbeat的安装和配置。
2.安装
2.1. 准备
本试验环境共有2个主机,其IP分别为:
主机名
IP
地址
alssme_probe3
172.18.158.23
alssme_probe4
172.18.158.24
如果
/etc/hosts
中没有配置的话,
则需要先配置
/etc/hosts
文件
2.2
创建用户和用户组
heartbeat
需要
haclient
用户组和
hacluster
用户。
两个节点做同样的操作,并保证
haclient
和
hacluster
的
ID
一样。
[root@alsme_probe3 log]# groupadd haclient
[root@alsme_probe3 log]# useradd -g haclient hacluster
2.
3
. 安装
可以直接下载rpm包,或者自己下载源码包进行编译,在这里,我采用自己编译源码的方式。安装heartbeat前,
需要先安装libnet包。
[root@alsme_probe3 tmp]#
tar zxvf
heartbeat-2.1.3.tar.gz
[root@alsme_probe3 tmp]#
rpm -ivh
libnet-1.1.2.1-2.2.el4.rf.x86_64.rpm
[root@alsme_probe3 tmp]#
cd heartbeat-2.1.3
[root@alsme_probe3 tmp]#
./configure
[root@alsme_probe3 tmp]#
make
[root@alsme_probe3 tmp]#
make install
同样地,在另一个主机上也是这么安装。
libnet
包可以在
http://rpmfind.net/linux/rpm2html/search.php这里搜索到
。
3
. 配置
heartbeat
有三个配置文件:
ha.cf
authkyes
haresources
这些文件在每台机器都要保持一致.下面将一一介绍.
cp
/usr/local/share/doc/heartbeat-2.1.3/ha.cf
/usr/local/etc/ha.d
cp /usr/local/share/doc/heartbeat-2.1.3/haresources /usr/local/etc/ha.d
cp /usr/local/share/doc/heartbeat-2.1.3/authkeys /usr/local/etc/ha.d
3.
1
编辑hertbeat主配置文件
ha.cf
,2个主机上的内容一样。
以下是需要打开的配置,
ha.cf
里面有详细说明。
[root@
alsme_probe3 tmp
]# vi /usr/local/etc/ha.d/ha.cf
## ha的日志文件记录位置。如没有该目录,则需要手动添加
logfile /var/log/ha-log
#
File to write other messages to
logfacility local
0
#
这个是设置
heartbeat
的日志,这里是用的系统日志
##设定心跳(监测)时间时间为2秒
keepalive
2 #
多长时间检测一次
warntime
5
#连续多长时间联系不上后开始警告提示
deadtime
2
0
#连续多长时间联系不上后认为对方挂掉了(单位是妙)
initdead 120
#这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)
#
采用
bond
0的udp广播用来发送心跳信息
#
bcast
bond0
#
采用网卡
bond
0的udp单播来通知心跳,ip应为对方IP,建议采用单播。
当一个网段有多台这样
cluster
话,则一定要采用单播
,否则每组
cluster
都会看到对方的节点,从而报错。
ucast bond0 172.18.57.154
##使用udp端口694 进行心跳监测
udpport 694
auto_failback
off
#恢复正常后是否需要再自动切换回来,一般都设为
off
。
##节点1,必须要与 uname -n 指令得到的结果一致。
node
alsme_probe3
##节点2
node
alssme_probe4
##通过ping 网关来监测心跳是否正常
ping
172.18.158.254
hopfudge 1
deadping 5
#指定和heartbeat一起启动、关闭的进程
#
respawn hacluster /usr/local/lib64/heartbeat/ipfail
#
apiauth ipfail gid=haclient uid=hacluster
#
是否采用
v2 style
模式,在三节点以上时一定要打开
#crm on
从heartbeat的官方文档来看,目前的ping节点还没什么实际用途,只是用于检测节点的连通性,并不作为节点切换的真正依据。在将来的新版本中也许会这么做。
3.
2
编辑双机互联验证文件:authkeys
[root@
alsme_probe3
heartbeat-2.1.3]# vi /usr/local/etc/ha.d/authkeys
auth 1
1 crc
[root@
alsme_probe3
heartbeat-2.1.3]# chmod 600 /usr/local/etc/ha.d/authkeys
注意
authkeys
的权限一定要是
600.
3.
3
编辑集群资源文件:haresources
[root@
alsme_probe3
heartbeat-2.1.3]# vi /usr/local/etc/ha.d/haresources
al
s
sme_probe3 IPaddr::172.18.158.111/24/bond0 mysql
如何配置,可以参见
haresources
,里面也有详细的说明。
有几个注意事项:
1).
资源组的第一列是我们在
ha.cf
配置文件中的
node
之一,而且应该是当前准备作为
primary
节点的那一个
node
。
2).
每一行代表一个资源组,如果一行写不下可以用
" "
换行
3).
资源组启动顺序是从左往右,关闭的顺序是从右往左
4).
脚本的参数通过
::
来分隔和传递
5).
一个资源组里面不同资源之间以空格分隔
6).
不同的资源组之间没有必然关系
7).
每个资源都是一个角本,可以是在
/etc/init.d
目录下面的,也可以是
/usr/local/etc/ha.d/
resource
.d
目录下面的角本。这些角本必须要支持
xxx start
;
xxx stop;
模式。
8).
关于
service IP
的资源设置格式详见
haresources
文件。
9).
如果
mysql
是编译安装的话,
则需要修改
/etc/init.d/mysql
文件中的
basedir
和
datadir
两个参数
3.
4
资源角本例子
---
drbd
下面是
drbd
的资源管理角本的例子:
[root@
alsme_probe3
heartbeat-2.1.3]# vi /usr/local/etc/ha.d/resource.d/drbd
#!/bin/sh
case "$1" in
start)
#声明为drbd的primary节点
drbdadm primary db
#挂载文件系统
mount /dev/drbd0 /data
#启动相关服务
service mysql start
;;
stop)
#上面操作的反向
service mysql stop
umount /dev/drbd0 /data
drbdadm secondary db
;;esac
exit 0
我们测试的
mysql
是安装
mysql
时自带的,在
/etc/init.d
目录下面,它可以实现
mysql
的启动和关闭。
如果我们采用的是
heartbeat+
双
master
模式的话,
则不需要加上
mysql
资源组。
如果我们采用的是
heartbeat+master/slave
模式的话,则需要重新
mysql
角本,在
start
时将
slave
变成
master
。在
stop
时将
master
变成
slave
。
建议还是采用
heartbeat+
双
master
模式
,
这样将数据丢失降到最低。
4
. 测试
测试切换不外乎以下几种:
1).
手工调用
heartbeat
的节点切换脚本
2).
拔掉网线,测试在
primary
节点的网络断开后的切换情况,通过测试,在拔掉网线后,当主节点发现无法和
standby
节点无法通信后,会在
log
中记录
warn
信 息,如果延续时间达到在ha.cf中设定的时长后,会开始释放资源,standby节点发现无法和主节点通信一段时间(ha.cf设定)后,开始尝试启动 资源并将自己active成primary节点。切换过程除ha.cf中设定的时长之外的时间段同样非常短。这里容易出现
custer
脑分裂的问题。如果采用双
master
的话,就不存在这个问题。
3). shutdown primary
主机,测试是否能够正常切换。
4).
主节点机器掉电,是否能够正常切换。
第一种和第三种测试方法一定要测一下。
5.管理
启动和关闭heartbeat的方法:
/etc/init.d/hearbeat start或
service heartbeat start
和
/etc/init.d/hearbeat stop或
service heartbeat stop
手工切换:
[root@alsme_probe3 rc.d]# /usr/local/share/heartbeat/hb_standby
2008/07/19_20:01:21 Going standby [all].
[root@alsme_probe3 rc.d]# service heartbeat status
heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...
手工接管
[root@alsme_probe3 rc.d]# /usr/local/share/heartbeat/hb_
takeover
查看
heartbeat
状态
[root@alsme_probe3 rc.d]# service heartbeat status
heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...
6.
其他
实 际测试结果表明:如果采用myisam存储引擎,则在primary节点当掉的时候,总会丢失数据;而采用innodb存储引擎时,如果 primary节点本身没有程序往本机写数据的话,那么基本上不会发生数据丢失;而如果primary节点本身有程序在写数据,则在当机瞬间,本机上的程 序可能还会写入部分数据,而如果是其他主机程序连接过来的话,基本上不会发生丢数据的情况。
建 议:在drbd+hb的环境中,最好是采用innodb存储引擎,并且设置innodb_flush_log_at_trx_commit = 1,这使得几乎每个提交的事务都能记录在 ib_logfile* 中,在 secondary 节点上能得到恢复,减小损失。
heartbeat
有两种模式,默认的模式只支持两个节点。如果
cluster
里面有
2
个以上节点的话,则需要采用
cib
模式,即
v2 style
:
1)
.把三个节点都加到ha.cf里,然后在ha.cf里加上"crm 1"
2)
.然后用/usr/local/lib64/heartbeat/haresources2cib.py 把原来的/
usr/local/
etc/ha.d/haresources 转换成 /usr/local/var/lib/heartbeat/crm/cib.xml.
"
/usr/local/lib64/heartbeat/haresources2cib.py haresources /usr/local/var/lib/heartbeat/crm/cib.xml
"
3)
.把haresources清空
另外如果只起一个节点的话,则
service IP
地址需要
2
分钟才能生效。这个时间不知道是如何控制的。