继续昨天的内容。接下来要做的,就是借助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服务:
然后修改/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/ipfail
2、关于Designated Coorinator
v2.x style使用CRM来进行整个集群的管理。即使没有生成下面的cib.xml文件,只要正确配置authorkeys和ha.cf,即可运行集群。
集群开始时,通过在各节点间选举产生一个节点成为DC(Designated Coordinator),日志会显示:
今后,配置应在该DC上进行,并由其分发到下面的各个节点上。
※ 注意,我从官方的资料中并没有找到明确指出,如何再多个节点之间选举DC的方法和策略,似乎是与节点的主机名有关。
介绍请见:这里。
暂时,建议首次配置heartbeat的朋友,可以在没有cib.xml文件的情况下,启动所有节点上的heartbeat服务,通过查看日志以判断DC为那台节点机器。
这里,以hatest3为DC进行举例说明。所以,以下的工作都在hatest3节点上进行。
3、转换v1.x为v2.x格式文件
heartbeat提供了一个使用python写的转换工具,可直接转换v1 style的配置文件为v2 style:
※ 如果您之前已经启动过使用v2 style的heartbeat,需要先删除原来的文件:
继续前,可以先校验一下资源文件的格式是否正确:
◎ 因/etc/ha.d/haresources文件对于v2 style来说是多余的,所以官方文档中,是创建了一个haresources.tmp的文件,然后直接转换:
4、拷贝配置文件到各节点上
同步各节点的配置文件
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目录会被清空:
总用量 0
但这目录下的ccm和crm对于heartbeat v2的运行是不可缺少的,对比一下heartbeat包中的内容:
/var/run
/var/run/heartbeat
/var/run/heartbeat/ccm
/var/run/heartbeat/crm
如果这时候直接启动heartbeat服务,日志中就会报错:
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文件,可以发现其中有:
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
……
所以,解决办法是,修改该文件为:
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服务进行测试:
日志会显示:
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访问。
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用户创建一下密码:
接着,就可以进入Xwin界面,运行:
看到的登陆界面如下:
※ heartbeat还提供了一个CRM管理程序crm_resource,在 这里 说明。
最后确认整个HA集群都可以正常运行、监控、切换后,可以把/etc/ha.d/ha.cf中的crm respawn改为crm yes,并设置为自启动:
五、故障分析
在整个配置和调试过程中,遇到的问题可真是不少,甚至大部分问题在官方的资料中都没有提及,这是开源软件一个典型的问题。软件并不是研发出来就可以了,维护和文档是非常重要的。
1、激活5560端口错误
启动heartbeat时,报错:
some entries in ha.cf no longer needed
在旧版本heartbeat上,激活5560端口,提供GUI访问支持,需要修改/etc/ha.d/ha.cf文件,在其中增加:
respawn root /usr/lib/heartbeat/mgmtd -v
但新版本heartbeat已经不需要再进行该设置了,只需要打开crm yes或crm respawn即可,而重复的定义会导致启动失败的。
官方提供了说明:http://www.linux-ha.org/UpdateExperience
2、缺少临时目录
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: trying to create in /var/run/heartbeat/ccm/ccm bind:: Permission
这问题与上面的问题类似,是因为临时目录创建时给予的权限不对导致的,修改为正确的权限即可。
4、UUID不正确
参与集群的每台服务器都会有一个唯一的UUID值,但可能由于一些特殊原因,例如目录复制、机器拷贝、文件丢失等,导致UUID丢失或重复,会导致集群不能正常启动。
这时,可删除下面的文件,重启heartbeat时会自动重建新的UUID:
# rm delhostcache hb_generation hb_uuid hostcache
# service heartbeat start
5、宿主和权限问题
红旗上默认安装的heartbeat v1会创建UID为90的hacluster用户和haclient组,若您重新安装hearbeat v2时对这部分进行了修改,请需要确认相关的文件是否正确。同样的,权限也一样,有部分执行文件是设置了setuid等特殊权限的。
下面的命令能协助您找出机器中属于hacluster用户的文件:
六、参考文档
Learning About Heartbeat
Getting Started with Linux-HA (Heartbeat 2)
Getting Started With Heartbeat Version 2
http://linux-ha.org/v2/Examples/Simple
A Basic Single IP address Configuration
An Active/Active Two IP address Configuration
A Simple Apache Web Server HA Configuration
GUI Guide
The ha.cf file
新手上路 — 配置
分享:heartbeat 2.x style的配置
※ 2009-04-15 补充说明,关于启动时节点间选举DC的问题。
搭建Master-Master Mysql Replication 集群
在Windows下使用红旗HA Cluster 配置工具
构建Heartbeat 3.0.3 GUI+DRBD+Oracle 10g 双机互备集群
Heartbeat 3.0.3 介绍及rpm
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/110901.html