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

 


下面我们使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。



>规划:
·主服务器:test1
eth0:192.168.100.110
eth1:192.168.10.10 
#eth1用于检测从服务器是否存活,一般是使用一根网线直连从服务器,所以必须与从服务器为同一网段

·从服务器:test2
eth0:192.168.100.111
eth1:192.168.10.11
#eth1用于检测从服务器是否存活,一般是使用一根网线直连从服务器,所以必须与从服务器为同一网段

·虚拟IP地址eth0:0:192.168.100.200 
#对外提供服务的IP、实际的外网IP用户是不知道的
——————————————
>安装:
x86:rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
x64:rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install heartbeat* libnet
——————————————
vim /etc/hosts
192.168.100.110 test1
192.168.100.111 test2

vim /etc/sysconfig/network
HOSTNAME=test1

以下这步,如果你本来就有两个网卡可以忽略,直接配置IP
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=xxxx(从这个文件复制对应网卡mac,/etc/udev/rules.d/70-persistent-net.rules)
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.10.10
NETMASK=255.255.255.0
——————————————
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/

vi /etc/ha.d/authkeys 
auth 3
#1 crc #只作校验,开销最小
#2 sha1 HI! #加密强度最大,开销最大,后面的"HI!"为验证密码
3 md5 Hello!
chmod 600 /etc/ha.d/authkeys

vim /etc/ha.d/haresources
test1 192.168.100.200/24/eth0:0 nginx
 #设置test1为主节点、虚拟IP地址为192.168.100.200、提供的服务为nginx

vim /etc/ha.d/ha.cf
debugfile /var/log/ha-debug.log
logfile /var/log/ha.log
ucast eth1 192.168.10.11
keepalive 2
warntime 10
deadtime 30
initdead 120
udpport 694
auto_failback on
node test1
node test2
ping 192.168.100.2
#x86
respawn root /usr/lib/heartbeat/ipfail
#x64
#respawn root /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=root uid=root
——————————————
把authkeys,ha.cf,haresources这三个文件复制到从服务器上
vim /etc/ha.d/ha.cf
修改:
ucast eth1 192.168.10.10

chmod 600 /etc/ha.d/authkeys
——————————————
vim /etc/hosts
192.168.100.110 test1
192.168.100.111 test2

vim /etc/sysconfig/network
HOSTNAME=test2

以下这步,如果你本来就有两个网卡可以忽略,直接配置IP
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=xxxx(从这个文件复制对应网卡mac,/etc/udev/rules.d/70-persistent-net.rules)
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.10.11
NETMASK=255.255.255.0
——————————————
yum -y install nginx
主:echo "master" > /usr/share/nginx/html/index.html
从:echo "slave" > /usr/share/nginx/html/index.html

nginx -t
service nginx start/stop/reload/restart
——————————————
>测试:
主服务器上先启动heratbeat,然后再从服务器上启动
service heartbeat start/stop/status

test1上把icmp禁掉
iptables -I INPUT -p icmp -j DROP
ifconfig,eth0:0没有了

test2上ifconfig,eth0:0自动开启了

在test1上解除防火墙
iptables -D INPUT -p icmp -j DROP
ifconfig,eth0:0会自动开启,而test2上eth0:0会自动关闭

在test1上killall heartbeat,test2上也会自动开启eth0:0