pacemaker高可组件安装与部署
[hoc]安装安装在全部控制节点安装相关服务yum install pacemaker corosync pcs fence-agents resource-agents -y各包作用# pacemaker资源管理器CRM负责启动与停止服务位于 HA 集群架构中资源管理、资源代理层 # corosync消息层组件Messaging Layer管理成员关系、消息与仲裁为高可用环境中提供通讯服务位于高可用集群架构的底层为各节点node之间提供心跳信息 # resource-agents资源代理在节点上接收CRM的调度对某一资源进行管理的工具管理工具通常为脚本 # pcs命令行工具集 # fence-agentsfencing 在一个节点不稳定或无答复时将其关闭使其不会损坏集群的其它资源其主要作用是消除脑裂构建集群启动pcs服务systemctl enable pcsd --now或者systemctl enable pcsd systemctl start pcsd配置密码在所有节点配置hacluster用户密码passwd hacluster# 密码自定此外以Hapassw0rd为例。设置密码的另一种方法echo Hapassw0rd | passwd --stdin haclustercorosync配置文件准备cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf节点配置vim /etc/corosync/corosync.conf节点认证认证配置在任意节点操作以控制节点1为例# 集群节点添加 pcs host auth hostname addrn.n.n.n -u hacluster -p password # 节点认证组建集群需要用上一步设置的password [rootcontroller01 ~]# pcs cluster auth node1 node2 node3 -u hacluster -p Hapassw0rd --force集群设置和同步corosync# pcs cluster setup MyCluster server1 server2 # pcs start --all #开启集群 # corosync-cfgtool -s #检查集群通信是否顺畅当前节点的初始化信息 # #修改配置文件后还需要执行如下几条命令让配置同步其他节点、和立即生效 pcs cluster sync # pcs cluster reload corosync # 重载配置 corosync-cmapctl # 查询当前内存中corosync的配置集群恢复重配置pcs cluster destroy --force pcs cluster setup cluster-name node1 addrn.n.n.n node2 addrn.n.n.n ... nodeN addrn.n.n.n pcs cluster enable --all启动# 启动集群以controller01节点为例 [rootcontroller01 ~]# pcs cluster start --all# 设置集群开机启动 [rootcontroller01 ~]# pcs cluster enable --all查看集群状态# 查看集群状态也可使用” crm_mon -1”命令 # “DC”Designated Controller # 通过”cibadmin --query --scope nodes”可查看节点配置 [rootcontroller01 ~]# pcs status cluster查看corosync状态# “corosync”表示一种底层状态等信息的同步方式 [rootcontroller01 ~]# pcs status corosync查看节点# 或corosync-cmapctl runtime.totem.pg.mrp.srp.members [rootcontroller01 ~]# corosync-cmapctl | grep members查看集群资源[rootcontroller01 ~]# pcs resource或通过web访问任意控制节点https://172.16.20.3:2224账号/密码即构建集群时生成的密码hacluster/hapsssw0rd配置设置属性# 在任意控制节点设置属性即可以controller01节点为例 # 设置合适的输入处理历史记录及策略引擎生成的错误与警告在troulbshoot时有用 [rootcontroller01 ~]# pcs property set pe-warn-series-max100 \ pe-input-series-max100 \ pe-error-series-max100 # pacemaker基于时间驱动的方式进行状态处理” cluster-recheck-interval”默认定义某些pacemaker操作发生的事件间隔为15min建议设置为5min或3min [rootcontroller01 ~]# pcs property set cluster-recheck-interval5 # corosync默认启用stonith但stonith机制通过ipmi或ssh关闭节点并没有配置相应的stonith设备通过“crm_verify -L -V”验证配置是否正确没有输出即正确此时pacemaker将拒绝启动任何资源 # 在生产环境可根据情况灵活调整验证环境下可关闭 [rootcontroller01 ~]# pcs property set stonith-enabledfalse # 默认当有半数以上节点在线时集群认为自己拥有法定人数是“合法”的满足公式total_nodes 2 * active_nodes # 以3个节点的集群计算当故障2个节点时集群状态不满足上述公式此时集群即非法当集群只有2个节点时故障1个节点集群即非法所谓的”双节点集群”就没有意义 # 在实际生产环境中做2节点集群无法仲裁时可选择忽略做3节点集群可根据对集群节点的高可用阀值灵活设置 [rootcontroller01 ~]# pcs property set no-quorum-policyignore # v2的heartbeat为了支持多节点集群提供了一种积分策略来控制各个资源在集群中各节点之间的切换策略通过计算出各节点的的总分数得分最高者将成为active状态来管理某个或某组资源 # 默认每一个资源的初始分数取全局参数default-resource-stickiness通过pcs property config --all查看是0同时每一个资源在每次失败之后减掉的分数取全局参数default-resource-failure-stickiness也是0此时一个资源不论失败多少次heartbeat都只是执行restart操作不会进行节点切换 # 如果针对某一个资源设置初始分数”resource-stickiness“或resource-failure-stickiness则取单独设置的资源分数 # 一般来说resource-stickiness的值都是正数resource-failure-stickiness的值都是负数有一个特殊值是正无穷大INFINITY和负无穷大-INFINITY即永远不切换与只要失败必须切换是用来满足极端规则的简单配置项 # 如果节点的分数为负该节点在任何情况下都不会接管资源冷备节点如果某节点的分数大于当前运行该资源的节点的分数heartbeat会做出切换动作现在运行该资源的节点将释 放资源分数高出的节点将接管该资源 # pcs property config 只可查看修改后的属性值参数”--all”可查看含默认值的全部属性值 # 也可查看/var/lib/pacemaker/cib/cib.xml文件或”pcs cluster cib”或“cibadmin --query --scope crm_config”查看属性设置” cibadmin --query --scope resources”查看资源配置 [rootcontroller01 ~]# pcs property config又节点必须配置pcs property set stonith-enabledfalse # 禁用 STONITH测试环境 pcs property set no-quorum-policyignore # 忽略仲裁丢失 crm_verify -L # 验证资源配置没报错就行配置vip# 在任意控制节点设置vipresource_id属性命名即为“vip” # ocfstandard属性资源代理resource agent的一种另有systemdlsbservice等 # 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 [rootcontroller01 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip172.30.200.30 cidr_netmask24 op monitor interval30s # 查看集群资源 [rootcontroller01 ~]# pcs resource # 通过”pcs resouce”查询vip资源在controller01节点 # 通过”ip a show”可查看vip [rootcontroller01 ~]# ip a show ens33其他服务资源pcs resource create nginx-server systemd:nginx op monitor timeout5s设置资源组# 创建资源组 pcs resource group add mysql-cluster db-store mariadb-server db-vip # 检查资源组 pcs resource group list查看支持的资源组[rootGpower1 ~]# pcs resource standardslsb ocfservicesystemd[rootGpower1 ~]# pcs resource providersheartbeat linbit openstack pacemaker查看指定的资源组代理# pcs resource list systemd# pcs resource list ocf:heartbeat:pgsql查看指定资源代理的帮助pcs resource describe ocf:heartbeat:IPaddr检查各资源对各节点倾向性分数crm_simulate-sL# 这个命令可以打印出当前集群各资源对各节点的倾向性的分数手动迁移资源到其他节点# pcs resource move resource nodename如 pcs resource move web work02HA管理通过web访问任意控制节点https://172.30.200.31:2224账号/密码即构建集群时生成的密码hacluster/hapsssw0rd虽然以cli的方式设置了集群但web界面默认并不显示手动添加集群实际操作只需要添加已组建集群的任意节点即。# 如果api区分admin/internal/public接口对客户端只开放public接口通常设置两个vip如命名为vip_management与vip_public # 建议是将vip_management与vip_public约束在1个节点 [rootcontroller01 ~]# pcs constraint colocation add vip_management with vip_public # 约束关系检查 [rootcontroller01 ~]# pcs constraint config配置内核参数# 全部控制节点修改内核参数以controller01节点为例 # net.ipv4.ip_nonlocal_bind是否允许no-local ip绑定关系到haproxy实例与vip能否绑定并切换 # net.ipv4.ip_forward是否允许转发 [rootcontroller01 ~]# echo net.ipv4.ip_nonlocal_bind 1 /etc/sysctl.conf [rootcontroller01 ~]# echo net.ipv4.ip_forward 1 /etc/sysctl.conf [rootcontroller01 ~]# sysctl -p设置pcs资源# 任意控制节点操作即可以controller01节点为例 # 添加资源lb-haproxy-clone [rootcontroller01 ~]# pcs resource create lb-haproxy systemd:haproxy --clone [rootcontroller01 ~]# pcs resource设置资源启动顺序# 设置资源启动顺序先vip再lb-haproxy-clone # 通过“cibadmin --query --scope constraints”可查看资源约束配置 [rootcontroller01 ~]# pcs constraint order start vip then lb-haproxy-clone kindOptional多服务绑定约束# 官方建议设置vip运行在haproxy active的节点通过绑定lb-haproxy-clone与vip服务将两种资源约束在1个节点 # 约束后从资源角度看其余暂时没有获得vip的节点的haproxy会被pcs关闭 [rootcontroller01 ~]# pcs constraint colocation add lb-haproxy-clone with vip [rootcontroller01 ~]# pcs resource配置 Pacemaker 资源定义资源代理安装 PostgreSQL 资源代理yum install -y resource-agents创建集群资源# 添加虚拟 IP 资源 pcs resource create pg_vip ocf:heartbeat:IPaddr2 ip192.168.1.100 cidr_netmask24 op monitor interval30s # 添加 PostgreSQL 资源 pcs resource create pgsql ocf:heartbeat:pgsql \ pgctl/usr/bin/pg_ctl \ psql/usr/bin/psql \ pgdata/var/lib/pgsql/data \ rep_modesync \ node_listnode1 node2 \ primary_conninfo_optpasswordrep_password \ op start timeout60s \ op stop timeout60s \ op promote timeout30s \ op demote timeout120s \ op monitor interval15s timeout10s roleMaster \ op monitor interval16s timeout10s roleSlave # 设置资源组确保 VIP 和 PostgreSQL 在同一节点 pcs constraint colocation add pg_vip with pgsql INFINITY pcs constraint order pgsql then pg_vip验证资源配置pcs resource # 显示资源详情 pcs status # 查看集群状态pcs节点操作认证新节点pcs cluster auth node3-uhacluster# 系统会提示输入 hacluster 用户的密码节点添加# 配置同步到新节点并加入集群pcs clusternodeaddnode3# 进阶选项新节点加入后立即启动集群服务并设置开机自启加上 --start 和 --enablepcs clusternodeaddnode3--start--enable验证状态# 检查节点是否成功加入pcs status nodespcs status nodes为节点添加属性pcs node attribute {NodeName} propertyNamepropertyValue节点删除# 节点是在线且健康的pcs clusternoderemove node2# 节点故障时pcs clusternoderemove node2 --skip-offline--force--skip-offline允许在节点离线时执行命令--force强制移除配置故障转移测试模拟主节点故障# 在 node1 上停止 PostgreSQL systemctl stop postgresql # 观察 Pacemaker 自动切换至 node2 pcs status | grep Current DC手动切换主备pcs resource clear pgsql # 清理操作状态 pcs resource move pgsql node2 # 将主库切换至 node2日常管理命令# 查看集群状态 pcs cluster status # 临时禁用资源 pcs resource disable pgsql # 将节点设为备用 pcs node standby node1 # 停止整个集群 pcs cluster stop --all # 查看集群状态且启动刷新 crm_mon -Afr # 查看集群状态 crm_mon -Afr -1 # 查看已配置的资源 # pcs resource # 查看可用资源 # pcs resource list # 查看某个具体资源 # pcs resource describe ocf:heartbeat:IPaddr2 # 查看集群配置 # pcs config # 将节点设置为standby状态 # pcs node standby Pacemaker-Mysql-02 # 手动迁移资源至其他节点 提示前边crmsh里执行手动迁移资源它默认会在配置界面给我们添加一条位置约束pcs也是一样的套路它也会给配置界面添加一条位置约束可以使用pcs config或者pcs constraint查看到相关约束信息 # pcs resource move mysql-cluster Pacemaker-Mysql-01 # 创建位置约束 # pcs constraint location add cli-prefer-mysql-cluster mysql-cluster Pacemaker-Mysql-01 100 # pcs constraint location add mysql-cluster_with_Pacemaker-Mysql-03 mysql-cluster Pacemaker-Mysql-03 INFINITY # 清除约束 # pcs constraint location remove mysql-cluster_with_Pacemaker-Mysql-03 # 清理告警 pcs resource cleanup resourceName # 清理指定资源的告警历史,包括所有相关的可以指定--strict只清除指定的资源 pcs resource cleanup nodenodename # 清理节点上所有资源的告警历史 pcs resource resourceID cleanup nodenodename # 清理指定节点上指定资源的告警历史 # 显示资源对集群各节点的倾向性分数 # crm_simulate -sL常见问题解决脑裂Split-Brain• 现象节点间通信中断各自认为自己是主节点。• 解决pcs cluster stop --all # 停止所有节点 pcs cluster start --all # 重新启动资源无法启动• 现象pcs status 显示资源 FAILED。• 解决pcs resource cleanup pgsql # 清理资源状态 journalctl -xe # 查看详细日志VIP 无法切换• 现象虚拟 IP 未迁移到新主节点。• 解决arping -c 3 -U -I eth0 192.168.1.100 # 强制刷新 ARP pcs resource restart pg_vip # 重启 VIP 资源性能优化建议调整复制模式pcs resource update pgsql rep_modeasync # 异步复制更高性能监控同步延迟SELECT pg_current_wal_lsn(), replay_lsn FROM pg_stat_replication;启用 WAL 压缩在 postgresql.conf 中设置 wal_compression on关于corosync的日志说明及配置其默认配置文件位于 /etc/corosync/corosync.conf这里我们可以看到默认情况下其日志相关的配置段如下logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes timestamp: on }因此可以看到日志会存储到2个地方除了定义的logfile之外也会写入到syslog也即 /var/log/messages如果不想corosync的日志写入到 /var/log/messages 将其to_syslog 修改成no参考官文https://clusterlabs.org/projects/pacemaker/doc/2.1/Pacemaker_Administration/html/pcs-crmsh.html?highlightdrbdhttps://www.php.cn/faq/1959417.htmlhttps://blog.csdn.net/mengshicheng1992/article/details/123612431https://yueludanfeng.blog.csdn.net/article/details/125136649https://huaweicloud.csdn.net/6549fb06525bff6100e998b2.html#devmenu9https://www.cnblogs.com/drgcaosheng/p/14760989.html

