Skip to content

KingBaseES 跨平台复制

跨平台复制是 KingBaseES 提供的一种高级复制功能,允许在不同操作系统平台之间进行数据同步。这一功能为企业提供了更大的灵活性,可以根据业务需求选择合适的操作系统平台,同时保持数据的一致性和可用性。

跨平台复制概述

工作原理

跨平台复制的工作原理与常规复制类似,但需要处理不同操作系统之间的差异:

  1. 主库生成 WAL 日志(与平台无关)
  2. WAL 日志通过网络传输到备库
  3. 备库接收并解析 WAL 日志
  4. 备库根据本地操作系统的特性,将 WAL 日志转换为适合本地平台的格式
  5. 备库应用转换后的 WAL 日志,完成数据同步

支持的平台组合

KingBaseES 支持以下跨平台复制组合:

主库平台备库平台支持版本
LinuxLinuxV8 R6+
LinuxWindowsV8 R6+
WindowsLinuxV8 R7+
WindowsWindowsV8 R6+
Linux混合平台V8 R7+
Windows混合平台V8 R7+

适用场景

  • 平台迁移:从一个操作系统平台迁移到另一个平台
  • 混合部署:部分节点使用 Linux,部分节点使用 Windows
  • 业务隔离:不同业务系统使用不同的操作系统平台
  • 灾备部署:主库和备库部署在不同的操作系统平台,提高灾备能力

配置前准备

环境要求

组件要求
KingBaseES 版本V8 R6 及以上版本,建议使用 V8 R7 以获得更好的跨平台支持
主备库版本必须使用相同的 KingBaseES 版本
操作系统版本支持主流的 Linux 发行版(如 CentOS、Red Hat、Ubuntu)和 Windows Server 版本
硬件配置备库硬件配置建议不低于主库
网络主备库之间网络连接稳定,带宽充足
存储备库存储空间不小于主库

软件准备

  • KingBaseES 安装包(对应平台版本)
  • 主库的基础备份(用于初始化备库)
  • 网络工具(用于测试主备库之间的连接)

详细配置步骤

1. 主库配置

1.1 修改 kingbase.conf 文件

ini
# ---------------------\n# WAL 配置\n# ---------------------\n# 启用归档模式
archive_mode = on

# 配置归档命令
archive_command = 'cp %p /path/to/archive/%f'

# 配置 WAL 级别
wal_level = replica

# ---------------------\n# 复制配置\n# ---------------------\n# 配置最大 WAL 发送进程数
max_wal_senders = 10

# 配置 WAL 保持段数
wal_keep_segments = 64

# 配置复制槽
max_replication_slots = 10

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
# Linux 平台
sys_ctl restart -D /path/to/kingbase/data

# Windows 平台
net stop kingbase
net start kingbase

2. 备库配置

2.1 初始化备库

根据备库的操作系统平台,选择合适的初始化方法:

Linux 备库
bash
# 使用 pg_basebackup 从主库获取基础备份
pg_basebackup -h 192.168.1.100 -p 54321 -U standby_user -D /path/to/kingbase/standby_data -Fp -Xs -P -R
Windows 备库
cmd
:: 使用 pg_basebackup 从主库获取基础备份
pg_basebackup.exe -h 192.168.1.100 -p 54321 -U standby_user -D "D:\KingBase\Data\standby" -Fp -Xs -P -R

2.2 配置备库参数

根据备库的操作系统平台,修改相应的配置文件:

Linux 备库

编辑 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

创建 standby.signal 文件:

bash
touch /path/to/kingbase/standby_data/standby.signal
Windows 备库

编辑 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

创建 standby.signal 文件:

cmd
:: 在命令提示符中创建文件
type nul > "D:\KingBase\Data\standby\standby.signal"

2.3 启动备库

Linux 备库
bash
sys_ctl start -D /path/to/kingbase/standby_data
Windows 备库
cmd
:: 在命令提示符中启动服务
net start kingbase_standby

验证跨平台复制

1. 主库验证

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

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

-- 查看 WAL 发送状态
SELECT pg_current_wal_lsn(), pg_walfile_name(pg_current_wal_lsn());

2. 备库验证

sql
-- 查看备库状态
SELECT pg_is_in_recovery();

-- 查看 WAL 接收状态
SELECT pg_last_wal_receive_lsn(), pg_walfile_name(pg_last_wal_receive_lsn());

-- 查看 WAL 应用状态
SELECT pg_last_wal_replay_lsn(), pg_walfile_name(pg_last_wal_replay_lsn());

-- 查看复制延迟
SELECT pg_wal_lsn_diff(pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn()) AS replay_lag;

3. 数据一致性验证

bash
# 在主库创建测试表并插入数据
# Linux 主库
psql -h localhost -p 54321 -U test_user -d test_db -c "CREATE TABLE test_cross (id serial primary key, name varchar(50)); INSERT INTO test_cross (name) VALUES ('test');"

# Windows 主库
psql.exe -h localhost -p 54321 -U test_user -d test_db -c "CREATE TABLE test_cross (id serial primary key, name varchar(50)); INSERT INTO test_cross (name) VALUES ('test');"

# 在备库查询数据,验证同步
# Linux 备库
psql -h localhost -p 54322 -U test_user -d test_db -c "SELECT * FROM test_cross;"

# Windows 备库
psql.exe -h localhost -p 54322 -U test_user -d test_db -c "SELECT * FROM test_cross;"

