1、HA集群介绍
HA即(high available)高可用,又被叫做双机热备,用于关键性业务。可以这样理解,有两台机器A和B,正常情况下,A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机继续提供该服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。
如图所示为一个HA架构,一个交换机下面有两台机器Web1和Web2,其中Web1为主节点,正常使它提供服务,而Web2备用节点是闲置的。Web1和Web2中间有一根心跳线,检查对方的存活状态。流动IP,也叫vip是对外提供服务的ip,正常情况下配置在Web1上,当Web1宕机后,Web2会自动配置该vip,对外提供服务。
2、前期准备
准备两台机器,一个使用了centos6.5,另一个centos6.3,系统版本不同不影响实验
网卡eth0 ip如下
master 192.168.1.165
slave 192.168.1.163
下面操作在两个机器上都要操作:
(1)设置hostname,分别为主master和从slave
主上设置:
# hostname master
# vim /etc/sysconfig/network
HOSTNAME=localhost.localdomain
修改为
HOSTNAME=master
从上设置
# hostname slave
# vim /etc/sysconfig/network
HOSTNAME=localhost.localdomain
修改为
HOSTNAME=slave
(2)关闭防火墙,主从都操作
# iptables -F
# service iptables save
# getenforce 0
# vim /etc/selinux/config
SELINUX=enforcing
修改为
SELINUX=disabled
(3)配置host,主从操作一样
# vim /etc/host
192.168.1.165 master
192.168.1.163 slave
3、heartbeat安装
主机和从机都需要安装heartbeat,同时需要libnet,主机从机执行同样的命令
# yum install -y heartbeat
# yum install -y libnet
如果没有包,则需要安装一个扩展yum源,heartbeat在epel源中。
# yum install -y epel-release
4、主节点配置
需要先将3个相关的配置文件放置在heartbeat的配置目录下
# cd /usr/share/doc/heartbeat-3.0.4/
# cp authkeys ha.cf haresources /etc/ha.d/
之后便可以开始修改配置文件了,先修改验证文件
# cd /etc/ha.d/
# vim authkeys # 用来验证,主从通过通信验证对方是否存活,需要加密
auth 3 # 此处打开,数字表示选择哪种加密方式
#1 crc # 最简单
#2 sha1 HI! # 最复杂
3 md5 Hello! # 处于中间等级的加密方式
# chmod 600 /etc/ha.d/authkeys
# 如果不修改权限,heartbeat启动不了
第二个配置haresources文件,只需要编辑一行。因为当前在ha.d目录下,直接vim。如果不是,用绝对路径或者cd
# vim haresources
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
#找到上面一行,改成下面,需要去掉#
master 192.168.1.186/24/eth0:0 nginx
# master是主的主机名;192.168.1.186是vip,/24指定网段,网卡eth0:0(这里采用了虚拟网卡);nginx提供服务,如果主宕掉,从启动。
最后一个配置ha.cf,里边基本全是注释,这里选择删掉重新写入,当前依旧在/etc/ha.d目录下
# > 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.1.163
auto_failback on
node master
node slave
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
配置说明:
debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息
logfile /var/log/ha-log:heartbeat的日志文件
logfacility local0 :日志级别
keepalive 2:心跳的时间间隔,默认单位秒
deadtime 30:超出该时间未收到对方节点的心跳,则认为对方死亡
warntime 10:超出该时间未收到对方节点的心跳,则发出警告并记录到日志
initdead 60:在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。最少为deadtime的两倍
udpport 694:设置广播通信使用的端口,694为默认端口号
ucast eth0 192.168.1.163:ucast指定对方ip,bcast形式寻找;eth0心跳检测自己的网卡,ip对方的ip
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点正常情况下占用资源运行所有服务,遇到故障把资源交给从节点由从节点运行服务。选项为on情况下,一旦主节点恢复运行,则自动获取资源并取代从节点运行服务。
node master:指定主
node slave:指定从
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的pingnode来检测网络连接。如果系统是64位,将地址中的lib改为lib64
然后安装一个nginx,用于后边测试
# yum install -y nginx
5、从节点配置
把主上的三个配置拷贝到从上,使用scp命令;并且只需要在从上修改ha.cf文件一个地方即可
# scp authkeys ha.cf haresources slave:/etc/ha.d/
# vim /etc/ha.d/ha.cf
ucast eth0 192.168.1.163改为ucast eth0 192.168.1.165
也安装一个nginx,用于后边测试
# yum install -y nginx
6、heartbeat测试
启动heartbeat,顺序很重要,先主后从
# service heartbeat start
检查测试(主),第一次会需要等待一段时间,耐心
# ifconfig
看是否有eth0:0
# ps aux | grep nginx
看是否有nginx进程
测试(1)
因为主从指间的心跳实质是通过ping来连通,so主故意禁掉ping,死掉
# iptables -D INPUT -p icmp -j DROP
如果失败,查看日志发现卡在这里不动
Dec 08 18:56:53 master heartbeat: [9590]: WARN: node 192.168.1.1: is dead
Dec 08 18:56:53 master heartbeat: [9590]: info: Link 192.168.1.1:192.168.1.1 dead.
Dec 08 18:56:53 master ipfail: [9619]: info: Status update: Node 192.168.1.1 now has status dead
harc(default)[10097]: 2016/12/08_18:56:53 info: Running /etc/ha.d//rc.d/status status
Dec 08 18:56:54 master ipfail: [9619]: info: NS: We are dead. :<
Dec 08 18:56:54 master ipfail: [9619]: info: Link Status update: Link 192.168.1.1/192.168.1.1 now has status dead
Dec 08 18:56:55 master ipfail: [9619]: info: We are dead. :<
Dec 08 18:56:55 master ipfail: [9619]: info: Asking other side for ping node count.
尝试解决方法
将从上的ha.cf配置文件中的ucast修改如下
bcast eth0
然后重新测试