Skip to content

KingBaseES 备库复制配置

备库复制是 KingBaseES 实现高可用性的基础架构,通过复制主库的日志来保持备库与主库的数据一致性。正确配置备库复制对于确保数据安全和业务连续性至关重要。

备库复制类型

1. 物理备库

物理备库是通过字节级别的复制实现的,备库与主库具有完全相同的物理存储结构。

特点

  • 复制级别:物理级别,字节级复制
  • 性能影响:对主库性能影响较小
  • 数据一致性:与主库完全一致
  • 故障恢复:可以快速提升为主库
  • 只读访问:支持只读查询

2. 逻辑备库

逻辑备库是通过逻辑级别的复制实现的,可以选择性地复制特定的数据库或表。

特点

  • 复制级别:逻辑级别,基于SQL语句或行级变更
  • 性能影响:对主库性能影响较大
  • 数据一致性:逻辑一致,可能存在延迟
  • 故障恢复:恢复时间较长
  • 灵活性:支持选择性复制、跨版本复制

物理备库配置步骤

1. 主库配置

1.1 修改 kingbase.conf 文件

ini
# 启用归档模式
archive_mode = on
archive_command = 'cp %p /path/to/archive/%f'

# 配置 WAL 级别
wal_level = replica

# 配置最大 WAL 发送进程数
max_wal_senders = 10

# 配置 WAL 保持时间
wal_keep_segments = 64

# 配置同步复制参数(可选)
synchronous_standby_names = 'standby1,standby2'

1.2 修改 pg_hba.conf 文件

添加备库的连接权限:

# 允许备库连接进行复制
host    replication     standby_user     192.168.1.100/32    md5

1.3 创建复制用户

sql
CREATE USER standby_user REPLICATION LOGIN ENCRYPTED PASSWORD 'standby_password';

1.4 重启主库

bash
sys_ctl restart -D /path/to/kingbase/data

2. 备库配置

2.1 准备备库数据目录

bash
# 删除备库数据目录(如果存在)
rm -rf /path/to/kingbase/standby_data

# 使用 pg_basebackup 从主库复制数据
pg_basebackup -h 192.168.1.100 -p 54321 -U standby_user -D /path/to/kingbase/standby_data -Fp -Xs -P

2.2 创建 standby.signal 文件

在备库数据目录中创建 standby.signal 文件,表示该实例为备库:

bash
touch /path/to/kingbase/standby_data/standby.signal

2.3 修改备库 kingbase.conf 文件

ini
# 配置备库角色
primary_conninfo = 'host=192.168.1.100 port=54321 user=standby_user password=standby_password application_name=standby1'

# 配置恢复模式
recovery_target_timeline = 'latest'

# 配置备库是否允许只读访问
hot_standby = on

# 配置最大恢复进程数
max_standby_streaming_delay = 30s

2.4 启动备库

bash
sys_ctl start -D /path/to/kingbase/standby_data

3. 验证复制状态

在主库上执行以下命令验证复制状态:

sql
-- 查看复制槽状态
SELECT * FROM pg_stat_replication;

-- 查看备库状态
SELECT * FROM pg_stat_wal_receiver;

逻辑备库配置步骤

1. 主库配置

1.1 修改 kingbase.conf 文件

ini
# 启用逻辑复制
wal_level = logical

# 配置最大 WAL 发送进程数
max_wal_senders = 10

# 配置最大逻辑复制槽数
max_replication_slots = 10

1.2 修改 pg_hba.conf 文件

添加逻辑复制的连接权限:

# 允许逻辑复制连接
host    replication     logical_user     192.168.1.100/32    md5

1.3 创建逻辑复制用户

sql
CREATE USER logical_user REPLICATION LOGIN ENCRYPTED PASSWORD 'logical_password';

1.4 创建发布

sql
-- 创建发布,复制所有表
CREATE PUBLICATION my_publication FOR ALL TABLES;

-- 或选择性复制特定表
CREATE PUBLICATION my_publication FOR TABLE table1, table2;

2. 备库配置

2.1 创建订阅

sql
-- 创建订阅
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=192.168.1.100 port=54321 user=logical_user password=logical_password dbname=testdb'
PUBLICATION my_publication;

