Linux Enterprise Cluster NOtes -- Ch7 A Sample HA config

本章介绍了一个heartbeat的最简单配置,以下是硬件上的连接图(附件1):

从图上可以看出,两台服务器使用以太网作为心跳线,分配的IP地址分别是10.1.1.1和10.1.1.2,BTW,在RFC1918中,规定可以用来做private network的IP地址为:

10.0.0.0 to 10.255.255.255 (10/8 prefix)

172.16.0.0 to 172.31.255.255 (172.16/12 prefix)

192.168.0.0 to 192.168.255.255 (192.168/16 prefix)


2. 安装heartbeat软件包,用RPM的方式安装即可。

#rpm -ivh /mnt/cdrom/chapter7/heartbeat-pils-*.rpm[1]
#rpm -ivh /mnt/cdrom/chapter7/hearbeat-stonith-*.rpm
#rpm -ivh /mnt/cdrom/chapter7/hearbeat-*i386.rpm

其中pils这个包是:The PILS package was introduced with version 0.4.9d of Heartbeat. PILS is Heartbeat's generalized plug-in and interface loading system, and it is required for normal Heartbeat operation.

stonith这个包已经知道了,前面已经讲过stonith是什么意思了。

当然,也可以自己编译源码,或是download src rpm,然后用rpm --rebuild

3. 需要注意的是,安装这些RPM包需要openssl和netsnmp,如果这两个东西没有装的话,安装RPM会出现dependencies error的。

4. 配置/etc/ha.d/ha.cf. 如果这个文件不存在,那么可以拷贝一个sample过来然后修改:cp /usr/share/doc/package/heartbeat/ha.cf /etc/ha.d

5. 开始修改配置,首先将以下行的注释去掉:

#udpport 694
#bcast eth0 #Linux

这两行打开之后,表示使用以太网做心跳,使用UDP,端口是694,两台server作心跳的两块网卡都是eth0,如果两台server作心跳的网卡一个是eth0,一个是eth1,那么这样写:

bcast eth0 eth1 #第一个eth0指的是primary server,后面一个是backup server

如果用串口线做心跳,那么要这样配置:

serial /dev/ttyS0
baud 19200

6. 然后将以下行的注释去掉:

keepalive 2
deadtime 30
initdead 120

这三项,所谓keepalive指的是每隔2秒两台server做心跳检测一次;deadtime,如果30秒内还是没有正常的心跳到 达,backup server就认为primary server已经挂了;initdead,这个选项用来指定primary server的heartbeat启动后,在隔多长时间后,再去start相关的resource。为什么要这样做呢,很简单,如果primary server挂了,那么backup server就会将资源纳入自己的管理范围,这个时候如果primary server好了,那么,primary server必须要隔一段时间再去取回resource的控制权,因为必须要留一段时间给backup server释放资源,如果primary server一起来就去控制资源,就会出现"Partitioned Clusters and STONITH"这种现象。

7. 最后,添加两行到ha.cf文件的末尾:

node primary.mydomain.name
node backup.mydomain.com

这两行就是将作HA的两台服务器的hostname填入即可,注意,这里还没指定primary server是谁,backup server是谁,只是单纯的罗列了两台机器而已,在下一部分中定义资源时就会定义谁是primary server,谁是backup server了.

 

8. 配置/etc/ha.d/haresources,这个文件中将配置所有primary server将拥有的resource。不过首先我们需要先创建一个resource,这里做了一个最简单的:

#vi /etc/ha.d/resource.d/test
内容如下:
#!/bin/bashlogger $0 called with $1
case "$1" in
start)
# Start commands go here
;;
stop)
# Stop commands go here
;;
status)
# Status commands go here
;;
esac

在这个脚本中,看到我们用了一个命令叫logger,这个命令会将后面的message写到系统日志里面,默认就是/var/log/messages(当然,我们可以通过配置/etc/syslog.conf来调整这种行为)。

9. 然后给我们的resource加上可执行权限:

chmod 755 /etc/ha.d/resource.d/test

10. 然后测试一下:/etc/ha.d/resource.d/test start,这个时候check一下/var/log/messages,应该能发现多了一行:

[timestamp] localhost root: /etc/ha.d/resource.d/test called with start

11. 然后我们开始配置haresources文件,首先拷贝一个sample:

cp /usr/share/doc/packages/heartbeat/haresources /etc/ha.d

12. 然后编辑这个文件,只需要在文件的末尾加上这样一句话:

primary.mydomain.com test

这个配置首先指定primary.mydomain.com为primary server(当然要把primay.mydomain.com换成相应的hostname),然后指定资源为test(heartbeat会在/etc /init.d和/etc/ha.d/resources目录下查找这个test脚本,另外需要注意的是,在backup server上,这个test脚本也必须要存在)

13. 这样就OK了,再罗嗦一边,不要将这个test放到系统启动过程中,因为heartbeat负责启动/停止该资源。

14. heartbeat的respawn. heartbeat提供了一个respawn的功能,比如:

respawn userid /usr/bin/mydaemon

这个命令表示heartbeat会启动/usr/bin/mydaemon这个daemon进程,如果发现这个进程死了,heartbeat会再 启动他,简言之,利用这个respawn,/usr/bin/mydaemon将获得和heartbeat一样的生命周期--这就意味着,我们可以利用这 个daemon,从而连接两台服务器上的heartbeat,或是利用这个daemon来监控heartbeat的一些行为。不过要注意的是,这个 daemon没有failover的功能,heartbeat唯一保证的是,当heartbeat自己活着时,我们的这个daemon也活着,仅此而已。

