首页 > 代码库 > HA-集群(High available)高可用性集群(双机热备)菜鸟入门级

HA-集群(High available)高可用性集群(双机热备)菜鸟入门级

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.


 

AB同时安装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

AB同时安装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协议的服务,所以我们屏蔽主机Aping服务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.

 

HA-集群(High available)高可用性集群(双机热备)菜鸟入门级