故障排除

1. 备库无法连接到主库

症状:备库无法连接到主库,报错信息包含 "connection refused" 或 "authentication failed"

排查步骤

  1. 检查主备库之间的网络连接

    bash
    # Linux 平台
    ping 192.168.1.100
    telnet 192.168.1.100 54321
    
    # Windows 平台
    ping 192.168.1.100
    telnet 192.168.1.100 54321
  2. 检查主库的 pg_hba.conf 配置,确保允许备库连接

  3. 检查复制用户的权限和密码

  4. 检查主库的监听地址和端口配置

解决方案

  • 修复网络连接问题
  • 调整 pg_hba.conf 配置,允许备库连接
  • 重新配置复制用户权限和密码
  • 确保主库的监听地址和端口配置正确

2. 复制延迟过高

症状:备库与主库之间的复制延迟过高

排查步骤

  1. 检查主备库之间的网络带宽和延迟
  2. 检查主库的 WAL 生成速率
  3. 检查备库的系统资源使用情况
  4. 检查备库的恢复进程数

解决方案

  • 增加网络带宽
  • 优化主库的查询性能,减少 WAL 生成速率
  • 增加备库的硬件资源
  • 调整备库的恢复参数,如 max_worker_processes

3. 备库应用 WAL 日志失败

症状:备库无法应用主库的 WAL 日志,报错信息包含 "invalid record length at"

排查步骤

  1. 检查主备库的 KingBaseES 版本是否一致
  2. 检查主备库的字符集配置是否一致
  3. 检查主备库的数据库编码是否一致
  4. 检查 WAL 日志是否损坏

解决方案

  • 确保主备库使用相同的 KingBaseES 版本
  • 确保主备库的字符集和数据库编码一致
  • 重新初始化备库
  • 检查并修复 WAL 日志损坏问题

版本差异

特性V8 R6V8 R7
Linux → Linux 复制支持支持
Linux → Windows 复制支持支持
Windows → Linux 复制不支持支持
Windows → Windows 复制支持支持
混合平台复制有限支持全面支持
跨平台备份恢复基本支持增强支持
跨平台监控有限支持全面支持

最佳实践

1. 配置建议

  • 版本选择:优先使用 V8 R7 版本,以获得更好的跨平台支持
  • 字符集配置:确保主备库使用相同的字符集和数据库编码
  • 时区配置:确保主备库使用相同的时区设置
  • 权限配置:复制用户只授予必要的权限

2. 性能优化

  • 网络优化:使用专用的网络链路进行复制,减少网络延迟
  • WAL 优化:优化主库的 WAL 生成,减少复制负载
  • 并行恢复:根据备库的 CPU 核心数调整并行恢复进程数
  • 批量应用:启用批量应用功能,提高复制性能

3. 安全配置

  • 加密传输:使用 SSL/TLS 加密复制数据
  • 访问控制:限制复制用户的连接来源
  • 定期密码更换:定期更换复制用户密码
  • 防火墙配置:配置防火墙规则,只允许必要的端口访问

4. 灾备部署

  • 多平台部署:将主库和备库部署在不同的操作系统平台,提高灾备能力
  • 异地部署:将备库部署在不同的地理位置,提高灾难恢复能力
  • 定期演练:定期进行跨平台复制的故障恢复演练
  • 监控告警:配置监控告警,及时发现复制问题

常见问题(FAQ)

1. 跨平台复制支持哪些 KingBaseES 版本?

跨平台复制支持 KingBaseES V8 R6 及以上版本,但建议使用 V8 R7 版本以获得更好的跨平台支持和性能。

2. 跨平台复制的性能如何?

跨平台复制的性能与常规复制类似,但可能会受到不同操作系统之间差异的影响。通过优化网络配置、WAL 生成和恢复参数,可以获得良好的复制性能。

3. 如何从一个平台迁移到另一个平台?

可以使用跨平台复制进行平台迁移:

  1. 在目标平台上配置备库
  2. 等待备库与主库数据同步
  3. 执行主备切换,将备库提升为主库
  4. 验证新主库的功能正常
  5. 迁移完成后,可选择保留或删除旧主库

4. 跨平台复制支持逻辑复制吗?

是的,跨平台复制支持逻辑复制,但需要注意版本兼容性和平台差异。建议使用 V8 R7 版本以获得更好的逻辑复制支持。

5. 如何监控跨平台复制?

可以使用以下方法监控跨平台复制:

  • 使用 SQL 命令查询复制状态
  • 使用 KingBaseES Manager (KEM) 进行图形化监控
  • 使用 Prometheus + Grafana 进行监控
  • 编写自定义脚本定期检查复制状态

总结

跨平台复制是 KingBaseES 提供的一项强大功能,允许在不同操作系统平台之间进行数据同步。通过正确配置和维护跨平台复制,可以提高系统的灵活性和可用性。

在配置跨平台复制时,需要注意以下几点:

  • 确保主备库使用相同的 KingBaseES 版本
  • 确保主备库的字符集、数据库编码和时区设置一致
  • 优化网络配置,减少复制延迟
  • 定期监控复制状态,及时发现和解决问题
  • 定期进行故障恢复演练,验证跨平台复制的可靠性

V8 R7 版本对跨平台复制进行了多项增强,包括全面支持 Windows → Linux 复制、增强的混合平台支持和跨平台监控等,建议在新部署或升级时优先考虑使用 V8 R7 版本。