B04-openstack高可用-pacemaker集群部署
在全部控制节点安装相关服务,以controller01节点为例;
pacemaker:资源管理器(CRM),负责启动与停止服务,位于 HA 集群架构中资源管理、资源代理层
corosync:消息层组件(Messaging Layer),管理成员关系、消息与仲裁,为高可用环境中提供通讯服务,位于高可用集群架构的底层,为各节点(node)之间提供心跳信息;
resource-agents:资源代理,在节点上接收CRM的调度,对某一资源进行管理的工具,管理工具通常为脚本;
pcs:命令行工具集;
fence-agents:fencing 在一个节点不稳定或无答复时将其关闭,使其不会损坏集群的其它资源,其主要作用是消除脑裂
1:安装相关软件包
[root@controller01 ~]# yum install pacemaker pcs corosync fence-agents resource-agents -y
2: 构建集群
# 启动pcs服务,在全部控制节点执行,以controller01节点为例
[root@controller01 ~]# systemctl enable pcsd
[root@controller01 ~]# systemctl start pcsd
# 修改集群管理员hacluster(默认生成)密码,在全部控制节点执行,以controller01节点为例
[root@controller01 ~]# echo huayun | passwd --stdin hacluster
3:认证操作
# 认证配置在任意节点操作,以controller01节点为例;
# 节点认证,组建集群,需要采用上一步设置的password
[root@controller01 ~]# pcs cluster auth controller01 controller02 controller03 -u hacluster -p huayun --force
4:创建并命名集群,在任意节点操作,以controller01节点为例;
# 生成配置文件:/etc/corosync/corosync.conf [root@controller01 ~]# pcs cluster setup --force --name openstack-cluster-01 controller01 controller02 controller03
5:pacemaker集群启动:
[root@controller01 ~]# pcs cluster start --all
controller01: Starting Cluster (corosync)...
controller02: Starting Cluster (corosync)...
controller03: Starting Cluster (corosync)...
controller03: Starting Cluster (pacemaker)...
controller01: Starting Cluster (pacemaker)...
controller02: Starting Cluster (pacemaker)...
设置开机自启
[root@controller01 ~]# pcs cluster enable --all
controller01: Cluster Enabled
controller02: Cluster Enabled
controller03: Cluster Enabled
6:查看pacemaker的集群状态
# 查看集群状态,也可使用” crm_mon -1”命令;
# “DC”:Designated Controller;
# 通过”cibadmin --query --scope nodes”可查看节点配置
7:查看corosync状态;
# “corosync”表示一种底层状态等信息的同步方式
[root@controller01 ~]# pcs status corosync
Membership information
----------------------
Nodeid Votes Name
1 1 controller01 (local)
2 1 controller02
3 1 controller03
8:查看节点: # 或:corosync-cmapctl runtime.totem.pg.mrp.srp.members
[root@controller01 ~]# corosync-cmapctl | grep members
通过web界面访问pacemaker:
9:设置属性
1)设置合适的输入处理历史记录及策略引擎生成的错误与警告,在troulbshoot时有用
[root@controller01 ~]# pcs property set pe-warn-series-max=1000 \ pe-input-series-max=1000 \ pe-error-series-max=1000
2)pacemaker基于时间驱动的方式进行状态处理,“cluster-recheck-interval”默认定义某些pacemaker操作发生的事件间隔为15min,建议设置为5min或3min
[root@controller01 ~]# pcs property set cluster-recheck-interval=5min
3)corosync默认启用stonith,但stonith机制(通过ipmi或ssh关闭节点)并没有配置相应的stonith设备(通过“crm_verify -L -V”验证配置是否正确,没有输出即正确),此时pacemaker将拒绝启动任何资源;
# 在生产环境可根据情况灵活调整,验证环境下可关闭
[root@controller01 ~]# pcs property set stonith-enabled=false
4) 默认当有半数以上节点在线时,集群认为自己拥有法定人数,是“合法”的,满足公式:total_nodes < 2 * active_nodes; # 以3个节点的集群计算,当故障2个节点时,集群状态不满足上述公式,此时集群即非法;当集群只有2个节点时,故障1个节点集群即非法,所谓的”双节点集群”就没有意义; # 在实际生产环境中,做2节点集群,无法仲裁时,可选择忽略;做3节点集群,可根据对集群节点的高可用阀值灵活设置
[root@controller01 ~]# pcs property set no-quorum-policy=ignore
# v2的heartbeat为了支持多节点集群,提供了一种积分策略来控制各个资源在集群中各节点之间的切换策略;通过计算出各节点的的总分数,得分最高者将成为active状态来管理某个(或某组)资源; # 默认每一个资源的初始分数(取全局参数default-resource-stickiness,通过"pcs property list --all"查看)是0,同时每一个资源在每次失败之后减掉的分数(取全局参数default-resource-failure-stickiness)也是0,此时一个资源不论失败多少次,heartbeat都只是执行restart操作,不会进行节点切换; # 如果针对某一个资源设置初始分数”resource-stickiness“或"resource-failure-stickiness",则取单独设置的资源分数; # 一般来说,resource-stickiness的值都是正数,resource-failure-stickiness的值都是负数;有一个特殊值是正无穷大(INFINITY)和负无穷大(-INFINITY),即"永远不切换"与"只要失败必须切换",是用来满足极端规则的简单配置项; # 如果节点的分数为负,该节点在任何情况下都不会接管资源(冷备节点);如果某节点的分数大于当前运行该资源的节点的分数,heartbeat会做出切换动作,现在运行该资源的节点将释 放资源,分数高出的节点将接管该资源 # pcs property list 只可查看修改后的属性值,参数”--all”可查看含默认值的全部属性值; # 也可查看/var/lib/pacemaker/cib/cib.xml文件,或”pcs cluster cib”,或“cibadmin --query --scope crm_config”查看属性设置,” cibadmin --query --scope resources”查看资源配置
[root@controller01 ~]# pcs property list
Cluster Properties:
cluster-infrastructure: corosync
cluster-name: openstack-pacemaker-cluster
cluster-recheck-interval: 5min
dc-version: 1.1.21-4.el7-f14e36fd43
have-watchdog: false
no-quorum-policy: ignore
pe-error-series-max: 1000
pe-input-series-max: 1000
pe-warn-series-max: 1000
stonith-enabled: false
10:配置vip
# 在任意控制节点设置vip(resource_id属性)即可,命名即为“vip”; # ocf(standard属性):资源代理(resource agent)的一种,另有systemd,lsb,service等; # heartbeat:资源脚本的提供者(provider属性),ocf规范允许多个供应商提供同一资源代理,大多数ocf规范提供的资源代理都使用heartbeat作为provider; # IPaddr2:资源代理的名称(type属性),IPaddr2便是资源的type; # 通过定义资源属性(standard:provider:type),定位”vip”资源对应的ra脚本位置; # centos系统中,符合ocf规范的ra脚本位于/usr/lib/ocf/resource.d/目录,目录下存放了全部的provider,每个provider目录下有多个type; # op:表示Operations
[root@controller01 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=10.100.214.200 cidr_netmask=24 op monitor interval=30s
或则pcs resource create VirtualIP ocf:heartbeat:IPaddr2 \ params ip="10.100.214.200" cidr_netmask="24" nic="em1" \ op monitor interval="30s"
11:查看集群资源:
[root@controller01 ~]# pcs resource
vip (ocf::heartbeat:IPaddr2): Started controller01
# 通过”pcs resouce”查询,vip资源在controller01节点; # 通过”ip a show”可查看vip [root@controller01 ~]# ip a show eth0
登入web发现在web上没有显示集群资源,手动同步
# 如果api区分admin/internal/public接口,对客户端只开放public接口,通常设置两个vip,如命名为:vip_management与vip_public; # 建议是将vip_management与vip_public约束在1个节点 # [root@controller01 ~]# pcs constraint colocation add vip_management with vip_public