1. 简介
HeartBeat用于搭建双机热备景象,可以经由过程专门的心跳线来连接双机,也可以经由过程通俗的网线来连接。
官方网站:http://www.linux-ha.org/HeartBeat
本文所提到实验景象为:
[root@alsme_probe3 tmp]# cat /etc/redhat-release
Red Hat Enterprise Linux AS release 4 (Nahant Update 6)
heartbeat 2.1.3
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一样。
groupadd haclient -g 1001
useradd -g haclient hacluster -u 1002
2.3. 安装
可以直接下载rpm包,或者本身下载源码包进行编译,在这里,我采取本身编译源码的体式格式。
安装heartbeat前,须要先安装libnet包。
tar zxvf heartbeat-2.1.3.tar.gz
rpm -ivh libnet-1.1.2.1-2.2.el4.rf.rpm
[root@alsme_probe3 tmp]# cd heartbeat-2.1.3
[root@alsme_probe3 tmp]# ./configure
[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 local0 #这个是设置heartbeat的日记,这里是用的体系日记
logfile /var/log/ha-log #File to write other messages to
logfacility local0 #这个是设置heartbeat的日记,这里是用的体系日记
##设定心跳(监测)时候时候为2秒
keepalive 2 #多长时候检测一次
warntime 5 #连气儿多长时候接洽不上后开端警告提示
keepalive 2 #多长时候检测一次
warntime 5 #连气儿多长时候接洽不上后开端警告提示
deadtime 20 #连气儿多长时候接洽不上后认为对方挂掉了(单位是妙)
initdead 120 #这里主如果给重启后预留的一段忽视时候段(比如:重启后启动收集等,若是在收集还没有通,keepalive检测必然通不过,但这时辰并不克不及切换)
#采取bond0的udp广播用来发送心跳信息
#bcast bond0
#采取网卡eth0的udp单播来通贴心跳,ip应为对方IP,建议采取单播。当一个网段有多台如许cluster话,则必然要采取单播,不然每组cluster都邑看到对方的节点,从而报错。
ucast eth0 172.18.57.154
##应用udp端口694 进行心跳监测
udpport 694
auto_failback off #恢复正常后是否须要再主动切换回来,一般都设为off。
udpport 694
auto_failback off #恢复正常后是否须要再主动切换回来,一般都设为off。
##节点1的HOSTNAME,必必要与 uname -n 指令获得的成果一致。
node alsme_probe3
node alsme_probe3
##节点2的HOSTNAME
node alssme_probe4
node alssme_probe4
##经由过程ping 网关来监测心跳是否正常
ping 172.18.158.254
ping 172.18.158.254
hopfudge 1
deadping 5
#指定和heartbeat一路启动、封闭的过程
#respawn hacluster /usr/local/lib64/heartbeat/ipfail
#apiauth ipfail gid=haclient uid=hacluster
#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
auth 1
1 crc
[root@alsme_probe3 heartbeat-2.1.3]# chmod 600 /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
alssme_probe3 IPaddr::172.18.158.111/24/bond0 mysql
alssme_probe3 IPaddr::172.18.158.111/24/bond0 mysql
#此中,172.18.158.111为VIP
如何设备,可以拜见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
#!/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的节点切换脚本
1).手工调用heartbeat的节点切换脚本
2).拔掉网线,测试在primary节点的收集断开后的切换景象,经由过程测试,在拔掉网线后,当主节点发明无法和standby节点无法通信
后,会在log中记录warn信息,若是延续时候达到在ha.cf中设定的时长后,会开端开释资料,standby节点发明无法和主节点通信一段时候
(ha.cf设定)后,开端测验测验启动资料并将本身active成primary节点。切换过程除ha.cf中设定的时长之外的时候段同样很是短。这里轻易
呈现custer脑割据的题目。若是采取双master的话,就不存在这个题目。
后,会在log中记录warn信息,若是延续时候达到在ha.cf中设定的时长后,会开端开释资料,standby节点发明无法和主节点通信一段时候
(ha.cf设定)后,开端测验测验启动资料并将本身active成primary节点。切换过程除ha.cf中设定的时长之外的时候段同样很是短。这里轻易
呈现custer脑割据的题目。若是采取双master的话,就不存在这个题目。
3). shutdown primary主机,测试是否可以或许正常切换。
4). 主节点机械掉电,是否可以或许正常切换。
4). 主节点机械掉电,是否可以或许正常切换。
第一种和第三种测试办法必然要测一下。
5.经管
启动和封闭heartbeat的办法:
# /etc/init.d/hearbeat start 或 service heartbeat start
# /etc/init.d/hearbeat stop 或 service heartbeat stop
….. 号令收拾
6.其他
实际测试成果注解:若是采取myisam存储引擎,则在primary节点当掉的时辰,总会丧失数据;而采取innodb存储引擎时,若是
primary节点本身没有法度往本机写数据的话,那么根蒂根基上不会产生数据丧失;而若是primary节点本身有法度在写数据,则在当机刹时,本机上的程
序可能还会写入项目组数据,而若是是其他主机法度连接过来的话,根蒂根基上不会产生丢数据的景象。
primary节点本身没有法度往本机写数据的话,那么根蒂根基上不会产生数据丧失;而若是primary节点本身有法度在写数据,则在当机刹时,本机上的程
序可能还会写入项目组数据,而若是是其他主机法度连接过来的话,根蒂根基上不会产生丢数据的景象。
建议:在drbd+hb的景象中,最好是采取innodb存储引擎,并且设置innodb_flush_log_at_trx_commit =
1,这使得几乎每个提交的事务都能记录在 ib_logfile* 中,在 secondary 节点上能获得恢复,减小丧失。
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/etc/ha.d/haresources 转换成
/usr/local/var/lib/heartbeat/crm/cib.xml.
“/usr/local/lib64/heartbeat/haresources2cib.py /usr/local/etc/ha.d/haresources /usr/local/var/lib/heartbeat/crm/cib.xml”
3).把haresources清空
别的若是只起一个节点的话,则service IP地址须要2分钟才干生效。这个时候不知道是如何把握的。
heartbeat默认模式是没法监控资料的,也就是说此中某个资料如果crash掉了,也不会产生任何动作,它只有当它认为对方机械dead后才会产活泼作。也就是机械crashed,收集断掉了之类。这显然没法达到我们的目标。
为了达到我们的目标就要采取crm(cluster resource management)模式了。
起首,先按默认模式设备heartbeat(详见heartbeat新手上路)。
默认模式设备成功后,再按下面的步调操纵:
1)在ha.cf里面增长
crm on
2)将haresources资料文件转换成cib.xml文件,2.1.3自带有转换脚本
/usr/local/lib64/heartbeat/haresources2cib.py /usr/local/etc/ha.d/haresources
输出文件在/usr/local/var/lib/heartbeat/crm/cib.xml
3)若是hacluster和haclient用户和用户组是在安装heartbeat之后创建的话,则须要履行下面号令批改权限
批改heartbeat目次权限,可以用以下号令:
find / -type d -name “heartbeat” -exec chown -R hacluster {} \;
find / -type d -name “heartbeat” -exec chgrp -R haclient {} \;
4)在2.0的版本中ipfail与crm 模式有冲突,所以在ha.cf中不成打开ipfail。
5) cib.xml文件的批改
若是在IPaddr中有下面两行,则删除:
<nvpair id=”IPaddr_172_18_57_83_attr_1″ name=”nic” value=”24″/>
<nvpair id=”IPaddr_172_18_57_83_attr_2″ name=”cidr_netmask” value=”bond0″/>
2.1.3版本生成的cib.xml文件中,mysql资料是ocf格局的,而它自带的mysql角本是无法启动mysql的,所以须要批改,有两种办法。在批改前先介绍一下ocf和lsb格局的差别:
LSB格局的角本必须支撑status功能,必须能接管start,stop,status,三个参数;而若是是OCF格局,则必须支撑start,stop,monitor三个参数.此中status和monitor参数是用来监控资料的,很是首要.
例如LSB风格的脚本,运行./mysql status时辰,
返回值包含OK或则running则默示资料正常
返回值包含stopped或者No则默示资料不正常。
假如是OCF风格的脚本,运行./mysql monitor时辰,
返回0默示资料是正常的,
返回7默示资料呈现题目.
ocf格局的启动角本在/usr/lib/ocf/resource.d/heartbeat(也许你的机械上目次不是这个,可以搜刮ocf来查找)
lsb格局的启动角本在/usr/lib/lsb/resource.d/heartbeat目次下。
两种批改办法
1.批改cib.xml,将mysql的ocf改成lsb。然后在/usr/lib/lsb/resource.d/heartbeat(若是
该目次不存在,则手工创建,并将权限赋给hacluster:haclient)下面履行ln -s /etc/init.d/mysql mysql。
该目次不存在,则手工创建,并将权限赋给hacluster:haclient)下面履行ln -s /etc/init.d/mysql mysql。
# rm /usr/heartbeat/var/lib/heartbeat/crm/cib.xml.* -f
# vi /usr/heartbeat/var/lib/heartbeat/crm/cib.xml
# vi /usr/heartbeat/var/lib/heartbeat/crm/cib.xml
2.批改/usr/lib/ocf/resource.d/heartbeat下面的mysql的角本,使之能正常工作。或者将/etc/init.d/mysql拷过来,批改使它支撑monitor操纵
6) 然后启动heartbeat即可。Service heartbeat start.
7)若是mysql采取双master的话,则在stop资料后,记的将mysql手动起来。
Heartbeat CRM模式经管
1)查看所有资料
[root@alssme_probe3 sbin]# crm_resource -L
Resource Group: group_1
IPaddr_172_18_158_111 (heartbeat::ocf:IPaddr)
mysql_2 (lsb:mysql)
2)查看资料跑在哪个节点上
[root@alssme_probe3 sbin]# crm_resource -W -r mysql_2
resource mysql_2 is running on: alssme_probe3
4)启动/停止资料(cluster不会产生切换,手工停mysql,将会从头启动或者产生切换)
[root@alssme_probe4 crm]# crm_resource -r mysql_2 -p target_role -v started
[root@alssme_probe3 sbin]# crm_resource -r mysql_2 -p target_role -v stopped
5)查看资料在cib.xml中的定义
[root@alssme_probe3 sbin]# crm_resource -x -r mysql_2
mysql_2 (lsb:mysql): Started alssme_probe3
raw xml:
<primitive provider=”heartbeat” type=”mysql” id=”mysql_2″>
<operations>
<op id=”mysql_2_mon” interval=”60s” name=”monitor” timeout=”30s”/>
</operations>
<instance_attributes id=”mysql_2″>
<attributes>
<nvpair name=”target_role” id=”mysql_2-target_role” value=”started”/>
</attributes>
</instance_attributes>
</primitive>
即每60秒检测资料运行景象,若是发明资料不在,则测验测验启动资料,若是30s后还未启动成功,则资料切换向另节点。时候可以批改( mysql一般建议采取这个时候值)。
6)将资料移向指定节点
crm_resource -M -r mysql_2 -H alssme_probe4