KingbaseES 流复制问题排查处理指南
前言
本手册聚焦 KingbaseES 主备流复制架构的故障排查,适用于数据库管理员(DBA)在日常运维中定位并解决复制中断、数据不一致、连接失败等问题。手册已根据 KingbaseES 实际语法规范修订,覆盖版本差异适配、常见报错处理、日常维护脚本及预防措施,兼顾 V8R3、V8R6、V9 等主流版本,可作为故障处理的标准化参考文档。
一、排错前置准备
在启动故障排查前,需先收集基础环境信息,避免因信息缺失导致排查方向偏差。
1.1 必收集信息清单
| 信息类别 | 收集方式(命令/操作) | 用途 |
|---|---|---|
| 版本信息 | 主备库执行:ksql -U system -d test -c "SELECT version();" |
确认版本一致性,适配排错方案 |
| 复制架构信息 | 主库执行:ksql -U system -d test -c "SELECT * FROM pg_stat_replication;" |
了解当前复制状态 |
| 配置文件路径 | 查看:/home/kingbase/data/kingbase.conf(数据目录下的配置文件) |
定位配置文件,检查参数 |
| 日志文件路径 | 查看 kingbase.conf 中 log_directory 参数(默认:/home/kingbase/data/sys_log) |
提取报错日志细节 |
| 节点网络信息 | 执行:ifconfig/ip addr、ping 主库IP、telnet 主库IP 54321 |
确认网络连通性 |
二、版本差异适配说明
不同 KingbaseES 版本的流复制特性存在差异,故障排查需先匹配版本特性,避免无效操作。
2.1 各版本核心差异对比表
| 特性 | V8R3 | V8R6 | V9 | 排错注意事项 |
|---|---|---|---|---|
| Hash 索引复制 | 不支持 | 支持 | 支持 | V8R3 环境若使用 Hash 索引,会导致主备数据不一致,需优先替换为 B-tree 索引 |
| 逻辑复制 | 基础支持(稳定性差) | 增强支持(容错性提升) | 增强支持(容错性提升) | V8R3 逻辑复制中断时,建议重启主备库;V8R6/V9 可通过 pg_stat_replication 定位中断点 |
| 并行恢复 | 不支持 | 支持 | 支持 | V8R3 备库恢复慢时,需检查 WAL 日志生成速度;V8R6/V9 可调整 max_parallel_workers |
| 复制槽管理 | 手动维护(需定期检查有效性) | 自动维护(无效槽标记提醒) | 自动维护(无效槽标记提醒) | V8R3 需频繁执行 SELECT * FROM pg_replication_slots 清理无效槽;V8R6/V9 关注 active 字段 |
| 同步提交配置 | 复杂(需手动指定备库列表) | 简化(支持动态调整同步模式) | 简化(支持动态调整同步模式) | V8R3 同步提交失败时,需检查 synchronous_standby_names 配置;V8R6/V9 可通过 ALTER SYSTEM 临时调整 |
| 多副本同步 | 不支持 | 有限支持(最多 2 个同步备库) | 增强支持(支持 N 个同步备库) | V9 多副本同步中断时,需检查 synchronous_standby_names 中的备库优先级;V8R6 需确认备库是否均在线 |
| 延迟备库 | 不支持 | 不支持 | 支持(可配置恢复延迟) | V9 延迟备库“不同步”可能是正常延迟,需先检查 recovery_min_apply_delay 参数 |
| 备份集成分离 | 备份工具与复制独立(需手动协同) | 备份工具与复制独立(需手动协同) | 深度集成(备份时自动暂停复制) | V9 备份后复制中断,需检查备份工具是否正常释放复制锁;V8R3/V8R6 需手动重启 wal_sender 进程 |
| 监控视图 | 基础监控(仅核心指标) | 基础监控(仅核心指标) | 增强监控(新增延迟、锁等待指标) | V9 可通过 pg_stat_replication 的 write_lag/replay_lag 定位延迟原因;V8R3/V8R6 需通过 WAL 日志量推算 |
三、常见报错及标准化处理流程
3.1 网络连接类故障
报错信息
FATAL: could not connect to the primary server: connection to server at "192.168.1.100", port 54321 failed: Connection refused
可能原因
- 主备节点网络不通(防火墙拦截、路由异常);
- 主库未监听目标端口(listen_addresses 配置错误);
- 主库服务未启动。
处理步骤(按优先级排序)
-
验证网络连通性
备库执行 ping 测试,确认主库 IP 可达:ping 192.168.1.100 -c 5 # 若丢包/超时,排查网络设备(交换机、防火墙) -
检查主库端口监听
主库执行以下命令,确认 54321 端口(默认端口)已监听:# 方式1:netstat(适用于全版本) netstat -an | grep 54321 # 预期输出:tcp 0 0 0.0.0.0:54321 0.0.0.0:* LISTEN # 方式2:ss(适用于 V8R6+) ss -tln | grep 54321若未监听,检查主库 kingbase.conf 中的 listen_addresses:
# 方式1:直接查看配置文件 grep "listen_addresses" /home/kingbase/data/kingbase.conf # 方式2:通过数据库命令查询 ksql -U system -d test -c "SHOW listen_addresses"正确配置:
listen_addresses = '*'(允许所有IP连接)或包含备库IP。修改后重启主库:systemctl restart kingbase # 或 sys_ctl restart -D /home/kingbase/data -
检查防火墙规则
主备库均执行,确认 54321 端口已开放:# 查看防火墙状态 systemctl status firewalld # 若开启,检查端口是否开放 firewall-cmd --list-ports | grep 54321 # 若未开放,临时开放(重启失效) firewall-cmd --add-port=54321/tcp # 永久开放(需重新加载) firewall-cmd --permanent -


1146

被折叠的 条评论
为什么被折叠?



