前言
HA: 高可用集群
实现的方式有以下两个大分类:
vrrp: keepalived
AIS: hearbeat, OpenAIS, corosync/pacemaker, cmam/rgmanager(conga) RHCS
在高可用集群中主要故障:
硬件故障:
- 设计缺陷
- 使用过久,服务器自然损坏
- 人为所致服务器故障
软件故障:
- 设计缺陷
- bug
- 人为失误操作
计算高可用集群的可用性
A=平均无故障时间/(平均无故障时间+平均修复时间)
A=MTBF/(MTBF+MTTR)
取值范围: 0 < A < 1
MTBF: Mean Time Between Failure
MTTR: Mean Time To Repaier
AIS的三个层次以及实现方式
讯息层(Messaging Layer)
主要功能:用于在各节点之间传递心跳信息,也称为心跳层。节点之间传递心跳信息可以通过广播,组播,单播等方式。(传递心跳和事务,处在最底层) *实现方式:*`heartbeat v/1~3` `corosync` `cman`
集群资源管理器(Cluster Resource Manager(CRM))
主要功能:真正实现集群服务的层。每个节点都运行一个资源管理器(Cluster Resource Manager),为实现高可用提供核心组件,包括资源定义,属性等。 *实现方式:*
heartbeat v1 haresoureces (配置接口:配置文件haresoureces)
heartbeat v2 crm (在每个节点运行一个crmd(5560/tcp)守护进程,有命令行接口 crmsh;GUI hb_gui)
heartbeat v3 + pacemaker (配置接口:crmsh,pcs; GUI:kawk(suse), LCMC, pacemaker-gui)
rgmanager (配置接口:cluster.conf,system-config-cluster,conga(webgui),cman_tool,clustat)资源代理(Resource Agent)
主要功能:资源代理层,集群资源代理,能够管理本节点上的属于集群资源的启动,停止和状态信息的脚本。 *实现方式:*
hearbeat legacy: /etc/ha.d/haresources.d/目录下的脚本;
LSB: /etc/rc.d/init.d/ 目录下的脚本;
OCF:Open Cluster Frameworkprovider:
STONITH:
Systemd:systemctl
组合方式
heartbeat v1 (haresources)
heartbeat v2 (crm)
heartbeat v3 + pacemaker
corosync v1 + pacemaker (plugin 插件) # 以插件方式运行
corosync V2 + pacemaker (standalone service) # 以一个独立的服务运行
cman + rgmanager
cman + packmaker
corosync v1 + cman + packmaker
投票系统
由于某个节点因为软硬件故障导致服务中断,此时其他节点将会争夺资源,发生脑裂现象。此时需要投票系统来顶一个主节点,对资源进行隔离等。
隔离
STONITH: shoot the other node on then head(直接停掉节点,kill) 节点级别隔离
Fence:资源级别隔离
资源倾向性
vote system
少数服从多数: quorum
with quorum:拥有法定票数
without quorum:不拥有法定票数
节点健康检测:
ping Node
qdisk # 仲裁是被
!> qdisk
: 多个节点每隔一段时间往通一个仲裁设备上写入数据,节点之间根据对方是否有写入数据判断对方是否在线。
资源类型/属性
资源类型
primitive:主资源,原始资源;在集群中只能运行一个实例;
clone:克隆资源,在集群中可以运行多个实例;
匿名克隆、全局唯一克隆、状态克隆(主动,被动)
multi-state(master/slave):克隆资源的特殊实现:主/从(多状态资源)
group:组资源,特点是共进退,启动一起启动,相反同理
资源属性
priority:优先级
target-role:目标角色,started,stopped,master;
is-managed:是否允许集群管理此资源;布尔值
resource-stickiness:资源粘性;定义资源留在当前节点的粘性
allow-migrate:是否允许迁移;
资源粘性
表示资源乐意留在那个节点,用约束:score
实现
位置约束:资源对节点的倾向性;
*取值范围*: **(-∞,+∞)** 当值为负无穷时:表示有可选择的节点,就不会留在当前节点; 当值为正无穷时:表示资源乐意留在当前节点; > 任何值+无穷大=无穷大 > 任意值+负无穷大=负无穷大 > 无穷大+负无穷大=负无穷大
排列约束:资源彼此间是否运行于同一个节点的倾向性;
**(-∞,+∞)** 无穷大:必须在一起 负无穷大:不能在一起(一个节点)
顺序约束:多个资源启动顺序依赖关系
**(-∞,+∞)**