HeartBeat用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
2.1. 准备 本试验环境共有2个主机,其IP分别为: 主机名 IP地址 alssme_probe3 172.18.158.23 alssme_probe4 172.18.158.24
[root@alsme_probe3 log]# groupadd haclient [root@alsme_probe3 log]# useradd -g haclient hacluster
2.3. 安装 可以直接下载rpm包,或者自己下载源码包进行编译,在这里,我采用自己编译源码的方式。安装heartbeat前,需要先安装libnet包。
[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]# make [root@alsme_probe3 tmp]# make install
libnet包可以在http:///linux/rpm2html/search.php这里搜索到。
heartbeat有三个配置文件: ha.cf authkyes haresources 这些文件在每台机器都要保持一致.下面将一一介绍.
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
[root@alsme_probe3 tmp]# vi /usr/local/etc/ha.d/ha.cf ## ha的日志文件记录位置。如没有该目录,则需要手动添加
deadtime 20 #连续多长时间联系不上后认为对方挂掉了(单位是妙) initdead 120 #这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)
#采用bond0的udp广播用来发送心跳信息 #bcast bond0
ucast bond0 172.18.57.154
##使用udp端口694 进行心跳监测
hopfudge 1 deadping 5 #指定和heartbeat一起启动、关闭的进程#respawn hacluster /usr/local/lib64/heartbeat/ipfail#apiauth ipfail gid=haclient uid=hacluster #是否采用v2 style模式,在三节点以上时一定要打开 #crm on
3.2 编辑双机互联验证文件:authkeys [root@alsme_probe3 heartbeat-2.1.3]# vi /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
有几个注意事项: 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两个参数
[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/resource.d/drbd
如果我们采用的是heartbeat+双master模式的话, 则不需要加上mysql资源组。 如果我们采用的是heartbeat+master/slave模式的话,则需要重新mysql角本,在start时将slave变成master。在stop时将master变成slave。
4. 测试
2).拔掉网线,测试在primary节点的网络断开后的切换情况,通过测试,在拔掉网线后,当主节点发现无法和standby节点无法通信后,会在log中记录warn信息,如果延续时间达到在ha.cf中设定的时长后,会开始释放资源,standby节点发现无法和主节点通信一段时间(ha.cf设定)后,开始尝试启动资源并将自己active成primary节点。切换过程除ha.cf中设定的时长之外的时间段同样非常短。这里容易出现custer脑分裂的问题。如果采用双master的话,就不存在这个问题。 3). shutdown primary主机,测试是否能够正常切换。4). 主节点机器掉电,是否能够正常切换。
5.管理
/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
[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分钟才能生效。这个时间不知道是如何控制的。 |
|
来自: mrjbydd > 《linux ha》