本篇通过一个简单的配置示例,展示下通过hearbeat进行主机的高可用性配置 (主备配置,当一台主机发生故障时,可以快速的切换到另一台主机上去)。

一、主机规划

两台centos6.x主机,需要一个和这两台主机在同一网段的VIP 。

 1# Server 1
 2Hostname   : node1
 3Domain     : 361way.com
 4IP Address : 192.168.122.10
 5# Server 2
 6Hostname   : node2
 7Domain     : 361way.com
 8IP Address : 192.168.122.20
 9# Float IP for online failover testing
10IP Address : 192.168.122.30

二、主机配置

1、主机IP配置

 1[root@node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
 2DEVICE=eth0
 3TYPE=Ethernet
 4ONBOOT=yes
 5NM_CONTROLLED=no
 6BOOTPROTO=none
 7IPADDR=192.168.122.10
 8NETMASK=255.255.255.0
 9USERCTL=no
10PEERDNS=yes
11IPV6INIT=no

另一台主机上一样,只需要将122.10改成122.20即可。修改完成后,重启网络服务生效:

1service network restart
2chkconfig network on

2、selinux及防火墙配置

1setenforce 0
2service iptables stop
3service ip6tables stop
4chkconfig iptables off
5chkconfig ip6tables off

3、主机名及hosts文件配置

1[root@node1 ~]# cat /etc/hosts
2127.0.0.1     localhost
3192.168.122.10 node1.361way.com node1
4192.168.122.20 node2.361way.com node2
5[root@node1 ~]# cat /etc/sysconfig/network
6NETWORKING=yes
7HOSTNAME=node1.361way.com
8[root@node1 ~]# hostname node1.361way.com

需要注意,主机名配置相当重要。后面如果在heartbeat配置中使用主机名,如果两边的主机名配置不对,服务启动会出现问题。

三、heartbeat安装配置

1、heartbeat安装

可以通过源码包进行编译安装,也可以通过epel 源通过rpm包安装,这里选择的后者。如果主机有外网的话,可以直接通过如下命令进行下载安装:

1rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2yum -y install heartbeat

如果是内网主机可以通过一台可以上外网的主机将epel 源中heartbeat相关的包可以通过yumdowner命令(yum-utils)下载 ,再在内部yum服务器上createrepo创建内部源的方式使用。具体包如下:

 1[root@localhost heartbeat]# ll
 2total 17980
 3-rw-r--r--. 1 root root    66344 Jul 25  2015 cifs-utils-4.8.1-20.el6.x86_64.rpm
 4-rw-r--r--. 1 root root    72744 Jun 25  2012 cluster-glue-1.0.5-6.el6.x86_64.rpm
 5-rw-r--r--. 1 root root   119096 Jun 25  2012 cluster-glue-libs-1.0.5-6.el6.x86_64.rpm
 6-rw-r--r--. 1 root root   165292 Dec  3  2013 heartbeat-3.0.4-2.el6.x86_64.rpm
 7-rw-r--r--. 1 root root   269468 Dec  3  2013 heartbeat-libs-3.0.4-2.el6.x86_64.rpm
 8-rw-r--r--. 1 root root    40152 Oct 18  2014 keyutils-1.4-5.el6.x86_64.rpm
 9-rw-r--r--. 1 root root    67428 Jun 25  2012 libevent-1.4.13-4.el6.x86_64.rpm
10-rw-r--r--. 1 root root    23488 Sep 26  2011 libgssglue-0.1-11.el6.x86_64.rpm
11-rw-r--r--. 1 root root   123764 Nov 25  2013 libnl-1.1.4-2.el6.x86_64.rpm
12-rw-r--r--. 1 root root    26420 Apr 13  2016 libtalloc-2.1.5-1.el6_7.x86_64.rpm
13-rw-r--r--. 1 root root    41228 May 12 19:38 libtdb-1.3.8-3.el6_8.2.x86_64.rpm
14-rw-r--r--. 1 root root    29456 Apr 13  2016 libtevent-0.9.26-2.el6_7.x86_64.rpm
15-rw-r--r--. 1 root root    83904 Oct  5 05:20 libtirpc-0.2.1-11.el6_8.x86_64.rpm
16-rw-r--r--. 1 root root    45424 Jul  3  2011 libtool-ltdl-2.2.6-15.5.el6.x86_64.rpm
17-rw-r--r--. 1 root root   342932 Oct  5 05:18 nfs-utils-1.2.3-70.el6_8.2.x86_64.rpm
18-rw-r--r--. 1 root root    69884 Jul 25  2015 nfs-utils-lib-1.1.5-11.el6.x86_64.rpm
19-rw-r--r--. 1 root root    38264 Oct 18  2014 perl-TimeDate-1.16-13.el6.noarch.rpm
20-rw-r--r--. 1 root root    48840 Jul 25  2015 python-argparse-1.2.1-2.1.el6.noarch.rpm
21-rw-r--r--. 1 root root   913840 Jul  3  2011 PyXML-0.8.4-19.el6.x86_64.rpm
22-rw-r--r--. 1 root root   206564 Jul 25  2015 quota-3.17-23.el6.x86_64.rpm
23drwxr-xr-x. 2 root root     4096 Nov  1 17:23 repodata
24-rw-r--r--. 1 root root   395272 May 12 19:38 resource-agents-3.9.5-34.el6_8.2.x86_64.rpm
25-rw-r--r--. 1 root root    52460 May 12 18:52 rpcbind-0.2.0-12.el6.x86_64.rpm
26-rw-r--r--. 1 root root 10634372 Aug 24 03:10 samba-common-3.6.23-36.el6_8.x86_64.rpm
27-rw-r--r--. 1 root root  2276252 Aug 24 03:10 samba-winbind-3.6.23-36.el6_8.x86_64.rpm
28-rw-r--r--. 1 root root  2123744 Aug 24 03:10 samba-winbind-clients-3.6.23-36.el6_8.x86_64.rpm
29-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文件

 1[root@node1 ~]# cat /etc/ha.d/ha.cf
 2keepalive 2
 3warntime 5
 4deadtime 15
 5initdead 90
 6udpport 694
 7auto_failback on
 8ucast eth0 192.168.122.20
 9logfile /var/log/ha-log
10node node1.361way.com node2.361way.com

上面的配置需要注意,node1上ucast后面跟的接口是本地和另一台主机通信的接口,我这里是eth0 。后面跟的地址是node2主机的地址 。同样,在node2上面需要将后面的地址改成node1的地址。

配置认证

1[root@node1 ~]# cat /etc/ha.d/authkeys
2auth 2
32 crc
4[root@node1 ~]# chmod 0600 /etc/ha.d/authkeys

这里机注意两台,第一权限必须改为600,第二认证方式,推荐使用sha1、其次是md5,当前用的crc不推荐,这里主要是方便测试 。

资源配置

1[root@node1 ~]# cat /etc/ha.d/haresources
2node1.361way.com IPaddr::192.168.122.30/24/eth0:0

将这两个配置文件复制到node2上:

1cd /etc/ha.d/
2scp authkeys ha.cf haresources [email protected]:/etc/ha.d/

复制完成后,需要将ha.cf文件修改,将其中的ucast eth0 192.168.122.20修改为ucast eth0 192.168.122.10 。

3、启动并测试

1service heartbeat start
2chkconfig heartbeat on

在两台主机上启动heartbeat服务,并查看/var/log/ha.log日志确认都启动成功后 ,将其中node1节点关机,或者把heartbeat服务停掉后,会发现VIP自动切换到node2上 。

四、httpd配置

先在两台主机上停止heartbeat服务,并修改两台主机的/etc/ha.d/haresources配置,在其后增加httpd,如下:

1node1.361way.com IPaddr::192.168.122.30/24/eth0:0 httpd

分别在node1和node2上安装httpd包,并给两个服务配置不同的页面,这里以其中一个点为例:

1yum -y install httpd
2echo "node1.361way.com index page" > /var/www/html/index.html
3chkconfig httpd off
4service 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(或其他服务)做进程守护 。当主节点重新恢复服务后,也会自动再切回到主节点上。