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的情况差不多。