相关新闻

西门子S7-200 PLC与紫金桥组态软件在二泵供水系统中的应用

西门子S7-200 PLC与紫金桥组态软件在二泵供水系统中的应用

1. 二泵供水控制系统的工业背景与核心需求 在工业自动化领域,供水系统是最基础也最关键的公共设施之一。二泵供水系统作为中小型供水场景的经典解决方案,广泛应用于楼宇供水、工厂循环水系统以及区域加压站等场合。与单泵系统相比,双泵配置通…

2026/7/29 11:33:06 阅读更多 →
有什么紧急找供应商的方法

有什么紧急找供应商的方法

一、紧急寻源核心痛点梳理在地缘环境波动、企业扩产、上游厂商突发断供等场景下,企业紧急寻找替代供应商时,传统人工寻源模式会暴露出多重难以解决的现实难题,也是制造、重工、半导体等行业普遍面临的供应链堵点:突发断供无备选&a…

2026/7/29 11:33:06 阅读更多 →
PWM舵机控制全解析:从信号原理到工程实践

PWM舵机控制全解析:从信号原理到工程实践

1. 从“信号”到“角度”:PWM控制舵机的核心逻辑如果你玩过机器人、航模或者一些需要精确角度控制的DIY项目,那你一定绕不开舵机这个小东西。它不像普通电机那样只会傻转,而是能根据你的指令,精准地停在0度到180度之间的任何一个位…

