Skip to content

KingbaseES 集群高可用机制

一句话机制:repmgr 负责主备注册、流复制与自动故障切换;VIP 跟随主节点漂移使业务连接无感知;sys_securecmd(8890)承载节点间命令通道;网关 IP(trusted_servers)作为第三方参与脑裂仲裁。四者缺一,"双节点 + VIP"就不是高可用。

不变量(必须成立的约束)

  1. 复制健康 = 备库 LSN 追平:主备间为 WAL 流复制(wal_level=replicaarchive_mode=always,备节点也归档以保证切换后 PITR 能力)。repmgr cluster show 中备库 LSN_Lag 应为 0 bytes,持续增大说明复制链路出问题。
  2. 脑裂仲裁三要素:主、备、网关trusted_servers 填网关 IP,主节点同时探测备机与网关判断自身是否仍是主。running_under_failure_trusted_servers='on' 时,主节点与网关失联也继续对外服务(优先保可用性)。
  3. 同步备 = RPO=0,但以写延迟为代价synchronous / sync_nodes 配置同步备后,主库提交要等备库确认,网络抖动会被放大。默认异步,按业务 RPO 需求显式选择。
  4. 业务必须连 VIP,而不是节点 IP:切换后 VIP 漂移到新主,只有连 VIP 才能做到故障无感知;直连节点 IP 的应用在切换时会断。
  5. 节点时钟差 < 2s:repmgr 判定与基于时间点的备份恢复都依赖时间一致性,须 chrony 对齐。
  6. 只允许主节点写:备节点只读,任何"双写"配置都不存在;读写分离靠应用层把读分流到备机(VIP 只跟主)。

常见误解

  • "双节点 + 一个 VIP 就是高可用" → 还依赖网关仲裁与 securecmd 通道。网关不可达、防火墙挡了 8890、VIP 网卡配置错,都会让"高可用"变成"双节点互殴"。
  • "自动切换了业务就没事" → 切换是秒级到分钟级,未提交事务会回滚;应用必须做重连与重试,连接池要探测 VIP 漂移。
  • "兼容模式 / 大小写敏感之后还能改"db_modedb_case_sensitive 在 initdb 时固化,改错只能重新初始化集群(数据要迁移)。
  • "备节点可以随便停" → 一主一备下停备 = 失去容灾,且 LSN_Lag 会持续增长,重新追平前切换会丢数据窗口。
  • "装了高可用就不用备份" → 高可用防的是节点故障,防不了逻辑错误(误删/坏数据);备份体系必须独立存在(见 KingbaseES备份方案)。

关键证据 / 例子

  • 现场部署文档(V009R002C014B0009):install.confrecovery="standby" 让备节点以 standby 方式从主库恢复搭建;virtual_ip="172.17.33.210/24"net_device=(eth0)net_device_ip=(两节点物理IP) 三件套配置 VIP;trusted_servers="网关IP" 参与仲裁。
  • 官方 V9R1C10 快速安装文档:主备角色表(primary * running / standby running)、LSN_Lag 0 bytes 为健康标准;集群启停统一走 sys_monitor.sh stop/start(任一节点执行一次),状态走 repmgr cluster show / repmgr service status
  • 切换演练(业务窗口):repmgr standby switchover 主备互换后,ip a 确认 VIP 已漂移到新主——这是验证"高可用"真实成立的最低成本动作。

关联

最近更新