本篇通过一个简单的配置示例,展示下通过hearbeat进行主机的高可用性配置 (主备配置,当一台主机发生故障时,可以快速的切换到另一台主机上去)。
一、主机规划
两台centos6.x主机,需要一个和这两台主机在同一网段的VIP 。
# Server 1
Hostname : node1
Domain : 361way.com
IP Address : 192.168.122.10
# Server 2
Hostname : node2
Domain : 361way.com
IP Address : 192.168.122.20
# Float IP for online failover testing
IP Address : 192.168.122.30
二、主机配置
1、主机IP配置
[root@node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.122.10
NETMASK=255.255.255.0
USERCTL=no
PEERDNS=yes
IPV6INIT=no
另一台主机上一样,只需要将122.10改成122.20即可。修改完成后,重启网络服务生效:
service network restart
chkconfig network on
2、selinux及防火墙配置
setenforce 0
service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off
3、主机名及hosts文件配置
[root@node1 ~]# cat /etc/hosts
127.0.0.1 localhost
192.168.122.10 node1.361way.com node1
192.168.122.20 node2.361way.com node2
[root@node1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1.361way.com
[root@node1 ~]# hostname node1.361way.com
需要注意,主机名配置相当重要。后面如果在heartbeat配置中使用主机名,如果两边的主机名配置不对,服务启动会出现问题。
三、heartbeat安装配置
1、heartbeat安装
可以通过源码包进行编译安装,也可以通过epel 源通过rpm包安装,这里选择的后者。如果主机有外网的话,可以直接通过如下命令进行下载安装:
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install heartbeat
如果是内网主机可以通过一台可以上外网的主机将epel 源中heartbeat相关的包可以通过yumdowner命令(yum-utils)下载 ,再在内部yum服务器上createrepo创建内部源的方式使用。具体包如下:
[root@localhost heartbeat]# ll
total 17980
-rw-r--r--. 1 root root 66344 Jul 25 2015 cifs-utils-4.8.1-20.el6.x86_64.rpm
-rw-r--r--. 1 root root 72744 Jun 25 2012 cluster-glue-1.0.5-6.el6.x86_64.rpm
-rw-r--r--. 1 root root 119096 Jun 25 2012 cluster-glue-libs-1.0.5-6.el6.x86_64.rpm
-rw-r--r--. 1 root root 165292 Dec 3 2013 heartbeat-3.0.4-2.el6.x86_64.rpm
-rw-r--r--. 1 root root 269468 Dec 3 2013 heartbeat-libs-3.0.4-2.el6.x86_64.rpm
-rw-r--r--. 1 root root 40152 Oct 18 2014 keyutils-1.4-5.el6.x86_64.rpm
-rw-r--r--. 1 root root 67428 Jun 25 2012 libevent-1.4.13-4.el6.x86_64.rpm
-rw-r--r--. 1 root root 23488 Sep 26 2011 libgssglue-0.1-11.el6.x86_64.rpm
-rw-r--r--. 1 root root 123764 Nov 25 2013 libnl-1.1.4-2.el6.x86_64.rpm
-rw-r--r--. 1 root root 26420 Apr 13 2016 libtalloc-2.1.5-1.el6_7.x86_64.rpm
-rw-r--r--. 1 root root 41228 May 12 19:38 libtdb-1.3.8-3.el6_8.2.x86_64.rpm
-rw-r--r--. 1 root root 29456 Apr 13 2016 libtevent-0.9.26-2.el6_7.x86_64.rpm
-rw-r--r--. 1 root root 83904 Oct 5 05:20 libtirpc-0.2.1-11.el6_8.x86_64.rpm
-rw-r--r--. 1 root root 45424 Jul 3 2011 libtool-ltdl-2.2.6-15.5.el6.x86_64.rpm
-rw-r--r--. 1 root root 342932 Oct 5 05:18 nfs-utils-1.2.3-70.el6_8.2.x86_64.rpm
-rw-r--r--. 1 root root 69884 Jul 25 2015 nfs-utils-lib-1.1.5-11.el6.x86_64.rpm
-rw-r--r--. 1 root root 38264 Oct 18 2014 perl-TimeDate-1.16-13.el6.noarch.rpm
-rw-r--r--. 1 root root 48840 Jul 25 2015 python-argparse-1.2.1-2.1.el6.noarch.rpm
-rw-r--r--. 1 root root 913840 Jul 3 2011 PyXML-0.8.4-19.el6.x86_64.rpm
-rw-r--r--. 1 root root 206564 Jul 25 2015 quota-3.17-23.el6.x86_64.rpm
drwxr-xr-x. 2 root root 4096 Nov 1 17:23 repodata
-rw-r--r--. 1 root root 395272 May 12 19:38 resource-agents-3.9.5-34.el6_8.2.x86_64.rpm
-rw-r--r--. 1 root root 52460 May 12 18:52 rpcbind-0.2.0-12.el6.x86_64.rpm
-rw-r--r--. 1 root root 10634372 Aug 24 03:10 samba-common-3.6.23-36.el6_8.x86_64.rpm
-rw-r--r--. 1 root root 2276252 Aug 24 03:10 samba-winbind-3.6.23-36.el6_8.x86_64.rpm
-rw-r--r--. 1 root root 2123744 Aug 24 03:10 samba-winbind-clients-3.6.23-36.el6_8.x86_64.rpm
-rw-r--r--. 1 root root 72100 May 12 18:51 tcp_wrappers-7.6-58.el6.x86_64.rpm
2、heartbeat配置
这里主机涉及三个配置文件,ha.cf、authkeys、haresources,三个包默认在/etc/ha.d目录中并不存在,不过其在/usr/share/doc/heartbeat-3.0.4/目录下有相应的示例文件。
配置ha.cf文件
[root@node1 ~]# cat /etc/ha.d/ha.cf
keepalive 2
warntime 5
deadtime 15
initdead 90
udpport 694
auto_failback on
ucast eth0 192.168.122.20
logfile /var/log/ha-log
node node1.361way.com node2.361way.com
上面的配置需要注意,node1上ucast后面跟的接口是本地和另一台主机通信的接口,我这里是eth0 。后面跟的地址是node2主机的地址 。同样,在node2上面需要将后面的地址改成node1的地址。
配置认证
[root@node1 ~]# cat /etc/ha.d/authkeys
auth 2
2 crc
[root@node1 ~]# chmod 0600 /etc/ha.d/authkeys
这里机注意两台,第一权限必须改为600,第二认证方式,推荐使用sha1、其次是md5,当前用的crc不推荐,这里主要是方便测试 。
资源配置
[root@node1 ~]# cat /etc/ha.d/haresources
node1.361way.com IPaddr::192.168.122.30/24/eth0:0
将这两个配置文件复制到node2上:
cd /etc/ha.d/
scp authkeys ha.cf haresources root@192.168.122.20:/etc/ha.d/
复制完成后,需要将ha.cf文件修改,将其中的ucast eth0 192.168.122.20修改为ucast eth0 192.168.122.10 。
3、启动并测试
service heartbeat start
chkconfig heartbeat on
在两台主机上启动heartbeat服务,并查看/var/log/ha.log日志确认都启动成功后 ,将其中node1节点关机,或者把heartbeat服务停掉后,会发现VIP自动切换到node2上 。
四、httpd配置
先在两台主机上停止heartbeat服务,并修改两台主机的/etc/ha.d/haresources配置,在其后增加httpd,如下:
node1.361way.com IPaddr::192.168.122.30/24/eth0:0 httpd
分别在node1和node2上安装httpd包,并给两个服务配置不同的页面,这里以其中一个点为例:
yum -y install httpd
echo "node1.361way.com index page" > /var/www/html/index.html
chkconfig httpd off
service httpd stop
注意,httpd服务不需要配置开机自启动,因为heartbeat会自动调用httpd服务。上面haresources后面的httpd配置,其会到/etc/ha.d/resource.d/ 和 /etc/init.d/目录下找httpd服务,并通过stop/start/restart进行服务管理 。
配置完成后,只需要在两台主机上启运heartbeat服务即可。
五、总结
按照本篇中的配置进行ha配置测试,发现只有在heartbeat服务被停掉、主机网络断掉、主机宕机等情况下会发生故障转移;在httpd服务挂掉的情况下,服务并不会发现转移。如果只是简单的通过heartbeart进行ha配置,还需要对每个node节点上的httpd(或其他服务)做进程守护 。当主节点重新恢复服务后,也会自动再切回到主节点上。