一、HA集群的开源实现方案
1.Message层
1、hearbeat:主要有3个版本,v1和v2这2个版本和CRM集成在一起,v3版中CRM从heartbeat中独立出去,叫做pacemaker
2、corosync:OpenAIS为了展示一个集群应该具有什么样的功能而研发的实验性质的项目,但随着发展受到更多的青睐,最后从OpenAIS中独立出来
3、cman:RedHat研发,属于早期在corosync诞生之前RedHat在自己的企业版Linux系统上提供的解决方案
4、keepalived:上述三者实现方法是基于OpenAIS框架标准,而keepalived自己是基于VRRP协议实现心跳功能,专用于LVS集群
2.CRM层
1、haresources:heartbeat v1自带
配置方式:配置文件,文件名为haresources
2、crm:heartbeat v2自带,在各节点运行一个crmd守护进程,监听在TCP 5560端口
配置方式:命令行:crmsh命令;或者GUI接口:hb_gui
3、rgmanager:RedHat研发,早期和cman配合使用
配置方式:配置文件,cluster.conf(xml);命令行:clustat、cman_tool等;GUI接口:conga(luci+ricci)、system-config-cluster
4、pacemaker:在heartbeat v3版后作为独立项目,可以单独运行或者以插件运行
配置方式,命令行:crmsh(Suse研发)、pcs(RedHat研发),CentOS 6.4后默认只提供pcs;GUI接口:hawk(Suse研发)LCMC、pacemaker-gui;pacemaker功能比rgmanager强大
3.RA:reosurce agent
1、heartbeat legacy:heartbeat早期的传统型RA,通常位于/etc/ha.d/haresources.d/目录下
2、LSB:Linux Standard Base,位于/etc/init.d/下的脚本,至少接受4个参数,{start|stop|restart|status}
3、OCF:Open Cluster Framework,这是一个开放框架,有很多不同的脚本提供者
4、systemd:通过systemctl命令实现资源管理
5、STONITH:专用于实现调用STONITH设备功能的资源,通常为clone类型
4.组合方式
heartbeat v1+haresources
heartbeat v2+crm(如果你是喜欢老古董,恋旧,可以用v1和v2)
hearbeat v3+pacemaker
cman+rgmanager
corosync+pacemaker(目前最常用)
在RedHat系统中,红帽官方整合形成自己的一套集群管理方案RHCS:Red Hat Cluster Suite红帽集群套件
RHEL5/6:组合方式为cman+rgmanager+conga(luci+ricci)
RHEL6还提供corosync v1+pacemaker,该场景下pacemaker是作为插件运行;而corosync v1版没有投票系统,所以有人就把cman拿来作为corosync的插件来使用,即corosync v1+cman+pacemaker,这种方式过于复杂
RHEL7:corosync v2+pacemaker,corosync在v2版中增加了投票系统,功能也更强大,所以cman从此退出江湖
二、配置高可用集群
以2节点web集群为例,集群资源有浮动IP、httpd服务、页面文件;这里为了演示方便就不使用页面文件,使用网关192.168.0.1作为仲裁
系统环境:CentOS 6.9 内核版本2.6.32
IP地址(主机名):192.168.0.106(node1.centos6.com)、192.168.0.107(node2.centos6.com)
浮动IP:192.168.0.108
1.配置集群的前提条件
1、各节点时间必须同步,使用crontab配置时间同步
*/3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null
2、节点之间需要通过主机名互相通信,必须实现主机名解析,hosts文件中配置的主机名必须和hostname命令显示的保持一
编辑/etc/hosts文件,添加主机名解析
3、考虑是否会用到仲裁设备
4、建议各节点的root用户可以通过基于秘钥认证
注意:集群服务中的资源,一定不能开机自启动,因为它们将由CRM管理
2.使用heartbeat v1版演示高可用集群
安装包下载链接:https://pan.baidu.com/s/1C6v5lk78F8QDOkWtGCvZ4g
2.1.安装依赖包
yum -y install net-snmp-libs libnet PyXML libtool-ltdl
2.2.安装heartbeat程序
rpm -ivh heartbeat-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
安装后,将配置文件拷贝到对应目录下
cp /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresources} /etc/ha.d/
2.3.修改配置文件
heartbeat的配置文件在/etc/ha.d/目录下,要使用到3个文件:
(1)ha.cf,主配置文件,定义各节点上的heartbeat和HA集群的基本属性
配置文件内容
debugfile /var/log/ha-debug #debug级别日志文件
logfile /var/log/ha-log #普通日志文件
keepalive 1 #每隔1秒发送一次心跳
deadtime 20 #20秒探测不到心跳,就认为节点故障
warntime 10 #10秒探测不到心跳,警告节点出现故障
initdead 120 # 从第一个节点启动到最后一个节点启动的时间期限,不要设置太小,否则还没等最后一个节点启动,集群收不到该节点的心跳进而认为最后一个节点故障
udpport 694 #heartbeat启动后监听在694端口
mcast eth0 225.23.190.1 694 1 0 #使用多播传输,通过eth0网卡向225.23.190.1这个地址,694端口发送心跳信息,1和0代表多播报文的TTL和LOOP值。高可用场景下多播报文不允许传递到一个节点后再传输到其他主机,也不允许循环传递,所以TTL设置为1,LOOP设置为0
auto_failback on #开启故障转回,即故障节点修复之后将资源重新移动回该节点运行
node node1.centos6.com
node node2.centos6.com #以上2个node配置指定集群中有2个节点,node1.centos6.com和node2.centos6.com两个主机
ping 192.168.0.1 #指定仲裁网关节点
compression bz2 #指定心跳报文的压缩算法
compression_threshold 2 #指定心跳报文达到2KB才进行压缩
(2)authkeys,集群内节点之间传递消息时使用的加密算法和密钥,这个文件权限必须设置为600
chmod 600 /etc/ha.d/authkeys
配置文件内容
auth 2 #表示启用2号加密算法
#1 crc
2 sha1 hello #使用sha1加密算法,密钥为hello,实际中要增加复杂度,不建议用hello这么简单的密钥
#3 md5 Hello!
(3)haresources,为heartbeat v1版提供的配置接口,v1版专用的配置文件
配置文件内容
node1.centos6.com 192.168.0.108/24/eth0/192.168.0.255 httpd #表示node1.centos6.com为集群主节点,集群资源有浮动ip地址192.168.0.108和httpd服务,其中192.168.0.108将配置在eth0网卡上,24位掩码,广播地址为192.168.0.255。并且资源的左右顺序决定了资源的排列约束,所以ip地址启动在先
2.4.补充配置
对于网卡,使用ifconfig命令,如果输出中有MULTICAST字段,则表示开启多播。如果没有开启多播,使用命令
ip link set eth0 multicast on
开启多播,off会关闭
在2个节点上安装httpd,并在/var/www/html下编辑index.html文件,两个节点的文件内容不同以示区别。httpd不要启动并且关闭开机自启动。
为避免防火墙和selinux的干扰,建议关闭。
2.5.启动heartbeat
在两个节点都启动heartbeat,/etc/init.d/heartbeat start
浮动ip地址192.168.0.108配置在node1上,并且在node1上启动httpd服务监听在80端口
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB5EMrpnTysmaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL2kTOyQTOzIjMwEjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
查看node1节点的ha-log日志,可以看到启动组播地址和ping节点,配置浮动IP和启动httpd等集群资源的全过程
在浏览器访问浮动ip地址192.168.0.108
模拟node1节点出现故障,停止heartbeat,集群资源转移到node2节点
继续访问192.168.0.108,说明node1故障后,node2接管了服务
在node2节点查看/var/log/ha-log日志,可以看到集群资源转移到node2节点并启动,同时宣布node1节点dead
恢复node1节点,启动heartbeat,由于配置了failback,所以集群资源又回到node1节点