2026/7/29 11:33:06 阅读更多 →

最新新闻

基于行空板与红外传感器的火车模型缩比测速系统设计与实现

基于行空板与红外传感器的火车模型缩比测速系统设计与实现

1. 项目概述:当火车模型遇上开源硬件 玩火车模型的朋友,尤其是那些热衷于场景沙盘制作的,肯定都琢磨过一个问题:我这台按1:87比例缩小的HO级模型,在沙盘轨道上跑起来,它的“真实速度”应该是多少&#xff1…

2026/7/29 11:40:10 阅读更多 →
筑牢“安全底线”:移远通信车规IMU模组斩获ISO 26262 ASIL-B认证

筑牢“安全底线”:移远通信车规IMU模组斩获ISO 26262 ASIL-B认证

在辅助驾驶技术飞速迭代的今天,如果说高精度的卫星定位决定了车辆感知能力的“上限”,那么惯性测量单元(IMU)便是守住车辆行驶安全的“底线”,它就像人的内耳前庭,时刻感知着车辆的姿态、加速度和角速度。即…

2026/7/29 11:40:10 阅读更多 →
2019年主流图形化编程软件对比:从Scratch到硬件编程的选型指南

2019年主流图形化编程软件对比:从Scratch到硬件编程的选型指南

1. 从“积木”到“创造”:图形化编程的2019年生态图景如果你在2019年,正想带着孩子或者自己入门编程,或者想为学校的创客社团、机器人竞赛寻找一个合适的工具,那么“图形化编程软件哪个好用”这个问题,绝对是你绕不开的…

