Oracle Linux 8执行yum update报corosync/pacemaker依赖冲突错误
问题产生原因
出现该依赖冲突的核心原因是软件仓库配置不全:
- 初始化安装时仅启用了
ol8_appstream、ol8_baseos_latest、ol8_addons三个仓库,漏了Oracle Linux 8专门维护高可用集群组件的独立仓库ol8_ha。 - Oracle从OL8 Update6版本开始,就将pacemaker、corosync、pcs、sbd所有集群相关组件的正式稳定更新,统一迁移到
ol8_ha仓库维护,之前放在ol8_addons仓库里的旧版集群包不再同步后续更新。 - 执行
yum update时,dnf会默认选择所有可用源里最高版本的包作为更新候选,但因为没开ol8_ha源,源里的集群相关包版本是断层的:已安装的corosync、pacemaker主程序停在3.1.5-1.el8、2.1.0-8.0.1.el8旧版本,却能抓到零散推送的高版本依赖库(比如corosynclib-3.1.5-2、pacemaker-libs-2.1.2-4),而集群组件主程序和依赖库要求严格同版本匹配,最终触发多版本包无法共存的依赖报错。
无损坏完成系统更新的操作步骤
集群环境必须逐节点滚动更新,禁止同时操作所有节点,避免业务中断或集群配置损坏:
- 先补启缺失的HA仓库,在所有节点执行命令:
sudo dnf config-manager --enable ol8_ha - 对单个节点执行更新前,先将节点设为备用状态,迁走上面运行的所有集群资源:在任意正常集群节点执行
等待1-2分钟,执行pcs node standby <待更新节点的主机名>pcs status确认待更新节点状态变为standby,所有资源已经漂移到其他在线节点后,再进行后续操作。 - 登录到待更新的节点,先重建dnf缓存确保源数据正确:
sudo dnf clean all && sudo dnf makecache - 直接执行系统更新即可,不要一开始就加报错提示里的
--allowerasing、--skip-broken参数:sudo dnf update正常情况下此时不会再报依赖冲突:启用ol8_ha源后,dnf能拉取到完整匹配的同版本全量集群组件包,会自动将之前从addons源安装的旧版集群组件平滑替换为ha源的正式维护版本,全程不会修改或删除
/etc/corosync/、/var/lib/pacemaker/目录下的现有集群配置,pcs的集群配置信息也会完整保留。 - 更新完成后重启节点(如果更新包含内核、corosync、pacemaker核心包,必须重启才能加载新版本):
sudo reboot - 节点重启完成后,登录确认corosync、pacemaker服务正常启动,再将节点切回正常工作状态:
pcs node unstandby <当前节点主机名> - 执行
pcs status确认节点恢复为Online状态,资源运行正常后,再对下一个节点重复上述 standby迁资源 -> 登节点更新 -> 重启 -> 恢复节点状态 的操作,直到所有集群节点更新完成。
注意事项
- 未启用ol8_ha源的情况下,不要直接加
--allowerasing参数强制更新,该参数可能误卸载集群核心组件,导致集群崩溃。 - 不要跳过节点设为standby的步骤直接更新,否则更新过程中pacemaker、corosync服务重启会触发资源异常切换,可能导致业务中断。
- 所有节点更新完成后,可执行
pcs cluster verify --full做全集群校验,确认所有节点组件版本一致、配置无异常。
内容的提问来源于stack exchange,提问作者thedom4302
相关产品推荐
相关产品推荐

