centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

时间:2023-12-14 00:04:26

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

heartbeat是Linux-ha项目中的一个组件

http://linux-ha.org/wiki/Main_Page

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

一般服务器都有两个网卡或者都有串口,一个网卡专门心跳,或者用串口线 做心跳线 ,COM口串口不能设置ip

上半节课

heartbeat搭建

下半节课

heartbeat测试
主上停止heartbeat服务
测试脑裂 
两边都禁用ping仲裁

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务。 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置
当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。

下面我们使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。

试验准备:

eth0:业务网卡
eth1:心跳网卡

主服务器有两个资源 1、nginx服务  2、VIP

三个机器, 都是centos6.5,两个业务网卡eth0 ip如下:

aming :192.168.31.166
aming1 :192.168.31.100
仲裁 192.168.21.1

VIP:192.168.31.110

两个心跳eth1 ip如下,要能够互相ping通:
aming :192.168.21.166
aming1: 192.168.21.100

如何添加心跳网卡:复制eth0 -》eth1
然后uuid删除掉,mac地址删除掉,只配ip就行和掩码就行

心跳网卡不需要设置网关,因为它不需要上网

eth1配置

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

启动网卡
ifup eth1

下面操作1-5都是在两个机器上操作

1. hostname 设置好,分别为aming 和 aming1

2. 关闭防火墙 iptables -F;
关闭selinux: setenforce 0

3. vi /etc/hosts // 增加内容如下:
192.168.31.166 aming
192.168.31.100 aming1

4. 两个机器都安装epel扩展源:

yum install -y epel-release
#rpm -ivh 'http://www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm'

5. 两个机器都安装heartbeat / libnet

