菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
118
0

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

原创
05/13 14:22
阅读数 1642

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

 

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

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

 

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

 

上半节课

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配置

启动网卡
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 3
#1 crc
#2 sha1 HI!    //sha1更安全
3 md5 Hello!

chmod 600 authkeys

 


vi haresources //加入

aming 192.168.31.110/24/eth0:0   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 2      //心跳检测间隔  单位:秒
deadtime 30     //认为死掉的时间 单位:秒
warntime 10     //不确定是否死掉 先发警告
initdead 60     //再次检测是否死掉 可以判断机器是否是重启的状况
udpport 694      //使用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

查看日志

less /var/log/ha-log

 

启动ipfail服务

 

 

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

less  /var/log/ha-log

 

tcpdump -nn -i eth1 not port 22

694 udp端口

icmp

 

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

 

从上运行下面语句

tail -f /var/log/ha-log

 

 

 

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

 

 

 

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


ifdown eth1


ifdown eth1

 

 

恢复 这时候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

iptables -I INPUT -s 192.168.21.1 -j DROP

 

 

 

注意:如果把从的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

发表评论

0/200
118 点赞
0 评论
收藏