HA(high available)即高可用,又被叫做双机热备,用于关键性业务。简单理解就是,有两台机器A 和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。
下面我们使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。
一、准备工作
两个机器操作系统都是centos6.7,网卡eth0的ip分别为:
master 192.168.1.180
slave 192.168.1.181
二、基本操作(下面所有步骤都要在两个机器上操作 )
1、设置hostname,分别为master和slave
主上设置hostname
# hostname master //临时生效
或者
# vim /etc/sysconfig/network //永久生效
HOSTNAME=master
从上设置 hostname
# hostname slave //临时生效
或者
# vim /etc/sysconfig/network //永久生效
HOSTNAME=slave
2、关闭防火墙
主和从都清空iptables
# iptables -F
主和从都关闭 selinux
# setenforce 0
3、配置 hosts
# vim /etc/hosts //增加如下内容
192.168.1.180 master
192.168.1.181 slave
4、安装 epel 扩展源
# yum install -y epel-release
5、安装 heartbeat
# yum install -y heartbeat* libnet
6、安装nginx
# yum install -y nginx
三、在master上配置
1、拷贝三个配置文件
[root@master ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@master heartbeat-3.0.4]# cp authkeys ha.cf haresources /etc/ha.d/
2、配置authkeys文件
[root@master heartbeat-3.0.4]# cd /etc/ha.d/
[root@master ha.d]# vim authkeys //末尾修改为如下内容
[root@master ha.d]# chmod 600 authkeys //修改权限
3、配置haresources文件
[root@master ha.d]# vim haresources
找到:
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
修改为:
master 192.168.1.190/24/eth0:0 nginx
注:192.168.1.120为vip,即流动ip,对外显示。后面接掩码数和网口,以及服务名称。
多个IP配置
[root@master ha.d]# cd /etc/sysconfig/network-scripts/
[root@master network-scripts]# ls
ifcfg-eth0 ifdown-isdn ifup-aliases ifup-plusb init.ipv6-global
ifcfg-lo ifdown-post ifup-bnep ifup-post net.hotplug
ifdown ifdown-ppp ifup-eth ifup-ppp network-functions
ifdown-bnep ifdown-routes ifup-ippp ifup-routes network-functions-ipv6
ifdown-eth ifdown-sit ifup-ipv6 ifup-sit
ifdown-ippp ifdown-tunnel ifup-isdn ifup-tunnel
ifdown-ipv6 ifup ifup-plip ifup-wireless
[root@master network-scripts]# cp ifcfg-eth0 ifcfg-eth0\:0
[root@master network-scripts]# vim ifcfg-eth0\:0
DEVICE=eth0:1
HWADDR=00:0C:29:87:00:94
TYPE=Ethernet
UUID=a84aa7fe-40de-4b4d-8aea-10eacff7d20d
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.188
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
[root@master network-scripts]# /etc/init.d/network restart
~
4、配置ha.cf文件
[root@master ha.d]# echo "" > ha.cf //清空文件
[root@master ha.d]# 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.1.181
auto_failback on
node master
node slave
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
你系统是64还是32位的,如果是64要修改成/var/lib64这个路径
注:node一定不能写错,否则会报错。配置说明如下:
debugfile /var/log/ha-debug:该文件保存 heartbeat 的调试信息
logfile /var/log/ha-log:heartbeat 的日志文件
keepalive 2:心跳的时间间隔,默认时间单位为秒
deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60: 在某些系统上, 系统启动或重启之后需要经过一段时间网络才能正常工作,
该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。
udpport 694:设置广播通信使用的端口,694 为默认使用的端口号。
ucast eth0 192.168.1.181:设置对方机器心跳检测的网卡和ip。(在生产环境中一般都是设置独立的网卡,比如用串口连接两台机器)
auto_failback on:heartbeat 的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务, 遇到故障时把资源交给从节点并由从节点运行服务。 在该选项设为 on 的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
node 指定主和从,各占一行,主在上从在下。
respawn hacluster /usr/lib/heartbeat/ipfail:指定与 heartbeat 一同启动和关闭的进程,该进
程被自动监视,遇到故障则重新启动。最常用的进程是 ipfail,该进程用于检测和处理网络故障,需要配合 ping 语句指定的 ping node 来检测网络连接。如果你的系统是 64,请注意该文件的路径。
5、拷贝文件到slave上
[root@master ha.d]# scp authkeys haresources ha.cf slave:/etc/ha.d/
因为之前在主上配置过,所以直接拷贝过来修改即可。
四、在slave上配置
在/etc/ha.d/目录中,拷贝过来的三个文件只需改ha.cf文件即可
[root@slave ha.d]# vim ha.cf //只需修改下面一行
ucast eth0 192.168.1.180
五、启动heartbeat
# service heartbeat start
注:启动顺序:先主后从。只需启动heartbeat即可,不需手动启动nginx和vip
(1)master上用ifconfig -a命令查看eth0:0网卡已启动(一般都要十几秒后才会启动)
同时也可以查看到nginx服务已启动
(2)而在slave上查看不到eth0:0网卡信息以及nginx服务
六、测试
在主上故意禁掉ping
[root@master ha.d]# iptables -I INPUT -p icmp -j DROP
在master上查看不到eth0:0网卡信息以及nginx服务,而下slave上可以查看到,如下图
因为主从是通过ping命令来检测对方的,故由上可见实现了高可用。