HA(High available)高可用性集群(双机热备)
1.理解:两台服务器A和B ,当A提供服务,B闲置待命,当A服务宕机,会自动切换至B机器继续提供服务。当主机恢复正常后,按照使用者设定的自动或手动切换到主机上运行,数据一致性通过共享存储系统解决。
2.实现该功能的软件有:Heartbeat , keepalived(具有负载均衡的能力)
3.结构图
HA-Heartbeat
实验:以hearbeat为例,来做HA集群,并把nginx服务作为HA对应的服务
关闭防火墙:iptables -F service iptables save
关闭selinux: setenforce 0 ,getenforce 查看,vim /etc/selinux/conf 修改,保存退出。
配置网卡:
master --eth1 192.168.2.105
slave --eth1 192.168.2.106 eth1作为心跳线 作用:探测对方主机服务是否存活。
master --eth0 192.168.1.105
slave --eth0 192.168.1.106 eth0为流动ip 又称VIP 对外提供服务。
操作:A:
hostname =master
vim /etc/sysconfig/network
HOSTNAME=master
vim /etc/hosts
192.168.1.105 master
192.168.1.106 slave
操作:B:
hostname =slave
vim /etc/sysconfig/network
HOSTNAME=slave
vim /etc/hosts
192.168.1.105 master
192.168.1.106 slave.
A,B同时安装epel扩展源 (安装扩展源后yum报错解决linux 小记[2])
wget www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm
rpm -ivh epel-release-6-8_64.noarch.rpm
A,B同时安装hearbeat 及扩展libnet 和准备测试的nginx
yum install -y heartbeat* libnet nginx
A机:切换到安装目录拷贝文件到/etc/ha.d下
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
切换目录到/etc/ha.d编辑配置
cd /etc/ha.d/
vim authkeys
auth 3 验证级别
3 md5 Hello! 加密方式
并且赋予600读写权限给root
chmod 600 authkeys
vim haresources
master 192.168.1.106/24/eth0 nginx [流动ip 即vip master 主机名 nginx 服务,可以是其他服务。]
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 eth1 192.168.2.106 对方ip
auto_failback on
node master
node slave
ping 192.168.2.1
respawn hacluster /usr/lib64/heartbeat/ipfail 如果是32系统切记lib64改为lib
ha.cf 文件详解
debugfile /var/log/ha-debug 故障调试log
logfile /var/log/ha-log log文件
logfacility local0 日志级别
keepalive 2 探测周期 2s
deadtime 30 检测死亡时间 30s
warntime 10 启动警告记录时间 10s
initdead 60 重启预留时间60s
udpport 694 心跳线通讯端口
ucast eth0 192.168.0.161 对方的ip ,也可使用 bcast 即广播的方式寻找 ,最好串口线或者使用单独网卡
auto_failback on 从机启动后探测到主机存活是否返回设置
node master
node slave 两个node机器
ping 192.168.0.1 仲裁者 路由器或者交换机来充当
respawn hacluster /usr/lib/heartbeat/ipfail 防止进程死亡 从新拉起进程 64位系统需要改一下/lib 位lib64 不然服务无法启动,切记。
拷贝编辑的此三个文件到第二台服务器B机的/etc/ha.d目录下
scp authkeys ha.cf haresources slave:/etc/ha.d/
修改B机器中的ha.cf
vim /etc/ha.d/ha.cf
修改:ucast 项为:ucast eth1 192.168.2.105 保存退出。
环境测试
A主机nginx
echo "this is heartbeat server master "1111"" > /usr/share/nginx/html/index.html
B主机nginx
echo "this is heartbeat server slave "2222"" > /usr/share/nginx/html/index.html
查看AB 机器nginx启动情况
先启动A机master heartbeat服务 后启动B机slave heartbeat
/etc/init.d/heartbeat start
查看nginx启动情况
ps -aux|grep nginx
注释:(启动heartbeat后nginx会自动启动无需手动,B机器默认nginx是不会启动的)
测试1
客户端浏览器访问192.168.1.106 [流动ip (vip)]
浏览器显示“this is heartbeat server master 111111”正常
测试2
介于该心跳线是基于icmp协议的服务,所以我们屏蔽主机A的ping服务后,B机中heartbeat服务无法探测到A机器时,B机器认为A机器已故障(可从heartbeat日志中查看到),于是B机器即刻启动自身nginx服务接管A机器工作
实验.在A服务器主机上添加一条防火墙规则,拒绝ping
iptables -A INPUT -p icmp -j DROP
客户端浏览器访问192.168.1.106
览器显示“this is heartbeat server slave 2222”正常
测试3.
当我们删除A机器刚才添加的防火墙规则,B机器探测到A机器存活后,读取自身/etc/ha.d/ha.cf 文件auto_failback on项, 于是自动切换到A机器,停止自身ngingx服务。此时服务有A提供。测试如下
实验:删除A机器刚才添加的防火墙规则
iptables -D INPUT -p icmp -j DROP
浏览器显示“this is heartbeat server master 111111”正常
此次测试可从eth0 ,nginx , heaartbeat日志等看到相同的情况。日志:/var/log/ha-log.