其实respawn,我们已经接触过,在/etc/inittab中也有一些respawn的命令(用来启动login程序),不同的是,这里respawn出来的程序由init进程负责监控,这里提到的respawn是heartbeat的一个命令。

此外,和下面要说的cl_respawn不同的是,由于我们primary server和backup server的配置是一样的,所以,被respawn的程序在两台服务器上都会存在-这也是为什么respawn出来的程序不具备failover的一个理由。

15. cl_respawn. 和respawn一样,都是启动并监控一个程序,唯一不同的是,cl_respawn启动出来的程序不会在primary和backup两台服务器上存 在,heartbeat会保证被cl_respawn出来的程序,在同一时间,只会在一台服务器上存在---这就是说,可以用这个cl_respawn来 做failover!比如,我们要监控的资源是httpd,那么,当primary server down掉后,backup server会接管工作,但是如果primary server没有down掉,而是httpd进程down掉了怎么办呢?这时就可以用这个cl_respawn将httpd进程监控起来,当在 primary server上发现httpd进程down掉后,立刻重启他,而当primary server down掉的时候,httpd也可以failover,很棒吧!

16. 配置/etc/ha.d/authkeys。这个文件用来配置一个security key,heartbeat会利用我们指定的加密方法和key来加密heartbeat的心跳message,从而保证安全性。

17. 开始配置:

cp /usr/share/doc/packages/heartbeat/authkeys /etc/ha.d

18. 编辑authkeys
auth1
1 sha1 testlab

这里可以看到,我们采用sha1(Secure Hash Algorithm 1)这种加密算法,testlab是加密所使用的key。除了testlab中的是字母l之外,其他的都是数字1

19. 很显然的是,这个authkeys这个文件必须只能root用户可读,其他人都不可读,否则key就泄露了,如下:

#chmod 600 /etc/ha.d/authkeys

如果我们没做这个工作,heartbeat会提醒我们。

20. 配置backup server。首先backup server上的OS和heartbeat都要装的和primay server一样,然后,将primary server上的配置都拷贝过来就行了:

#scp -r /etc/ha.d backupnode:/etc/ha.d

21. 同步系统时间。我们需要将primary server和backup server的时间同步,因为有些应用对时间是敏感的。可以使用NTP+cron,来将两台server的时间同步。

 

22. 运行heartbeat。首先我们可以用ResourceManager这个程序来测试我们配置的resource是否正确(在primary server上执行):

#/usr/lib/heartbeat/ResourceManager listkeys `uname -n`

如果ResourceManager能打印出我们配置的资源-test,就OK了。

23. 在primary server上执行/etc/init.d/heartbeat start就可以启动heartbeat,启动后查看/var/log/messages(如果在ha.cf中配置了logfile这项,就不是这个 log文件)文件可以看到信息:

primary root: test called with statusprimary heartbeat[4410]: info: **************************
primary heartbeat[4410]: info: Configuration validated. Starting heartbeat
<version>
primary heartbeat[4411]: info: heartbeat: version <version>
primary heartbeat[2882]: WARN: No Previous generation - starting at 1[5]
primary heartbeat[4411]: info: Heartbeat generation: 1
primary heartbeat[4411]: info: UDP Broadcast heartbeat started on port 694
(694) interface eth1
primary heartbeat[4414]: info: pid 4414 locked in memory.
primary heartbeat[4415]: info: pid 4415 locked in memory.
primary heartbeat[4416]: info: pid 4416 locked in memory.
primary heartbeat[4416]: info: Local status now set to: 'up'
primary heartbeat[4411]: info: pid 4411 locked in memory.
primary heartbeat[4416]: info: Local status now set to: 'active'
primary logger: test called with status
primary last message repeated 2 times
primary heartbeat: info: Acquiring resource group: primary.mydomain.com test
primary heartbeat: info: Running /etc/init.d/test start
primary logger: test called with start
primary heartbeat[4417]: info: Resource acquisition completed.
primary heartbeat[4416]: info: Link primary.mydomain.com:eth1 up.

这些都很好理解,不说了。有可能会看到说backup server是dead的,那是因为我们在backup server上还没启动heartbeat的缘故,启动了backup server上的heartbeat以后,再回来看primary server上的log,能看到他检测到了backup server。如果不行,就检查网络是否通,是否有防火墙等等。

24. 在log信息中,有个东西很有意思,需要解释一下,看这行:

primary heartbeat[4411]: info: Heartbeat generation: 1

这里heartbeat的generation,当heartbeat启动一次,这个generation就会加1,为什么要这样做呢?很简单, 还是为了防止"partition cluster and stonith"这种情况。比如如果现在连接两台server的所有心跳线全部故障了,此时backup server就会认为primary server挂了,那么,他会开始抢占资源,如果后来他又收到了primary server的一个心跳,他就会check这个心跳的generation,看看是不是加过1了,如果加过,表示primary server的heartbeat确实重启过,如果发现这个generation没加,很显然,这是一种STONITH的情况,此时,backup server会立刻自己重启以避免发生冲突。

 

25. 现在可以开始测试failover了。将primary server上的heartbeat服务关闭或是拔掉网线或是重启primary server,查看backup server的日志就可以看到backup server检测到了然后接管test资源;然后将primary server复原,可以看到backup server检测到然后释放资源等等这些情况。

26. 本章只是一个最简单的failover配置,heartbeat不仅仅如此,他还可以监控资源,做一个更细粒度的监控工作。后面会讲解。
 

你可能感兴趣的:(cluster)