heartbeat高可用实践
1.heartbeat的简介
Heartbeat是Linux-HA项目中的一个组件,Linux-HA的全称是High-Availability Linux,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(reliability)、可用性 (availability)和可服务性(serviceability)(RAS)的群集解决方案.
Heartbeat提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等.
Linux-HA的官方网站: http://www.linux-ha.org
Heartbeat集群必须的硬件:节点服务器、网络和网卡、共享磁盘
注意:
节点切换是服务器级别的,服务故障不会导致切换。
切换的条件:
1.服务器宕机
2.heartbeat服务本身故障
3.心跳连接故障
心跳连接:
1.串口电缆(距离不能太远)
2.以太网网卡直连
3.以太网电缆通过交换机
配置文件(主要有3个)
1.密钥文件authkeys,权限600
2.heartbeat服务配置ha.cf
3.资源管理配置文件haresources
网络拓扑图如下
2.安装配置
1.关闭selinux,防火墙
2.配置/etc/hosts,保证每个节点一样
3.配置主机互信
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
ssh-copy-id
4.节点时间同步
/usr/sbin/ntpdate 10.25.1.21
5.安装heartbeat
heartbeat-2.1.4-12.el6.x86_64.rpm
heartbeat-devel-2.1.4-12.el6.x86_64.rpm
heartbeat-pils-2.1.4-12.el6.x86_64.rpm
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
heartbeat-gui-2.1.4-12.el6.x86_64.rpm
避免依赖包问题,建议用yum localinstall安装
6.配置,节点配置文件保持一致
将配置模板文件拷贝到 /etc/ha.d/ 目录下
cp -p /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} /etc/ha.d/
编辑authkeys,权限需设为600
authkeys文件用于设定heartbeat的认证方式,共有三种可用的认证方式:crc、md5和sha1,三种认证方式的安全性依次提高,但是占用的系统资源也依次增加。
chmod 600 authkeys
编辑haresources
node1 IPaddr::10.80.5.254/24/eth0 httpd
编辑ha.cf
3.测试
case1:
httpd
编辑haresources
node1 IPaddr::10.80.5.254/24/eth0 httpd
case2:
在另外一台机10.28.1.104上搭建NFS server
[root@center ~]# showmount -e
Export list for center:
/tmp 10.80.4.0/24
nfs+httpd
编辑haresources
node1 IPaddr::10.80.5.254/24/eth0 Filesystem::10.28.1.104:/tmp::/tmp::nfs httpd
4.图形界面
连接图形界面需要输入节点的用户名和密码,安装的时候自动建了一个hacluster的用户,设置密码就可以连接了。
echo "hacluster" | passwd --stdin hacluster
修改ha.cf配置文件,启用crm功能,表示资源配置交给crm管理,CRM: Cluster Resources Manager,CRM与Resources并不兼容,如果ha.cf中定义了CRM,HA服务不会去读取/etc/ha.d/haresources配置文件
vim /etc/ha.d/ha.cf
crm on
使用自带的ha_propagate脚本同步配置文件
/usr/lib/heartbeat/ha_propagate
启动图形管理界面
hb_gui
对付HA系统“裂脑”的对策,大概有以下几条:
1)添加冗余的心跳线,例如双线条线。尽量减少“裂脑”发生机会。
2)启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。
但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。
现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。
于是有人在HA中设计了“智能”锁。即,正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁,平时就不上锁了。
3)设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,
不通则表明断点就出在本端,不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,
那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。
--------------------------------------------------------------------------------------------------
Linux-HA 高可用开源方案 Keepalived VS Heartbeat 的选择
两款高可用开源方案: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。