利用heartbeat实现高可用集群
heartbeat是一个可以提供messaging Layer层的软件,他有三个版本(v1、v2、v3),本实验使用heartbeat v2版本,由于v2版本自带了2个资源管理器heartbeat和crm,因此,本文会分别实现2个不同的资源管理器来实现高可用集群。
一、利用heartbeat自带的资源管理器heartbeat来实现高可用集群
1、实验环境
本次实验作者是在RHEL 5.8系统上实现的,并且是在vm虚拟机上实现的。每一个虚拟机上面只需要一个网卡即可,网卡模式可以是桥接也可以是仅主机模式。
本次实验需要用到的ip地址
VIP:192.168.0.25
RS1:192.168.0.111 对应的主机名为ha1.xsl.com
RS2:192.168.0.200 对应的主机名为ha2.xsl.com
2、各个节点的时间必须要同步
由于高可用集群的需要根据心跳信息来判断对方是否正常,且心跳信息传递的时间间隔默认是以秒为单位的,因此,如果两个节点的时间不一致会导致该实验失败。
可以配置ntp服务来使各个节点同步,关于ntp服务在此处不介绍,配置比较简单
3、主机名要保持一致
使用hostname得到的结果要和uname -n命令得到的结果保持一致
4、将主机名由/etc/hosts文件来解析
将ha1.xsl.com和ha2.xsl.com的主机名和ip的对应关闭配置在本地的hosts文件中,记住,不应该将高可用节点的主机名由dns来解析,否则一点dns出现故障,你的高可用服务也就不可用呢!
5、配置ssh双机互信
在RS1上(ip为192.168.0.111)配置如下:
#ssh-keygen -t rsa -N ''
#ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.0.200
在RS2上(ip为192.168.0.200)配置如下:
#ssh-keygen -t rsa -N ''
#ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.0.111
使用ssh连接测试一下,如果不需要密码,则表示测试成功
6、安装heartbeat相关软件
heartbeat-ldirectord - Monitor daemon for maintaining high availability resources, 为ipvs高可用提供规则自动生成及后端realserver健康状态检查的组件;
heartbeat-2.1.4-11.el5.i386.rpm 这个heartbeat核心组件
heartbeat-gui-2.1.4-11.el5.i386.rpm 这个是一个提供gui方式的集群管理界面工具
heartbeat-ldirectord-2.1.4-11.el5.i386.rpm 为ipvs高可用提供规则自动生成及后端realserver健康状态检查的组件;
heartbeat-pils-2.1.4-11.el5.i386.rpm 其他下面的都是依赖包
heartbeat-stonith-2.1.4-11.el5.i386.rpm
libnet-1.1.6-7.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
安装命令 yum -y --nogpgcheck install *.rpm
7、安装httpd服务
#yum install httpd
8、heartbeat的配置文件
heartbeat有三个配置文件,分别为:
authkeys :这是一个密钥文件,用于确保其他非高可用集群节点随便加入到高可用集群中去。因此,彼此各个节点之间都是以加密的形式来传输数据的。
ha.cf:这个heartbeat服务的配置文件,例如定义心跳信息等等
haresources:这是一个资源管理配置文件,里面定义了资源如Vip、服务(如httpd服务)等等信息
在/etc/ha.d/命令下默认没有这三个文件,需要从其他地方复制过来,如:
#cp /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresources} /etc/ha.d/
9、修改三个配置文件
First修改authkeys文件
里面只有三种加密方式,这里选择md5加密方式,格式如下
vim authkeys
auth 3
3 md5 这里是一堆随机数
生产一堆随机数方式
dd if=/etc/urandom bs=1 count=512 | MD5sum
配置完成后需要修改该文件的权限为600
#chmod 600 authkeys
否则,会出现如下报错信息
heartbeat[27496]: 2011/11/14_18:26:11 ERROR: Bad permissions on keyfile [/etc/ha.d/authkeys], 600 recommended.
second修改ha.cf文件
#crm on #这个需要添加,指要用heartbeat V2版的资源管理器crm,默认使用的是heartbeat,在这里需要注释掉,等到后面的实验使用crm来实现的时候,需要启动该选项。
logfile /var/log/ha-log ##可以定义日志自定义存放位置,默认是/var/log/message
#logfacility local0 ##日志发送的facility,这个和上面的只能选择一个
keepalive 2 ##发送心跳信息间隔
deadtime 15 ##多少秒收不到心跳就以为它挂点了
warntime 5 ##多少秒收不到心跳就发出警告信息
initdead 120 ##服务启动或者重启多少秒之后就认为对方挂了
udpport 694 ##心跳信息发送端口
mcast eth0 225.1.2.1 694 1 0 ##多播组,使用哪种方式来告知VIP的mac地址,一旦vip所在的主机发生改变(即vip所对应的mac地址也会发生改变),那么vip上一跳的设备(如路由器)所缓存的arp缓存也要发生改变,否则可能导致通信错误。上面有详细的参数解释
auto_failback on ##主节点挂点,从节点代替,当主节点又正常了,是否归还资源
node ha1.xsl.com ##定义集群节点,这里的节点名称要和hostname保持一致
node ha2.xsl.com ##定义集群节点
ping 172.16.0.1 ##最好是一个网关
compression bz2 ##是否压缩心跳报文
compression_threshold 2 ##大于多少才压缩
finish配置资源文件haresources
这里有许多配置资源的格式,可以参考上面的提示信息进行配置
这里我配置的资源格式为:
ha1.xsl.com IPaddr::192.168.0.25/16/eth0 httpd
格式说明:
ha1.xsl.com为主节点,这里只需要配置主节点,其他节点不需要配置
IPaddr:这里是ocf风格的资源,这些资源位于/etc/ha.d/rc.d/目录下,IPadd后面接了2个“冒号”,表示为该资源的参数(ocf风格的脚本是可以接受参数的),如果有多个参数,则需要使用2个冒号隔开,后面的地址(192.168.0.25)是VIP,且工作在eth0这个接口的别名上(如果不配接口,则VIP会自动配置在与它在同一个网段内的接口的别名上)。如果有多个资源则使用空格隔开,这里的httpd就是I个资源。
建议:配置完成上述步骤后,可以先把httpd服务开启,手动测试一下,看看可不可以正常访问,如果可以访问则继续下面的步骤;否则,先排除看看httpd服务配置是否有问题。还有就是此处不要把heartbeat服务启动哦!!!
10、关闭heartbeat和httpd开启自动启动功能
chkconfig heartbeat off
chkconfig httpd off
11、启动heartbeat服务和httpd服务
service heartbeat start这个服务需要在所有的节点上开启
service httd start 这个服务只需要在主节点上开启
按照上面的步骤,利用heartbeat就可以实现一个高可用集群服务