目录标题
KingBase repmgr从库故障处理完整指南
📋 环境信息
- 分析时间: 2025-11-05
- KingBase实例: kingbase-dd5d7e86-replica0-0 (从库)
- KingBase实例: kingbase-dd5d7e86-replica1-0 (主库)
- repmgr版本: KingBase V8
- 连接方式:
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin kingbase
🏗️ 集群架构概览
当前集群状态
# 主库信息
Name: replica1
Role: primary
Status: running
Location: default
Priority: 100
Timeline: 2
Pod: kingbase-dd5d7e86-replica1-0
# 从库信息
Name: replica0
Role: standby
Status: running
Upstream: replica1
Location: default
Priority: 100
Timeline: 2
LSN_Lag: 0 bytes
Pod: kingbase-dd5d7e86-replica0-0
🔧 测试环境准备
1. 创建测试数据库
-- 在主库执行
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin kingbase -c "CREATE DATABASE repmgr_test_db;"
2. 创建测试用户
-- 在主库执行
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "CREATE USER repmgr_test_user WITH PASSWORD 'test123';"
3. 创建测试表
-- 在主库执行
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "
CREATE TABLE test_replication(
id SERIAL PRIMARY KEY,
data VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);"
4. 插入测试数据
-- 在主库执行
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "
INSERT INTO test_replication(data) VALUES
('test data 1'),
('test data 2'),
('test data 3');"
🔍 主从复制状态检查
1. 查看repmgr集群状态
# 在任意节点执行
kubectl exec kingbase-dd5d7e86-replica0-0 -n qfusion-admin -- su - kingbase -c \
'/opt/Kingbase/ES/V8/kingbase/bin/repmgr cluster show'
输出示例:
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string
----+----------+---------+-----------+----------+----------+----------+----------+---------+------------------------
1 | replica0 | standby | running | replica1 | default | 100 | 2 | 0 bytes | host=245.0.0.31...
2 | replica1 | primary | * running | | default | 100 | 2 | | host=245.0.4.182...
2. 主库复制会话检查
-- 在主库执行
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "
SELECT
application_name,
state,
sync_state,
write_lag,
flush_lag,
replay_lag,
sent_lsn,
write_lsn,
flush_lsn,
replay_lsn
FROM pg_stat_replication;"
输出示例:
application_name | state | sync_state | write_lag | flush_lag | replay_lag | sent_lsn | write_lsn | flush_lsn | replay_lsn
------------------+-----------+------------+-----------+-----------+------------+----------+-----------+-----------+------------
replica0 | streaming | quorum | | | | 0/80034D0| 0/80034D0 | 0/80034D0 | 0/80034D0
3. 数据一致性验证
-- 主库验证
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "SELECT * FROM test_replication;"
-- 从库验证(只读)
/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "SELECT * FROM test_replication;"
验证结果:
主库结果:
id | data | created_at
----+-------------+----------------------------
1 | test data 1 | 2025-11-05 16:58:17.024983
2 | test data 2 | 2025-11-05 16:58:17.024983
3 | test data 3 | 2025-11-05 16:58:17.024983
从库结果(应该相同):
id | data | created_at
----+-------------+----------------------------
1 | test data 1 | 2025-11-05 16:58:17.024983
2 | test data 2 | 2025-11-05 16:58:17.024983
3 | test data 3 | 2025-11-05 16:58:17.024983
🚨 从库故障处理流程
4.1 从库重建流程
场景1: 从库Pod异常
# 1. 删除异常的从库Pod
kubectl delete pod kingbase-dd5d7e86-replica0-0 -n qfusion-admin
# 2. 等待Pod自动重建完成
kubectl get pod kingbase-dd5d7e86-replica0-0 -n qfusion-admin -w
# 3. 进入重建的Pod
kubectl exec -it kingbase-dd5d7e86-replica0-0 -n qfusion-admin -- bash
# 4. 切换到kingbase用户
su - kingbase
# 5. 强制克隆主库数据
repmgr standby clone --force
# 6. 启动本地KingBase服务
/opt/Kingbase/ES/V8/kingbase/bin/sys_ctl -D /opt/Kingbase/ES/V8/kingbase/data start
# 7. 注册从库到repmgr集群
repmgr standby register
# 8. 验证集群状态
repmgr cluster show
场景2: 数据同步中断
# 1. 进入从库Pod
kubectl exec -it kingbase-dd5d7e86-replica0-0 -n qfusion-admin -- bash
# 2. 切换到kingbase用户
su - kingbase
# 3. 停止KingBase服务
/opt/Kingbase/ES/V8/kingbase/bin/sys_ctl -D /opt/Kingbase/ES/V8/kingbase/data stop
# 4. 强制重新克隆
repmgr standby clone --force -F
# 5. 启动服务
/opt/Kingbase/ES/V8/kingbase/bin/sys_ctl -D /opt/Kingbase/ES/V8/kingbase/data start
# 6. 注册从库
repmgr standby register --force
# 7. 验证状态
repmgr cluster show
场景3: repmgr状态异常
# 1. 进入从库Pod
kubectl exec -it kingbase-dd5d7e86-replica0-0 -n qfusion-admin -- bash
# 2. 切换到kingbase用户
su - kingbase
# 3. 检查当前状态
repmgr node status
# 4. 如果状态异常,重新注册
repmgr standby unregister --node-id=1
repmgr standby register --force
# 5. 验证集群状态
repmgr cluster show
4.2 复制状态详细检查
主库复制状态检查
-- 详细的复制状态查询
SELECT
application_name,
state,
sync_state,
backend_start,
backend_xmin,
state_change,
sent_lsn,
write_lsn,
flush_lsn,
replay_lsn,
write_lag,
flush_lag,
replay_lag,
reply_time
FROM pg_stat_replication;
从库复制状态检查
-- 在从库执行
SELECT
pg_last_wal_receive_lsn(),
pg_last_wal_replay_lsn(),
pg_last_xact_replay_timestamp(),
pg_is_in_recovery(),
pg_is_wal_replay_paused();
4.3 故障诊断命令
检查repmgr配置
# 查看repmgr配置
cat /opt/Kingbase/ES/V8/kingbase/etc/repmgr.conf
# 检查repmgr日志
tail -f /opt/Kingbase/ES/V8/kingbase/log/repmgrd.log
检查KingBase日志
# 查看KingBase日志
tail -f /opt/Kingbase/ES/V8/kingbase/log/kingbase-*.csv
# 查看错误日志
grep "ERROR" /opt/Kingbase/ES/V8/kingbase/log/*.log
检查系统资源
# 检查磁盘空间
df -h
# 检查内存使用
free -h
# 检查网络连接
ping 主库IP地址
🔧 完整故障处理示例
场景:从库数据不一致,需要重建
#!/bin/bash
# KingBase从库重建脚本
echo "=== KingBase从库重建开始 ==="
# 1. 环境检查
echo "1. 检查当前集群状态"
kubectl exec kingbase-dd5d7e86-replica1-0 -n qfusion-admin -- su - kingbase -c \
'/opt/Kingbase/ES/V8/kingbase/bin/repmgr cluster show'
# 2. 删除从库Pod
echo "2. 删除从库Pod"
kubectl delete pod kingbase-dd5d7e86-replica0-0 -n qfusion-admin
# 3. 等待Pod重建
echo "3. 等待Pod重建..."
kubectl wait --for=condition=ready pod/kingbase-dd5d7e86-replica0-0 -n qfusion-admin --timeout=300s
# 4. 进入新Pod执行重建
echo "4. 执行从库重建"
kubectl exec kingbase-dd5d7e86-replica0-0 -n qfusion-admin -- su - kingbase -c "
# 克隆主库数据
repmgr standby clone --force
# 启动服务
/opt/Kingbase/ES/V8/kingbase/bin/sys_ctl -D /opt/Kingbase/ES/V8/kingbase/data start
# 注册从库
repmgr standby register
# 验证状态
repmgr cluster show
"
# 5. 验证复制状态
echo "5. 验证复制状态"
kubectl exec kingbase-dd5d7e86-replica1-0 -n qfusion-admin -- su - kingbase -c \
'/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "
SELECT
application_name,
state,
sync_state,
replay_lag
FROM pg_stat_replication;"'
# 6. 数据一致性验证
echo "6. 数据一致性验证"
echo "主库数据:"
kubectl exec kingbase-dd5d7e86-replica1-0 -n qfusion-admin -- su - kingbase -c \
'/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "SELECT COUNT(*) FROM test_replication;"'
echo "从库数据:"
kubectl exec kingbase-dd5d7e86-replica0-0 -n qfusion-admin -- su - kingbase -c \
'/opt/Kingbase/ES/V8/kingbase/bin/ksql -Urdsadmin repmgr_test_db -c "SELECT COUNT(*) FROM test_replication;"'
echo "=== 从库重建完成 ==="
📊 监控和告警
关键监控指标
1. 复制延迟监控
-- 主库监控复制延迟
SELECT
application_name,
EXTRACT(EPOCH FROM (now() - backend_start)) AS connection_age,
EXTRACT(EPOCH FROM (now() - reply_time)) AS reply_delay,
CASE
WHEN replay_lag IS NULL THEN 'unknown'
WHEN replay_lag < '1 second'::interval THEN 'good'
WHEN replay_lag < '10 seconds'::interval THEN 'warning'
ELSE 'critical'
END as replication_health
FROM pg_stat_replication;
2. 集群状态监控
# 定期检查脚本
#!/bin/bash
# repmgr集群健康检查
CLUSTER_STATUS=$(kubectl exec kingbase-dd5d7e86-replica0-0 -n qfusion-admin -- su - kingbase -c \
'/opt/Kingbase/ES/V8/kingbase/bin/repmgr cluster show --csv' | grep -E '(standby|primary)' | wc -l)
if [ $CLUSTER_STATUS -eq 2 ]; then
echo "✅ 集群状态正常"
else
echo "❌ 集群状态异常,需要检查"
# 发送告警
fi
🎯 最佳实践
1. 定期维护
- 定期检查复制延迟
- 定期验证数据一致性
- 定期备份repmgr配置
- 定期检查磁盘空间
2. 故障预防
- 监控系统资源使用
- 设置合理的告警阈值
- 定期演练故障切换
- 建立故障处理SOP
3. 性能优化
- 优化网络连接
- 合理配置repmgr参数
- 定期清理日志文件
- 监控复制性能
📋 故障处理检查清单
日常检查项
- 集群状态正常
- 复制延迟在可接受范围内
- 数据一致性验证通过
- 日志文件大小正常
- 系统资源充足
故障处理步骤
- 确认故障现象
- 定位故障原因
- 制定处理方案
- 执行故障处理
- 验证处理结果
- 更新监控配置
- 记录处理过程
🚨 应急联系方式
- 技术支持: [KingBase官方支持]
- 运维团队: [内部运维联系方式]
- 监控系统: [监控平台地址]
文档版本: v1.0
创建时间: 2025-11-05
适用环境: KingBase V8 + repmgr + Kubernetes
维护人员: DBA团队
📝 测试验证记录
测试环境信息
- 测试时间: 2025-11-05 16:58
- 测试数据库: repmgr_test_db
- 测试用户: repmgr_test_user
- 测试表: test_replication
测试数据插入
-- 主库插入测试数据
INSERT INTO test_replication(data) VALUES
('test data 1'),
('test data 2'),
('test data 3');
复制验证结果
- ✅ 主库数据插入成功
- ✅ 从库数据同步正常
- ✅ 复制延迟: 0 bytes
- ✅ 集群状态: running
- ✅ 同步状态: quorum
清理测试数据
-- 清理测试环境(生产环境请谨慎执行)
DROP TABLE test_replication;
DROP USER repmgr_test_user;
DROP DATABASE repmgr_test_db;
这份指南提供了完整的KingBase repmgr从库故障处理流程,包括环境准备、状态检查、故障处理、监控告警等各个环节,可作为实际生产环境的参考手册。
KingBase从库故障处理指南
272

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



