kingbase集群主节点存储不可写,把从节点提升为主

8次阅读
没有评论

共计 948 个字符,预计需要花费 3 分钟才能阅读完成。

⚠️核心前提:原主实例已经无法写入,不要再对外提供业务写请求;禁止原主继续运行,防止脑裂 现象:主库磁盘只读、inode 耗尽、磁盘损坏,能读不能写,此时不能正常 switchover,只能手动 promote 备库

一、第一步:隔离故障主(必须先做!)

目的:防止旧主还在运行,出现双主脑裂

  1. 停掉故障主库 kingbase 进程
sys_ctl stop -D 故障主的数据目录
  1. 如果磁盘卡死无法停库,直接断开网络 / 关机,强制隔离。

不要尝试修复磁盘写问题,优先业务切换。

二、第二步:备库执行升主(二选一)

登录备库操作系统(kingbase 用户)

方式 1:sys_ctl promote(原生流复制,无 repmgr 集群)

sys_ctl promote -D /kingbase/data

或者 ksql 内执行:

SELECT sys_promote();

方式 2:repmgr 集群(推荐)

# 备库执行,提升为本集群新主,其余备自动跟随新主
repmgr standby promote -f /etc/repmgr.conf --siblings-follow

三、升主后验证(在新主执行)

-- true=备库;false=已经升级为主库
select sys_is_in_recovery();

-- 查看当前时间线
select sys_timeline_id();

返回false代表升主成功,支持读写。

四、检查数据是否完整(关键)

升主前可在备库查看回放 LSN,确认 wal 已经全部接收回放

select sys_last_replayed_wal_lsn();

主库存储不可写,主库最后产生的 WAL 如果还没传到备库,会丢失这部分数据。

五、VIP 和业务切换

  1. 如果是 kbha 集群:升主完成后,VIP 会自动漂移到新主;
  2. 无 HA:手动把 VIP 切到新主节点;
  3. 修改业务连接地址 / VIP,测试读写。

六、故障旧主后续处理

旧主磁盘修好后,不能直接启动,时间线已经不一样。 两种方案:

  1. 使用sys_rewind快速回退旧主,转为备库(推荐,节省拷贝时间)
sys_rewind -D 旧主data目录 --source-server="host=新主IP port=54321 user=system dbname=postgres"
  1. sys_rewind 不可用:直接 repmgr standby clone 重新克隆,重建备库

正文完
 0
数据与人
版权声明:本站原创文章,由 数据与人 于2026-09-21发表,共计948字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,若要转载请注明出处。
评论(没有评论)