什么是高可用集群:
所谓高可用集群,就是在出现故障时,可以把业务自动转移到其他主机上并让服务正常运行的集群构架
> 高可用集群的构架层次:
各层次实现的软件和对应关系
RHEL OR CentOS高可用集群解决方案:
应用方式:
- 1) 做前端负载均衡器的高可用:keepalived
- 2) 做大规模的高用集群:corosync(cman)+pacemaker
资源隔离:解决资源征用问题
+ 1. 场景一:
当集群中分裂出两组子集群,并且两个子集群之间并不能通信时, 两个子集群会发生资源征用。如果两集群同时征用后端存储系统,则会造成灾难性的文件系统崩溃。
为了解决此问题,集群系统引入了投票机制,只有拥有半数以上合法票数的集群才能存活,否则退出集群系统。
votes: 投票权
total: 总票数
quarum: 满足法定人数,半数以上
+ 2. 场景二:
如果集群为偶数时,如果集群分裂,两边可能都掌握相等的票数,因此集群系统不应该为偶数,如果是偶数则需要一个额外的ping节点参与投票。
+ 3. 当分裂的票数不足集群退出集群系统后,为了保证它们永远不会征用资源需要STONITH机制来进行资源隔离。
STONITH具体来说,就是通过硬件设备,使得退出的主机重启或者关机。或者通过交换机阻断推出集群主机的向外通信和资源通信网络
<img data-w="" data-ratio="0.5755395683453237" data-type="png" id="c1452782766264" class="" src="http://mmbiz.qpic.cn/mmbiz/IP70Vic417DO0k61G40AMP5XpXibZr5Oib9b4BtkthvibELCujY2Ia3yzXI4IRjBhE3sB2lQU8lHU1IqlAImkEs6HA/0?wx_fmt=png" title="1452664172306901.png" alt="brain split.png" style="width: 916px;height: 516px" _src="http://mmbiz.qpic.cn/mmbiz/IP70Vic417DO0k61G40AMP5XpXibZr5Oib9b4BtkthvibELCujY2Ia3yzXI4IRjBhE3sB2lQU8lHU1IqlAImkEs6HA/0?wx_fmt=png" height="516" width="916">
HA集群的工作模型:
资源转移的限定方式:
如果节点不再成为集群节点成员时,如何处理运行于当前节点的资源:
stoped:直接停止服务
ignore: 忽略,以前运行什么服务现在还运行什么。
freeze:事先建立的连接,接续保持,不再接收新的请求。
suicide: kill掉服务。
一个资源刚配置完成时,是否启动。
target-role: 目标角色,可以为启动,也可以为不启动。
资源代理类型(RA):
heartbeat legacy: 传统类型
LSB: /etc/rc.d/init.d/ 下面的服务脚本
OCF:
STONITH: 专门用来实现资源隔离的
资源类型:
primitive, native : 主资源,只能运行于一个节点。
group: 组资源
clone: 克隆资源,所有节点都运行的资源,首先是主资源。
通常为STONITH资源, Cluster filesystem, 分布式锁
1) 最多运行的最大数。 总clone数
2) 每一个节点上最多运行几个。
master/slave: 主从资源内容,只能克隆两份,主的能读能写,从的不能做任何操作
配置前所需要的准备:
# ssh-keygen -t rsa
# ssh-copy-id root@192.168.253.134
4. 两台主机的hosts地址配置如下
192.168.253.133node1.playground.com 192.168.253.134node2.playground.com
安装heartbeat2, 由于heartbeat-pils在CentOS 6.5 后已经被cluster-glue取代了,因此需要手动解决依赖关系
# yum install perl-TimeDate net-snmp-libs libnet PyXML
# 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
把两个httpd服务做成高可用
配置heartbeat的配置文件
把配置文件的范例复制到,配置文件的目录中
# cp /usr/share/doc/heartbeat-2.1.4/ha.cf /etc/ha.d/ha.cf
2. 编辑配置文件
# vim /etc/ha.d/ha.cf
logfile /var/log/ha-log
keepalive 2
deadtime 15
warntime 10
udpport 694
mcast eth0 225.0.130.1 694 1 0
auto_failback on
ping 192.168.253.2
node node1.playground.com
node node2.playground.com
# scp /etc/ha.d/ha.cf node2.playground.com:/etc/ha.d/ha.cf
配置资源
把haresource范例复制到配置文件目录中
# cp /usr/share/doc/heartbeat-2.1.4/haresources /etc/ha.d/
# vim /etc/ha.d/haresources 添加如下内容,意思是服务首先运行在node1上,后面配置vip和服务资源
node1.playground.com 192.168.253.100/24/eth0 httpd
把资源配置文件复制到node2
# scp /etc/ha.d/haresources node2.playground.com:/etc/ha.d/haresources
配置认证文件:
# cp /usr/share/doc/heartbeat-2.1.4/authkey /etc/ha.d/authkey
# chomd 600 /etc/ha.d/authkey
# openssl rand -hex 10
8499636794b07630af98
# vim /etc/ha.d/authkey
auth 2
#1 crc 2 sha1 8499636794b07630af98
#3 md5 Hello!
# scp /etc/ha.d/authkey node2.playground.com:/etc/ha.d/authkey
安装httpd服务:
这里不详细说了,就是确保服务正常,并且保证开机不能自动启动,最后关掉服务。让heartbeat自己控制服务启动。
启动集群服务:
# service heartbeat start
# service node2.playground.com heartbeat start
配置集群服务使得两个node共享后端nfs文件系统的资源,需要开一台新主机192.168.253.135,导出/var/www/share文件夹
# vim /etc/exports
/var/www/share 192.168.253.0/24(rw)
# service nfs start
# echo 'web from share' > /var/www/share/index.html
# chown apache /var/www/share/index.html
调着haresource文件
# vim /etc/haresources
node1.playground.com 192.168.253.100/24/eth0 Filesystem::192.168.253.135:/var/www/share::/var/www/html::nfs httpd
同步到两个节点
# scp /etc/haresources node2.playground.com:/etc/haresources