KingBase repmgr从库故障处理完整指南

KingBase从库故障处理指南

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从库故障处理流程,包括环境准备、状态检查、故障处理、监控告警等各个环节,可作为实际生产环境的参考手册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值