外观
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 md51.3 创建复制用户
sql
CREATE USER standby_user REPLICATION LOGIN ENCRYPTED PASSWORD 'standby_password';1.4 重启主库
bash
sys_ctl restart -D /path/to/kingbase/data2. 备库配置
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 -P2.2 创建 standby.signal 文件
在备库数据目录中创建 standby.signal 文件,表示该实例为备库:
bash
touch /path/to/kingbase/standby_data/standby.signal2.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 = 30s2.4 启动备库
bash
sys_ctl start -D /path/to/kingbase/standby_data3. 验证复制状态
在主库上执行以下命令验证复制状态:
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 = 101.2 修改 pg_hba.conf 文件
添加逻辑复制的连接权限:
# 允许逻辑复制连接
host replication logical_user 192.168.1.100/32 md51.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 R6 | V8 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. 如何配置级联复制?
级联复制是指一个备库同时作为另一个备库的主库。配置步骤如下:
- 在主库上启用级联复制
- 在一级备库上配置允许级联复制
- 在二级备库上配置连接到一级备库
总结
KingBaseES 提供了强大的备库复制功能,支持物理备库和逻辑备库两种模式。DBA 需要根据业务需求选择合适的复制模式,并按照最佳实践进行配置和监控。
在版本选择上,V8 R7 提供了更强大的复制功能和更好的性能,建议在新部署或升级时优先考虑。对于已有 V8 R6 环境,可以根据业务需求逐步升级到 V8 R7 版本,以获得更好的复制体验。
