Apr 8

[原]heartbeat 2.x简单配置[2] 晴

linuxing , 10:27 , 网络服务 » HA , 评论(0) , 引用(0) , 阅读(27229) , Via 本站原创 | |
    继续昨天的内容。接下来要做的,就是借助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/ipfail

2、关于Designated Coorinator
v2.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/UpdateExperience

2、缺少临时目录
引用
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

六、参考文档
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的问题。
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]