c4rt1y

HeartBeat实现高可用HA

0x01 简介

HA即(high available)高可用,又被叫做双机热备,用于关键性业务。简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器继续提供服务。常见的实现高可用的开源软件有 heartbeat 和 keepalived。
这样,一台 web 服务器一天24小时提供web服务,难免会存在web服务挂掉或服务器宕机宕机的情况,那么用户就访问不了服务了,这当然不是我们期望的。如果这样,有2台服务器,A对外提供 web 服务,B作为备用,如果A挂掉,那么B立刻替代A的位置去提供 web 服务,这样对用户来说是透明的。但是有个问题,服务器A的 ip 是10.0.0.100,服务器B的 ip 是 10.0.0.101,显然向用户提供A或B的ip地址是不可行的,因为用户总不能去切换ip来访问的吧。这时heartbeat或keepalived可以提供一个虚拟IP:10.0.0.102,用户只需要访问 10.0.0.102,当A提供服务时,VIP 会设置在A服务器上,当B提供服务时,VIP会设置在B服务器上,这样就可以让用户通过访问 10.0.0.102来获取web服务,即使A或B服务器切换也不影响用户的正常访问。

0x02 环境准备

#两台服务器,双网卡(centos6)
master 
	ech0  10.10.10.10
	ech1  20.20.20.10
	vip   10.10.10.100

node01 
	ech0  10.10.10.20
	ech1  20.20.20.20
	vip   10.10.10.100
##两台主机配置一样
#关闭防火墙
iptables -F
service iptables save
service iptables stop

#关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#设置hosts连接
cat > /etc/hosts << OFF
10.10.10.10 master
10.10.10.20 node01
OFF

#配置epel
yum install -y epel-release

#安装heartbeat 
yum install -y heartbeat* libnet nginx

0x03 master节点配置

#拷贝配置文件
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/


#增加如下内容
echo "auth 3" >> /etc/ha.d/authkeys
#设置权限
chmod 600 authkeys

#编辑haresources(将eth0设置多IP,master为主节点hostname,10.10.10.100为vip,/24为掩码为24的网段,eth0:0为vip的设备名,nginx为heartbeat监控的服务,也是两台机器对外提供的核心服务。)
echo  "master 10.10.10.100/24/eth0:0 nginx">> /etc/ha.d/haresources

#编辑
cat > /etc/ha.d/ha.cf << OFF
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 20.20.20.20
auto_failback on
node master
node node01
ping 20.20.20.2
respawn hacluster /usr/lib64/heartbeat/ipfail
OFF

#ha.cf说明文档
debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息。
logfile /var/log/ha-log:heartbeat的日志文件。
keepalive 2:心跳的时间间隔,默认时间单位为秒s。
deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
udpport 694:设置广播通信使用的端口,694为默认使用的端口号。
ucast eth1 20.20.20.20:设置对方机器心跳检测的网卡和IP。
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。

0x04 node01配置文档

#从master上复制到node01上
scp /etc/ha.d/authkeys /etc/ha.d/ha.cf /etc/ha.d/haresources slave:/etc/ha.d

#修改/etc/ha.d/ha.cf文件
ucast eth1 10.10.10.20 改为ucast eth1 10.10.10.10

0x05 启动顺序检测验证

配置完毕后,先master启动,后slave启动。
service heartbeat start

#在master和node01上看是否有接口 eth0:0
ifconfig

#在master和node01上看是否有nginx进程
ps aux | grep nginx

#主节点上故意禁ping(查看是否nginx存活)
iptables -I INPUT -p icmp -j DROP

#主节点停止heartbeat服务(查看是否nginx存活)
service heartbeat stop

#主节点master和从节点node01都down掉eth1网卡(查看是否nginx存活)
ifdown eth1

0x06 资料来源

阿铭第三期
http://www.cnblogs.com/liwei0526vip/p/6391833.html
GoTop