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
# 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
查看日志
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