HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务。 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。
下面我们使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。
试验准备:
两个机器, 都是centos6.5,网卡eth0 ip如下:
master 192.168.31.166 slave 192.168.31.100
还需要master 上设置一块流动IP 。
(虚IP) eth0:1 192.168.31.80
下面操作1-5都是在两个机器上操作
1. 设置hostname ,分别为master 和 slave
hostname master ;bash hostname slave ;bash
2. 关闭防火墙 iptables -F;
关闭selinux: setenforce 0
3. vi /etc/hosts // 增加内容如下:
192.168.31.166 master 192.168.31.100 slave
4. 安装epel扩展源:
rpm -ivh ‘http://www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm‘
5. 两个机器都安装heartbeat / libnet
yum install -y heartbeat* libnet nginx
6. 主上(master)配置
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d
vi authkeys
#auth 3 打开前面的#号 后面的 选择 3 就打开下面 3 前面的#
去掉 #3 md5 Hello! 前面的#号
chmod 600 authkeys
vi haresources //加入
master 192.168.31.80/24/eth0:0 nginx
vi ha.cf //改为如下内容:
>ha.cf 清空ha.cf 文件,增加以下内容
debugfile /var/log/ha-debug #该文件保存heartbeat的调试信息 logfile /var/log/ha-log #heartbeat的日志文件 logfacility local0 #告诉heartbeat记录那些syslog keepalive 2 #心跳的时间间隔,默认时间单位为秒 deadtime 30 #超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。 warntime 10 #超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。 initdead 60 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至 少为deadtime的两倍。 udpport 694 #设置广播通信使用的端口,694为默认使用的端口号。 ucast eth0 192.168.31.100(slave的ip) #设置单播通信所使用的网络接口卡。组播的话设置为bcast auto_failback on #heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从 节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。 node master node slave #haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等。其配置语句格式如下: node-name network-config 其中node-name指定双机系统的主节点,取值必须匹配ha.cf文件中node选项设置的主机名中的一个,node选项设置的另一个主机名成为从节点 。 network-config用于网络设置,包括指定集群IP、子网掩码、广播地址等。resource-group用于设置heartbeat启动的服务,该服务最终由双机 系统通过集群IP对外提供。 ping 192.168.31.1(选择的是网关) #用来测试网络连接。 respawn hacluster /usr/lib/heartbeat/ipfail #指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常 用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。
7. 把主上的三个配置拷贝到(slave)上:
cd /etc/ha.d/
scp authkeys ha.cf haresources slave:/etc/ha.d/
8. 到从上(slave) 编辑ha.cf
vi /etc/ha.d/ha.cf //只需要更改一个地方
ucast eth0 192.168.31.100 改为 ucast eth0 192.168.31.166
9. 启动heartbeat :
先主,后从
service heartbeat start
10. 检查测试
ifconfig 看是否有 eth0:0
ps aux |grep nginx 看是否有nginx进程
为了能明确的看出效果
在master 上添加
echo "111111111111111master" >/usr/share/nginx/html/index.html
在slave 上添加
echo "22222222222222slave" >/usr/share/nginx/html/index.html
在浏览器上输入 192.168.31.80/index.html
11. 测试1
master 上故意禁ping
iptables -A INPUT -P ICMP -J DROP
在浏览器上输入 192.168.31.80/index.html
iptables -D INPUT -P ICMP -J DROP (去掉规则)
在浏览器上输入 192.168.31.80/index.html
12. 测试2
master 上停止heartbeat服务
service heartbeat stop
在浏览器上输入 192.168.31.80/index.html