Loading

HA-Pacemaker-01-Pacemaker

安装PaceMaker

# 安装
yum install -y pacemaker pcs fence-agents-all resource-agents

pacemaker 是服务程序,pcsd 是 pacemaker 的客户端命令执行程序,任何的功能都需要 pcsd 来启动和设置,pcs是命令行执行程序

corosync是心跳监听程序

配置

创建PaceMaker集群

# 配置hacluster的密码
passwd hacluster
# hacluster用户在安装pacemaker时已自动创建,可以通过以下命令确认hacluster用户已创建
# cat /etc/passwd | grep hacluster

# 创建集群并启动启用集群,任一节点运行
pcs cluster auth -u hacluster -p <HAClusterPassWord> db1 db2 db3
# 会生成/etc/corosync/corosync.conf文件
pcs cluster setup --name mycluster db1 db2 db3

# 启动集群,任一节点运行
pcs cluster start --all
# 设置corosync,pacemaker和pcsd服务开机自动启动,任一节点运行
pcs cluster enable --all

pcs property set stonith-enabled=false
# 默认值是true,当为true的时候,如果Cluster第一次启动资源失败,
# 如果为false,则主服务失效以后pacemaker不会选新的Master
# 在自动Failover操作后,需要用户使用以下命令手动清空资源启动失败的数量记录,重置资源配置
# pcs resource cleanup <resourceName>
pcs property set start-failure-is-fatal=true

# 设置资源粘性为无限,也就是原主节点宕机然后恢复后,master不会重新回到该节点上
# 防止主节点宕机恢复时重新选主,再次导致服务不可用
pcs property set default-resource-stickiness="INFINITY"

# "心跳"(Heart Beat)的概念,在这里是指集群节点之间互相通信,检查健康状态和集群属性变更的机制。通过设置集群属性 cluster-recheck-interval 来确定"心跳" 的时间间隔。
# 一旦集群中的某一个节点下线(不能互相通信),集群管理器可以尝试着在一段时间(failure-timeout)后去重启这台节点。如果在这段时间内节点又有反应(能与集群互相通信)了,那么在接收到这个回线的信号之后,就取消重启先前标记为下线的节点
# 不建议把 cluster-recheck-interval 设置的过短,比如 60s; 一般 failure-timeout 可以设置的短一些,60s, 而 cluster-recheck-interval 要设置的比 failure-timeout 长一些。
pcs property set cluster-recheck-interval=2min

添加防火墙例外

firewall-cmd --permanent --add-service=high-availability
firewall-cmd --reload

通过web界面访问pacemaker

访问任意节点:https://192.168.62.131:2224

账号/密码(即构建集群时生成的密码):hacluster/

在Manage Clusters 页面点击Add Existing

然后添加任意一集群节点IP并输入密码即可看到已设置的集群

测试

# manual failover
pcs resource move ag_cluster-master node2 --master --lifetime=30S

# execute on node1
pcs cluster stop

常用命令

# 查看corosync配置
cat /etc/corosync/corosync.conf

pcs config
pcs resource
pcs resource show
pcs resource debug-start orcl
pcs resource update <ResourceId> <Property>=<Value>
pcs cluster
pcs cluster status
# 删除已配置集群
pcs cluster destroy
#查看状态
pcs status corosync

# 查看节点配置
cibadmin --query --scope nodes

corosync-cfgtool -s
#查看成员信息
corosync-cmapctl | grep members

# 验证配置
crm_verify -L -V

# 查看资源采用的类型
pcs resource standards

# 查看可用的ocf资源提供者
pcs resource providers

# 查看特定标准下所支持的脚本,例:ofc:heartbeat 下的脚本
pcs resource agents ocf:heartbeat

# 手动切换某节点到 standby 状态及取消standby 状态
pcs cluster standby ceph1
pcs cluster unstandby ceph1

# 防止资源在节点恢复后立即迁移
# pacemaker默认所有节点的stickiness都为0
pcs resource defaults-resource-stickiness=100
#查看
pcs resource defaults

# 重启资源
pcs resource restart resource_name

# 清理集群错误日志
pcs resource cleanup

# 默认当有半数以上节点在线时,集群认为自己拥有法定人数,是"合法"的,满足公式:total_nodes < 2 * active_nodes;
# 以3个节点的集群计算,当故障2个节点时,集群状态不满足上述公式,此时集群即非法;当集群只有2个节点时,故障1个节点集群即非法,所谓的"双节点集群"就没有意义;
# 在实际生产环境中,做2节点集群,无法仲裁时,可选择忽略仲裁保证业务提供(集群所有节点均正常时配置);做3节点集群,可根据对集群节点的高可用阀值灵活设置
pcs property set no-quorum-policy=ignore

# 设置合适的输入处理历史记录及策略引擎生成的错误与警告,在trouble shooting故障排查时有用
pcs property set pe-warn-series-max=1000\
    pe-input-series-max=1000\
    pe-error-series-max=1000

# pacemaker基于时间驱动的方式进行状态处理,cluster-recheck-interval默认定义某些pacemaker操作发生的事件间隔为15min,建议设置为5min或3min
pcs property set cluster-recheck-interval=5

# corosync默认启用stonith,但stonith机制(通过ipmi或ssh关闭节点)并没有配置相应的stonith设备(通过crm_verify -L -V验证配置是否正确,没有输出即正确),此时pacemaker将拒绝启动任何资源;在生产环境可根据情况灵活调整,测试环境下可关闭
pcs property set stonith-enabled=false

# 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 set default-resource-stickiness="INFINITY"

# pcs property list 只可查看修改后的属性值,参数"--all"可查看含默认值的全部属性值
pcs property list
pcs cluster cib
cibadmin --query --scope crm_config
cibadmin --query --scope resources

常见问题(FAQ)

Q1: 脑裂(相同集群存在多个节点有不同的主)以后如何恢复?

A1: 执行以下命令

# 首先重启服务器,将服务重置为初始状态
reboot

# 重置粘性,防止因为粘性导致不会重新选主
pcs property unset default-resource-stickiness

# 重启pacemaker相关服务
systemctl restart pcsd pacemaker corosync

# 确认pcs集群恢复正常
pcs status

# 恢复粘性设置
pcs property set default-resource-stickiness="INFINITY"

参考

posted @ 2022-12-11 15:49  知科行技  阅读(299)  评论(0编辑  收藏  举报