同时还需要安装libnet工具包,libnet是一个高层次的API工具(https://sourceforge.net/projects/libnet-dev/)
yum install -y heartbeat* libnet nginx

6. 主上(aming)配置
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources  /etc/ha.d/
cd /etc/ha.d
vi authkeys //加入

//验证加密方式,两台HA机器之间的暗号
auth
# crc
# sha1 HI! //sha1更安全
md5 Hello!

chmod 600 authkeys

vi haresources //加入

aming 192.168.31.110//eth0:   nginx  //指定虚拟vip 网段 虚拟网卡 aming这台机上的eth0已经有ip了,需要新建一个eth0:0  和承载HA的应用服务 ,注意要确保nginx已经在/etc/init.d/下,否则heartbeat会找不到nginx

vi ha.cf //改为如下内容:

debugfile /var/log/ha-debug    //高可用服务例如nginx 切换不了 启动不起来的调试信息
logfile /var/log/ha-log //日志
logfacility local0 //日志级别
keepalive //心跳检测间隔 单位:秒
deadtime //认为死掉的时间 单位:秒
warntime //不确定是否死掉 先发警告
initdead //再次检测是否死掉 可以判断机器是否是重启的状况
udpport //使用udp方式检测 udp端口号
ucast eth1 192.168.21.100 //ucast ip单播的形式只发送到指定ip,bcast 广播形式发送到所有机器 注意要写对方的ip和网卡
auto_failback on //主节点起来之后是否自动failback回去
node aming //主节点 写hosts是因为在ha.cf里只能写主机名不能写ip,主备都需要绑定hosts文件
node aming1 //从节点
ping 192.168.21.1 // 192.168.21.1为仲裁节点
respawn hacluster /usr/lib/heartbeat/ipfail //当启动heartbeat时同时启动ipfail来检测心跳 注意:要ls /usr/lib/heartbeat/ipfail 看一下是否有这个文件,还要注意如果是64位系统,可能在/usr/lib64/heartbeat/ipfail ,hacluster为启动heartbeat时的用户 ,也就是说ipfail和heartbeat都是用hacluster这个用户来运行

7. 把主上的三个配置拷贝到从上:
cd /etc/ha.d/
scp authkeys ha.cf haresources   aming1:/etc/ha.d/

8. 到从上(aming1) 编辑ha.cf
vi /etc/ha.d/ha.cf //只需要更改一个地方
ucast eth1 192.168.21.100 改为 ucast eth1 192.168.21.166

9. 启动heartbeat :
先stop nginx ,因为heartbeat 带动nginx启动 ,先主,后从(这里主上启动heartbeat会有点长,因为它要等从启动好heartbeat之后它才真正启动)
service heartbeat start

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

查看日志

less /var/log/ha-log

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

启动ipfail服务

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

ipfail是一个进程,它不会监听端口

less  /var/log/ha-log

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

tcpdump -nn -i eth1 not port 22

694 udp端口

icmp

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

10. 检查测试
ifconfig 看是否有 eth0:0
ps aux |grep nginx 看是否有nginx进程

11. 测试1
主上故意禁ping
iptables -I INPUT -p icmp -j DROP

主上运行下面语句

tail -f /var/log/ha-log

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

从上运行下面语句

tail -f /var/log/ha-log

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

12. 测试2
主上停止heartbeat服务
service heartbeat stop

13. 测试脑裂 为了保证不出现脑裂,一定要保证心跳线的可靠,单独网卡做心跳网卡,最好直连串口不经过交换机
主和从上都down掉eth1网卡


ifdown eth1

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课


ifdown eth1

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

恢复 这时候nginx和vip都在从上

ifup eth1

/etc/init.d/heartbeat restart  //重启主上的heartbeat服务,时间可能要1分钟

因为设置了auto_failback on,所以主重启完heartbeat服务之后会把nginx和vip  failback回来

ifup eth1

14、两边都禁用ping仲裁

iptables -I INPUT -s 192.168.21.1 -j DROP

tail -f /var/log/ha-log

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

iptables -I INPUT -s 192.168.21.1 -j DROP

centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课

注意:如果把从的heartbeat服务停止,那么主的heartbeat服务也会停止,nginx和vip都会停止

因为主从要保证HA必须两边的heartbeat服务是没有问题的

这也是主启动heartbeat服务慢的原因:先主,后从(这里主上启动heartbeat会有点长,因为它要等从启动好heartbeat之后它才真正启动)

扩展学习

关于heartbeat配置文件参考文档: http://blog.chinaunix.net/uid-20749043-id-1878328.html
heartbeat和keepalived比较 http://blog.csdn.net/yunhua_lee/article/details/9788433 http://zhengdl126.iteye.com/blog/1738012
DRBD工作原理和配置 http://502245466.blog.51cto.com/7559397/1298945


扩展阅读

高可用开源方案 Keepalived VS Heartbeat对比
http://www.kuqin.com/shuoit/20140623/340745.html

最近因为项目需要,简单的试用了两款高可用开源方案:Keepalived和Heartbeat。两者都很流行,但差异还是很大的,现将试用过程中的感受以及相关知识点简单总结一下,供大家选择方案的时候参考。

1)Keepalived使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat2.1.4后拆分成3个子项目,安装、配置、使用都比较复杂,尤其是出问题的时候,都不知道具体是哪个子系统出问题了;而Keepalived只有1个安装文件、1个配置文件,配置文件也简单很多;

2)Heartbeat功能更强大:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒换,基本没有管理功能;

3)协议不同:Keepalived使用VRRP协议进行通信和选举,Heartbeat使用心跳进行通信和选举;Heartbeat除了走网络外,还可以通过串口通信,貌似更可靠;

4)使用方式基本类似:如果要基于两者设计高可用方案,最终都要根据业务需要写自定义的脚本,Keepalived的脚本没有任何约束,随便怎么写都可以;Heartbeat的脚本有约束,即要支持service start/stop/restart这种方式,而且Heartbeart提供了很多默认脚本,简单的绑定ip,启动apache等操作都已经有了;

使用建议:优先使用Keepalived,当Keepalived不够用的时候才选择Heartbeat

f