HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务。 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。实验用heartbeat做HA,nginx服务作为HA对应的服务。

    准备俩台机子master和slave,系统环境均为64位centos6.5,网卡eth0的IP分别为192.168.137.101和192.168.137.110,并在两台机子上vim /etc/hosts 

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.137.101 master
192.168.137.110 slave
关闭防火墙,rpm -ivh  'http://www.lishiming.net/data/p_w_upload/forum/epel-release-6-8_32.noarch.rpm'安装epel扩展源,
yum  install -y heartbeat*   libnet  nginx安装heartbeat和nginx服务,

在master(主)上cd /usr/share/doc/heartbeat-3.0.4/,

cp ha.cf authkeys haresources /etc/ha.d/  复制这三个文件到/etc/ha.d下,

cd /etc/ha.d/ ,

vim authkeys

auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!

这里选择3 ,中间项,2是最好的,1是最差的,

然后chomd 600 authkeys

vim haresources

加入master 192.168.137.105/24/eth0:0 nginx     //这里的eth0:0是虚拟网卡,连接master和slave,又叫vip

先 > ha.cf 清空文件,然后

vim ha.cf

加入

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility    local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 192.168.137.110
auto_failback on
node    master
node    slave
ping 192.168.137.1
respawn hacluster /usr/lib64/heartbeat/ipfail

这里要注意的是ucast eth0是从的IP,通过ping 192.168.137.1网关来判断主从是不是dead,还有一点

respawn hacluster /usr/lib64/heartbeat/ipfail这是64位的路径,32位的应该是respawn hacluster /usr/lib/heartbeat/ipfail

scp authkeys ha.cf haresources slave:/etc/ha.d/   若是没有scp可以yum install -y openssh*(俩台机子都要安装SCP),当然也可以用rsync。

在slave(从)上,

cd /etc/ha.d/

vim ha.cf

将 ucast eth0 192.168.137.110改为ucast eth0 192.168.137.101


测试HA:

service heartbeat start 启动heartbeat,先主再从顺序启动

ifconfig 或者ip add 查看是否多出eth0:0虚拟网卡

ps aux|grep nginx 查看主上是否有启动nginx服务

注意:仅是master上多出eth0:0和nginx服务,若是从上也多出这些服务,则HA不算成功(刚yum install nginx的时候可能会启动nginx,可以stop nginx和heartbeat,然后再启动heartbeat)

 测试1
主上故意禁ping
iptables -I INPUT -p icmp -j DROP
可以看出当master不能ping通网关的时候,slave会马上开启eth0:0和nginx,当然我们可以在 /usr/share/nginx/html/下修改index.html文件,主上的echo "123master" > index.html,从上的echo "321slave" > index.html,这样就可以在web浏览器中输入eth0:0的IP http://192.168.137.105/

来测试nginx工作在哪一台机子上。
测试2
主上停止heartbeat服务
service heartbeat stop ,情况跟测试1的情况差不多。