2026/7/29 11:40:10 阅读更多 →
Visual Studio中C/C++混合编程配置与extern “C“使用详解

Visual Studio中C/C++混合编程配置与extern “C“使用详解

1. 项目概述:为什么我们需要混合编程?在Visual Studio里同时捣鼓C和C代码,这事儿听起来有点“复古”,但实际开发中却是个高频需求。你可能接手了一个历史悠久的C语言库,核心算法稳定但接口老旧;或者你正在用…

2026/7/29 11:40:09 阅读更多 →
基于LM35与Arduino的温度预警系统:从传感器采集到抗干扰设计

基于LM35与Arduino的温度预警系统:从传感器采集到抗干扰设计

1. 从“温度计”到“预警哨兵”:LM35与Arduino的实战融合 最近在整理工作室的物料,翻出来一堆LM35温度传感器和Arduino Uno板子,还有几个闲置的LED。看着这些元件,我突然想,为什么不把它们组合成一个真正“有用”的东西…

2026/7/29 11:40:09 阅读更多 →
AI大模型工程师转型指南:核心技术栈与学习路径

AI大模型工程师转型指南:核心技术栈与学习路径

1. 为什么现在转岗AI大模型正当时?2023年被称为"AI大模型元年",ChatGPT的爆发让全球看到了大语言模型的潜力。根据行业调研数据显示,国内AI大模型相关岗位需求同比增长超过300%,头部企业为资深算法工程师开出的年薪普遍…

2026/7/29 11:39:09 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