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

核心前提:原主实例已经无法写入,不要再对外提供业务写请求;禁止原主继续运行,防止脑裂 现象:主库磁盘只读、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 重新克隆,重建备库
上一篇 Redis 和 Caffeine 的区别是什么?
下一篇 安卓Frida逆向与抓包实战 PDF下载

站点性能

运行正常
实时心跳0 ms
页面加载
0 秒
SQL 查询
0 次
服务端响应
0 ms
峰值内存
0 MB
阿陶学长

阿陶学长管理员

专注于分享最有价值的互联网干货

本月创作热力图

少
多
最新评论
暂无评论
AeroCore图片