3. 验证逻辑复制状态

在主库上执行以下命令验证发布状态:

sql
SELECT * FROM pg_publication;
SELECT * FROM pg_publication_tables;

在备库上执行以下命令验证订阅状态:

sql
SELECT * FROM pg_subscription;
SELECT * FROM pg_stat_subscription;

版本差异

特性V8 R6V8 R7
物理备库支持流复制和归档复制增强了并行恢复能力,支持级联复制
逻辑备库支持基本的逻辑复制功能增强了逻辑复制的性能和可靠性,支持更多的数据类型
复制延迟较高优化了复制延迟,特别是在高并发场景下
级联复制不支持支持级联复制,允许备库作为其他备库的主库
同步复制支持增强了同步复制的可靠性,支持多备库同步
复制监控基本监控提供了更丰富的监控指标和视图

最佳实践

1. 复制模式选择

  • 异步复制:适合对数据一致性要求不严格,但对性能要求较高的场景
  • 同步复制:适合对数据一致性要求严格,但可以接受一定性能影响的场景
  • 半同步复制:平衡了性能和数据一致性,是大多数场景的推荐选择

2. 监控与告警

  • 监控复制延迟,设置合理的告警阈值
  • 监控 WAL 发送和接收进程状态
  • 监控复制槽的使用情况,避免 WAL 日志堆积
  • 定期验证备库的数据一致性

3. 备份策略

  • 备库也需要定期进行备份,避免主备库同时故障
  • 可以在备库上执行备份,减轻主库的负担
  • 定期进行恢复演练,验证备份的可用性

4. 网络配置

  • 使用专用的网络链路进行复制,避免网络拥塞
  • 配置合理的网络超时参数
  • 考虑使用压缩传输,减少网络带宽消耗

常见问题(FAQ)

1. 如何监控复制延迟?

可以通过以下方式监控复制延迟:

sql
-- 在主库上查看
SELECT application_name, state, sync_priority, sync_state, 
       pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn) AS send_lag, 
       pg_wal_lsn_diff(sent_lsn, write_lsn) AS write_lag, 
       pg_wal_lsn_diff(write_lsn, flush_lsn) AS flush_lag, 
       pg_wal_lsn_diff(flush_lsn, replay_lsn) AS replay_lag
FROM pg_stat_replication;

-- 在备库上查看
SELECT pg_wal_lsn_diff(pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn()) AS replay_lag;

2. 复制延迟过高怎么办?

  • 检查网络带宽和延迟
  • 调整主库的 WAL 级别和归档参数
  • 增加备库的恢复进程数
  • 考虑使用级联复制,减轻主库负担
  • 检查备库的系统资源使用情况(CPU、内存、磁盘 I/O)

3. 如何处理复制中断?

  • 检查主备库的网络连接
  • 检查复制用户的权限
  • 检查主库的 WAL 日志是否完整
  • 检查备库的恢复进程状态
  • 如果无法恢复,可以考虑重新初始化备库

4. 物理备库和逻辑备库可以同时使用吗?

是的,可以同时配置物理备库和逻辑备库,以满足不同的业务需求。物理备库用于高可用,逻辑备库用于选择性复制或数据分析。

5. 如何将备库提升为主库?

可以使用以下命令将备库提升为主库:

bash
# 在备库上执行
pg_ctl promote -D /path/to/kingbase/standby_data

或者在 SQL 中执行:

sql
SELECT pg_promote();

6. 如何配置级联复制?

级联复制是指一个备库同时作为另一个备库的主库。配置步骤如下:

  1. 在主库上启用级联复制
  2. 在一级备库上配置允许级联复制
  3. 在二级备库上配置连接到一级备库

总结

KingBaseES 提供了强大的备库复制功能,支持物理备库和逻辑备库两种模式。DBA 需要根据业务需求选择合适的复制模式,并按照最佳实践进行配置和监控。

在版本选择上,V8 R7 提供了更强大的复制功能和更好的性能,建议在新部署或升级时优先考虑。对于已有 V8 R6 环境,可以根据业务需求逐步升级到 V8 R7 版本,以获得更好的复制体验。