天天看点

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群

一、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端口

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群

查看node1节点的ha-log日志,可以看到启动组播地址和ping节点,配置浮动IP和启动httpd等集群资源的全过程

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群

在浏览器访问浮动ip地址192.168.0.108

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群

模拟node1节点出现故障,停止heartbeat,集群资源转移到node2节点

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群

继续访问192.168.0.108,说明node1故障后,node2接管了服务

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群

在node2节点查看/var/log/ha-log日志,可以看到集群资源转移到node2节点并启动,同时宣布node1节点dead

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群

恢复node1节点,启动heartbeat,由于配置了failback,所以集群资源又回到node1节点

高可用集群2 HA的实现方案和heartbeat初步使用一、HA集群的开源实现方案二、配置高可用集群