在高可用集群中,各节点之间通过心跳网络探测对方是否宕机,而各节点都运行一个进程,主节点通过这个进程不停的向各自的对等节点发送自己的心跳信息,这个进程(软件)就叫做高可用集群的心跳信息传递层,也叫集群事务信息传递层,如果有多个节点,就通过组播(组播有一组特定的网络)来传递心跳信息.而心跳信息仅仅只能检测主机是否在线,不能检测是否有运行指定的服务,所以需要一个类似调度器之类的组件,检测各节点的心跳信息,以及当一个节点挂了的时候,可以自动把其他备用节点设置为可用状态,当有多个节点的时候,应该选择哪个节点启动等,就叫集群事务决策过程.而一个应用程序自己能够自己利用底层心跳信息传递层的功能完成集群事务决策层的软件叫做ha_aware,但是这种软件的开发很困难.并且httpd,vsftp等应用程序并没有这个软件,因此,就有了另外一个事务决策的软件,他也是需要在每个节点安装的一个程序,这个应用程序自身是一个公共功能,他利用底层心跳信息传递层的功能完成集群事务决策层,他能将故障的节点踢掉,把重新上线的节点添加回来,并且设定节点的主备,节点的优先级,节点的分组等功能,选择管理节点,这个管理节点可以收集所有节点的信息,以及服务运行在那个节点上,优先启动哪个节点等.这个管理节点就叫DC,如果DC挂了,就先推选DC,而不是先抢占资源.每个节点的最基本组成是资源,(如:vip,httpd,web),而这些个资源的组合才是这个节点的服务.而与管理节点平行的其他节点的所有这一层叫CRM,集群资源管理器.而执行集群资源管理的软件叫RA(resource agent),资源代理工具,他接受4个参数{start|stop|status|restart}.status状态是做什么的呢?running和stopped,在高可用集群中,不仅节点会出故障,资源也会出故障.;首先,当节点故障时,就failover(失效转义,故障转移).一旦故障的节点修复成功,并且需要转回就failback(失效转回,故障转回),
如果每个资源调度使用CRM,CRM就太累了,所以在CRM的层次上又有一层叫LRM,专门负责本地资源调配管理的,如下图所示:
各层常用软件:
Messaging Layer:
heartbeat v1,v2,v3
corosync:OpenAIS
cman:红帽特有的,OpenAIS早期的方式实现的
CRM:
heartbeat v1:haresources,只能用在heartbeat上,配置接口的一个配置文件,haresources
heartbeat v2: crm,各节点均运行进程crmd,客户端crm,命令也是crm
heartbeat v3:pacemaker:配置接口:
CLI:crm(SuSE),rehat6.4以后,接口是pcs,这两个接口都不是crm的组成部分,而是第三方开发工具
GUI: hawk,LCMC,pacemaker-mgmt
cman:rgmanager
resource group manager:资源组管理器;故障转移域定义 Failover Domain
配置接口:RHCS,Redhat CLuster Suite
配置接口:Conga;完全声明周期的配置接口,所有过程通过conga都能完成,集群的安装,配置,启用
RA类型:
hearbeat legacy:hearbeat 的传统类型
LSB: /etc/rc.d/init.d/*下的所有文件
OCF:Open Cluster Framework 其他组织提供的套件
STONITH:节点隔离
keepalived:轻量级高可用,借助vrrp(虚拟地址冗余)完成IP地址资源扭转,并利用自己内部的脚本调用接口完成高可用功能.
keepalived+ipvs
keepalived+haproxy
RHEL OR CentOS高可用集群解决方案:
5:
自带: RHCS(cman+rgmanager)
选用第三方:corosync+pacemaker, heartbeat(v1或v2), keepalived6:
自带:RHCS(cman+rgmanager)
corosync+rgmanager
cman+pacemaker
heartbeat v3 + pacemaker
keepalived应用方式:
做前端负载均衡器的高可用:keepalived
做大规模的高用集群:corosync(cman)+pacemaker通告:当客户端通过路由进来,主节点故障后,资源都转到备节点了,本地通信都通过mac,在路由上的解析缓存都未失效,ip对应和mac,所以做地址解析时,先做地址通告,也就是欺骗式的地址解析.然后把资源转到备节点上,完成高可用.
注意:高可用集群中,任何高可用的服务都不能开机自起,而是由CRM启动的
资源争用:
当多个节点分隔成了两个网域,双方网域内的各个节点组成了两个高可用集群,而这两个集群会造成资源的争用,IP争用以及文件系统争用等,ip争用影响可能小点,但是文件系统争用会导致文件系统崩溃(可用集群文件系统解决),可能会损坏数据.一旦发生分裂(brain-split:脑裂),会立即把节点数大于半数的提升为新的集群,并且把节点数少的一方所有节点从集群中移除并停止其集群服务,依据是根据每个节点的投票数决定,这个移除停止的动作叫做资源隔离.
仲裁设备:ping-node,仲裁盘
当偶数个节点发生资源争用时,可以使用前端路由(只要能连上前端路由就认为他是正常的,如果两个节点都能连上路由呢?那就证明他们没有脑裂啊!)或磁盘(redhat解决方案)来判定节点是否正常,ping前端路由或向一个共享磁盘写数据,如果能ping通或可以向共享磁盘写入数据位,就说明节点是正常的.
资源隔离: stontih
仲裁并不能阻止非节点的主机占用资源,所以需要隔离
节点级别:硬件级别的隔离,拔电源 ,电源交换机,SAN交换机,HP ILO
STONITH
资源级别:路由交换的隔离等
提示:高可用集群一定要有隔离机制,只要判断对方不在线了,备用的上来之前就想把对方的kill掉
简单的示例:安装配置高可用集群
1.集群中各节点是靠节点名称通信的
集群中的每个节点的名称都得能互相解析,写在 /etc/hosts文件中,在集群中,hosts主机名的正反解析结果必须跟"uname -n"的结果一致;
更改各节点的主机名:(重要)
2.各节点上的时间必须要同步,使用网络时间服务器同步时间;同步各节点时间,笔者这里有时间服务器,就不搭建了
1: ntpdate 172.16.0.1
3.各节点间基于ssh密钥认证通信(非必须),但是多个节点时可以便于管理,笔者这里是两台主机,所以两台主机都要复制,让双方互信
安装hearbeat
1: 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
两个节点都需要安装
复制authkeys(各节点的相互认证文件,防止其他人随意加入我们的集群,这文件的权限很重要),ha.(集群的主要配置文件).haresources(hearbeat通过这个接口控制结群,也是集群的资源管理器)
添加认证方式
以上配置项在第二个节点中也必须有
配置ha.f
1: logfile /var/log/ha-log #程序自己记录日志的文件
2: #logfacility local0 #系统记录日志的文件,如果要开启此项,需要 /etc/rsyslog.conf 定义local0.* /path/to/somewhere
3: keepalive 2 #2秒探测一次心跳信息
4: deadtime 10 #10秒钟收不到对方的心跳信息,就把对方T了
5: warntime 4 #4秒钟收不到对方的心跳信息,开始警告
6: #initdead 120 #刚启动hearbeat时,过120才检测心跳信息
7: udpport 694 #监听端口
8: #bcast eth0 # Linux #广播
9: mcast eth0 225.0.21.1 694 1 0 #组播
10: #ucast eth0 192.168.1.2 #单播
11: auto_failback on #是否需要自动转回
12: node lidefu1 #节点1,也可以以空格分开写多个
13: node lidefu2 #节点2
14: ping 172.16.0.1 #ping-node,ping仲裁设备
15: #ping_group group1 10.10.10.254 10.10.10.253 ping#组冲裁设备
16: compression bz2 #压缩传递心跳信息
17: compression_threshold 2 #数据包大于2个字节才压缩
分别在两个节点安装httpd服务,这里就不演示了.
让两个节点的httpd服务停止,并设置不能开机自起
配置集群的配置文件haresources
1: vim haresources #配置该文件
2: lidefu2 172.16.21.2/24/eth0 httpd 只需加入这行
3: lidefu2 #表示这个资源优先运行在lidefu2这个节点上
4: 172.16.21.2/24/eth0/172.16.21.255 #这里可以设置4个参数,VIP,掩码,默认网卡,广播地址
5: hearbeat会到 /etc/ha.d/resource.d/去找集群资源代理来设置IP
6: httpd #hearbeat会到/etc/ha.d/resource.d/集群资源代理来设置httpd服务,如果没有就去 /etc/rc.d/init.d,只要能在这两个目录中找到就会start
复制authkeys,haresources ha.三个文件到 节点1的/etc/ha.d下
在lidefu2节点启动服务,lidefu1节点启动不了
尝试访问
停止lidefu2的heartbeat,看系统是否会自动切换到lidefu1节点
再次开启lidefu2节点,看看auto_failback on是否有效
把web文件放在一个nfs文件系统中
转载于:https://blog.51cto.com/lidefu/1398818