继续昨天的内容。接下来要做的,就是借助1.x style的集群资源配置文件转换为2.x style的格式,并适当的配置ha.cf文件。与1.x style不同的是,v2.x style会使用CRM来进行整个集群的管理。集群开始时,通过在各节点间选举产生一个节点成为DC(Designated Coordinator),配置应在该DC上进行,并由其分发到下面的各个节点上。另外,使用中发现存在缺少ccm和crm临时目录的问题,暂时从官方的文档中暂时没有找到明确的解析和说明,我是作为一个Bug来理解的。
四、配置2.x style格式从上面的测试可见,heartbeat 2.1.3确实是支持v1的配置格式的。如果要使用CRM管理,接下来要做的,就是激活v2的支持,并转换集群资源配置文件。
1、修改ha.cf配置文件首先停止各节点的heartbeat服务:
# service heartbeat stop
然后修改/etc/ha.d/ha.cf文件为:
引用
# more /etc/ha.d/ha.cf
keepalive 2
deadtime 30
initdead 30
udpport 694
bcast eth0 eth1 # Linux
auto_failback off
node hatest3
node hatest4
ping 192.168.228.153
use_logd yes
#下面的配置是关键,也就是激活crm管理,允许使用v2 style格式
#注意,还可以使用crm yes的写法,但这样写的话,如果后面的cib.xml配置有问题
#会导致heartbeat直接重启该服务器,所以,测试时建议使用respawn的写法
crm respawn
#下面是对传输的数据进行压缩,是可选项
compression bz2
compression_threshold 2
※ 注意,v2 style不支持ipfail功能,而应使用pingd代替请见:
http://www.linux-ha.org/ipfail2、关于Designated Coorinatorv2.x style使用CRM来进行整个集群的管理。即使没有生成下面的cib.xml文件,只要正确配置authorkeys和ha.cf,即可运行集群。
集群开始时,通过在各节点间选举产生一个节点成为DC(Designated Coordinator),日志会显示:
引用
info: update_dc: Set DC to hatest3 (2.0)
今后,配置应在该DC上进行,并由其分发到下面的各个节点上。
※ 注意,我从官方的资料中并没有找到明确指出,如何再多个节点之间选举DC的方法和策略,似乎是与节点的主机名有关。介绍请见:
这里。
暂时,建议首次配置heartbeat的朋友,可以在没有cib.xml文件的情况下,启动所有节点上的heartbeat服务,通过查看日志以判断DC为那台节点机器。
这里,以hatest3为DC进行举例说明。所以,以下的工作都在hatest3节点上进行。3、转换v1.x为v2.x格式文件heartbeat提供了一个使用python写的转换工具,可直接转换v1 style的配置文件为v2 style:
# /usr/lib/heartbeat/haresources2cib.py /etc/ha.d/haresources
※ 如果您之前已经启动过使用v2 style的heartbeat,需要先删除原来的文件:# rm -f /var/lib/heartbeat/crm/*
继续前,可以先校验一下资源文件的格式是否正确:
# crm_verify -x /var/lib/heartbeat/crm/cib.xml
◎ 因/etc/ha.d/haresources文件对于v2 style来说是多余的,所以官方文档中,是创建了一个haresources.tmp的文件,然后直接转换:
# /usr/lib/heartbeat/haresources2cib.py /root/haresources.tmp
4、拷贝配置文件到各节点上同步各节点的配置文件
引用
# /usr/lib/heartbeat/ha_propagate
Propagating HA configuration files to node hatest4.
ha.cf 100% 11KB 10.7KB/s 00:00
authkeys 100% 682 0.7KB/s 00:00
Setting HA startup configuration on node hatest4.
# scp /var/lib/heartbeat/crm/cib.xml hatest4:/var/lib/heartbeat/crm/
cib.xml 100% 3117 3.0KB/s 00:00
5、重建crm临时目录※ 这一步非常重要,如果不进行这步操作的话,后面启动hearbeat服务会失败的。在安装的时候,我们提到,heartbeat v2的允许需要依赖/var/run/heartbeat中的若干文件。但不知道是Bug,还是其他原因,我发现机器重启后,/var/run/heartbeat目录会被清空:
引用
# ll /var/run/heartbeat/
总用量 0
但这目录下的ccm和crm对于heartbeat v2的运行是不可缺少的,对比一下heartbeat包中的内容:
引用
# rpm -ql heartbeat|grep run
/var/run
/var/run/heartbeat
/var/run/heartbeat/ccm
/var/run/heartbeat/crm
如果这时候直接启动heartbeat服务,日志中就会报错:
引用
info: startCib: CIB Initialization completed successfully
info: cib_register_ha: Signing in with Heartbeat
info: cib_register_ha: FSA Hostname: hatest3
ERROR: socket_wait_conn_new: trying to create in /var/run/heartbeat/crm/cib_callback bind:: No such file or directory
ERROR: Can't create wait channel of type uds: Resource temporarily unavailable
通过查看/etc/init.d/heartbeat文件,可以发现其中有:
StartHA() {
EchoNoNl "Starting High-Availability services: "
......
if
[ ! -d $RUNDIR/heartbeat ]
then
mkdir -p $RUNDIR/heartbeat/ccm
mkdir -p $RUNDIR/heartbeat/crm
chown -R hacluster:haclient $RUNDIR/heartbeat
chmod -R 750 $RUNDIR/heartbeat
fi
......
所以,解决办法是,修改该文件为:
引用
StartHA() {
EchoNoNl "Starting High-Availability services: "
......
if
[ ! -d $RUNDIR/heartbeat/ccm -o ! -d $RUNDIR/heartbeat/crm ]
then
mkdir -p $RUNDIR/heartbeat/ccm
mkdir -p $RUNDIR/heartbeat/crm
chown -R hacluster:haclient $RUNDIR/heartbeat
chmod -R 750 $RUNDIR/heartbeat
fi
......
参考办法:
Heartbeat fails to start after Dapper upgrade 6、测试最后,在各节点上启动heartbeat服务进行测试:
# service heartbeat start
日志会显示:
引用
info: Enabling logging daemon
info: logfile and debug file are those specified in logd config file (default /etc/logd.cf)
info: Version 2 support: respawn
WARN: File /etc/ha.d/haresources exists.
WARN: This file is not used because crm is enabled
info: **************************
info: Configuration validated. Starting heartbeat 2.1.3
info: heartbeat: version 2.1.3
info: Heartbeat generation: 1239088581
可见,已经使用v2 style配置了。接下来,您可以查看hatest3上的服务是否正常,或进行故障切换测试。
7、GUI工具v2 style的集群正常启动后,会打开5560端口,允许hb_gui访问。
引用
# netstat -ln|grep 5560
tcp 0 0 0.0.0.0:5560 0.0.0.0:* LISTEN
# ps -ef|grep mgmt|grep -v 'grep'
root 3770 3752 2 10:50 ? 00:00:02 /usr/lib/heartbeat/mgmtd -v
使用hb_gui访问CRM管理界面前,还需要给hacluster用户创建一下密码:
# passwd hacluster
接着,就可以进入Xwin界面,运行:
# hb_gui
看到的登陆界面如下:
登陆后可以看到当前的集群情况:
该界面不单可以进行监控,还可以进行配置和管理的操作:
不过,这工具可真的并不是那么好用,待以后有机会再做说明吧。
※ heartbeat还提供了一个CRM管理程序crm_resource,在 这里 说明。最后确认整个HA集群都可以正常运行、监控、切换后,可以把/etc/ha.d/ha.cf中的crm respawn改为crm yes,并设置为自启动:
# chkconfig --level 35 heartbeat on
五、故障分析在整个配置和调试过程中,遇到的问题可真是不少,甚至大部分问题在官方的资料中都没有提及,这是开源软件一个典型的问题。软件并不是研发出来就可以了,维护和文档是非常重要的。
1、激活5560端口错误启动heartbeat时,报错:
引用
ERROR: Duplicate apiauth directive for API client mgmtd: [mgmtd uid=root]
some entries in ha.cf no longer needed
在旧版本heartbeat上,激活5560端口,提供GUI访问支持,需要修改/etc/ha.d/ha.cf文件,在其中增加:
引用
apiauth mgmtd uid=root
respawn root /usr/lib/heartbeat/mgmtd -v
但新版本heartbeat已经不需要再进行该设置了,只需要打开crm yes或crm respawn即可,而重复的定义会导致启动失败的。
官方提供了说明:
http://www.linux-ha.org/UpdateExperience2、缺少临时目录引用
ERROR: socket_wait_conn_new: trying to create in /var/run/heartbeat/crm/cib_callback bind:: No such file or directory
ERROR: Can't create wait channel of type uds: Resource temporarily unavailable
这问题在前面已经提过了,是因为缺少/var/run/heartbeat下的ccm和crm目录,修改/etc/init.d/heartbeat脚本,或重建这些目录都可以解决。
3、临时目录权限不对引用
ERROR: socket_wait_conn_new: unlink failure(/var/run/heartbeat/ccm/ccm): Permission denied
ERROR: socket_wait_conn_new: trying to create in /var/run/heartbeat/ccm/ccm bind:: Permission
这问题与上面的问题类似,是因为临时目录创建时给予的权限不对导致的,修改为正确的权限即可。
4、UUID不正确参与集群的每台服务器都会有一个唯一的UUID值,但可能由于一些特殊原因,例如目录复制、机器拷贝、文件丢失等,导致UUID丢失或重复,会导致集群不能正常启动。
这时,可删除下面的文件,重启heartbeat时会自动重建新的UUID:
# cd /var/lib/heartbeat/
# rm delhostcache hb_generation hb_uuid hostcache
# service heartbeat start
5、宿主和权限问题红旗上默认安装的heartbeat v1会创建UID为90的hacluster用户和haclient组,若您重新安装hearbeat v2时对这部分进行了修改,请需要确认相关的文件是否正确。同样的,权限也一样,有部分执行文件是设置了setuid等特殊权限的。
下面的命令能协助您找出机器中属于hacluster用户的文件:
# find / -u hacluster -print