主题
KingbaseES 集群高可用机制
一句话机制:repmgr 负责主备注册、流复制与自动故障切换;VIP 跟随主节点漂移使业务连接无感知;sys_securecmd(8890)承载节点间命令通道;网关 IP(trusted_servers)作为第三方参与脑裂仲裁。四者缺一,"双节点 + VIP"就不是高可用。
不变量(必须成立的约束)
- 复制健康 = 备库 LSN 追平:主备间为 WAL 流复制(
wal_level=replica、archive_mode=always,备节点也归档以保证切换后 PITR 能力)。repmgr cluster show中备库LSN_Lag应为0 bytes,持续增大说明复制链路出问题。 - 脑裂仲裁三要素:主、备、网关:
trusted_servers填网关 IP,主节点同时探测备机与网关判断自身是否仍是主。running_under_failure_trusted_servers='on'时,主节点与网关失联也继续对外服务(优先保可用性)。 - 同步备 = RPO=0,但以写延迟为代价:
synchronous/sync_nodes配置同步备后,主库提交要等备库确认,网络抖动会被放大。默认异步,按业务 RPO 需求显式选择。 - 业务必须连 VIP,而不是节点 IP:切换后 VIP 漂移到新主,只有连 VIP 才能做到故障无感知;直连节点 IP 的应用在切换时会断。
- 节点时钟差 < 2s:repmgr 判定与基于时间点的备份恢复都依赖时间一致性,须 chrony 对齐。
- 只允许主节点写:备节点只读,任何"双写"配置都不存在;读写分离靠应用层把读分流到备机(VIP 只跟主)。
常见误解
- ❌ "双节点 + 一个 VIP 就是高可用" → 还依赖网关仲裁与 securecmd 通道。网关不可达、防火墙挡了 8890、VIP 网卡配置错,都会让"高可用"变成"双节点互殴"。
- ❌ "自动切换了业务就没事" → 切换是秒级到分钟级,未提交事务会回滚;应用必须做重连与重试,连接池要探测 VIP 漂移。
- ❌ "兼容模式 / 大小写敏感之后还能改" →
db_mode、db_case_sensitive在 initdb 时固化,改错只能重新初始化集群(数据要迁移)。 - ❌ "备节点可以随便停" → 一主一备下停备 = 失去容灾,且
LSN_Lag会持续增长,重新追平前切换会丢数据窗口。 - ❌ "装了高可用就不用备份" → 高可用防的是节点故障,防不了逻辑错误(误删/坏数据);备份体系必须独立存在(见 KingbaseES备份方案)。
关键证据 / 例子
- 现场部署文档(V009R002C014B0009):
install.conf中recovery="standby"让备节点以 standby 方式从主库恢复搭建;virtual_ip="172.17.33.210/24"、net_device=(eth0)、net_device_ip=(两节点物理IP)三件套配置 VIP;trusted_servers="网关IP"参与仲裁。 - 官方 V9R1C10 快速安装文档:主备角色表(primary
* running/ standbyrunning)、LSN_Lag0 bytes 为健康标准;集群启停统一走sys_monitor.sh stop/start(任一节点执行一次),状态走repmgr cluster show/repmgr service status。 - 切换演练(业务窗口):
repmgr standby switchover主备互换后,ip a确认 VIP 已漂移到新主——这是验证"高可用"真实成立的最低成本动作。
关联
- 全景:KingbaseES集群技术栈总览
- 备份:KingbaseES备份方案
- 可执行手册:金仓数据库(KingbaseES)集群安装手册-麒麟V10-海光(第 8 章高可用参数表、第 11 章切换演练)
- 选型上下文:PostgreSQL信创替代选型