外观
KingBaseES 跨平台复制
跨平台复制是 KingBaseES 提供的一种高级复制功能,允许在不同操作系统平台之间进行数据同步。这一功能为企业提供了更大的灵活性,可以根据业务需求选择合适的操作系统平台,同时保持数据的一致性和可用性。
跨平台复制概述
工作原理
跨平台复制的工作原理与常规复制类似,但需要处理不同操作系统之间的差异:
- 主库生成 WAL 日志(与平台无关)
- WAL 日志通过网络传输到备库
- 备库接收并解析 WAL 日志
- 备库根据本地操作系统的特性,将 WAL 日志转换为适合本地平台的格式
- 备库应用转换后的 WAL 日志,完成数据同步
支持的平台组合
KingBaseES 支持以下跨平台复制组合:
| 主库平台 | 备库平台 | 支持版本 |
|---|---|---|
| Linux | Linux | V8 R6+ |
| Linux | Windows | V8 R6+ |
| Windows | Linux | V8 R7+ |
| Windows | Windows | V8 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 = 101.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
# Linux 平台
sys_ctl restart -D /path/to/kingbase/data
# Windows 平台
net stop kingbase
net start kingbase2. 备库配置
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 -RWindows 备库
cmd
:: 使用 pg_basebackup 从主库获取基础备份
pg_basebackup.exe -h 192.168.1.100 -p 54321 -U standby_user -D "D:\KingBase\Data\standby" -Fp -Xs -P -R2.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.signalWindows 备库
编辑 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_dataWindows 备库
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"
排查步骤:
检查主备库之间的网络连接
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检查主库的 pg_hba.conf 配置,确保允许备库连接
检查复制用户的权限和密码
检查主库的监听地址和端口配置
解决方案:
- 修复网络连接问题
- 调整 pg_hba.conf 配置,允许备库连接
- 重新配置复制用户权限和密码
- 确保主库的监听地址和端口配置正确
2. 复制延迟过高
症状:备库与主库之间的复制延迟过高
排查步骤:
- 检查主备库之间的网络带宽和延迟
- 检查主库的 WAL 生成速率
- 检查备库的系统资源使用情况
- 检查备库的恢复进程数
解决方案:
- 增加网络带宽
- 优化主库的查询性能,减少 WAL 生成速率
- 增加备库的硬件资源
- 调整备库的恢复参数,如
max_worker_processes
3. 备库应用 WAL 日志失败
症状:备库无法应用主库的 WAL 日志,报错信息包含 "invalid record length at"
排查步骤:
- 检查主备库的 KingBaseES 版本是否一致
- 检查主备库的字符集配置是否一致
- 检查主备库的数据库编码是否一致
- 检查 WAL 日志是否损坏
解决方案:
- 确保主备库使用相同的 KingBaseES 版本
- 确保主备库的字符集和数据库编码一致
- 重新初始化备库
- 检查并修复 WAL 日志损坏问题
版本差异
| 特性 | V8 R6 | V8 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. 如何从一个平台迁移到另一个平台?
可以使用跨平台复制进行平台迁移:
- 在目标平台上配置备库
- 等待备库与主库数据同步
- 执行主备切换,将备库提升为主库
- 验证新主库的功能正常
- 迁移完成后,可选择保留或删除旧主库
4. 跨平台复制支持逻辑复制吗?
是的,跨平台复制支持逻辑复制,但需要注意版本兼容性和平台差异。建议使用 V8 R7 版本以获得更好的逻辑复制支持。
5. 如何监控跨平台复制?
可以使用以下方法监控跨平台复制:
- 使用 SQL 命令查询复制状态
- 使用 KingBaseES Manager (KEM) 进行图形化监控
- 使用 Prometheus + Grafana 进行监控
- 编写自定义脚本定期检查复制状态
总结
跨平台复制是 KingBaseES 提供的一项强大功能,允许在不同操作系统平台之间进行数据同步。通过正确配置和维护跨平台复制,可以提高系统的灵活性和可用性。
在配置跨平台复制时,需要注意以下几点:
- 确保主备库使用相同的 KingBaseES 版本
- 确保主备库的字符集、数据库编码和时区设置一致
- 优化网络配置,减少复制延迟
- 定期监控复制状态,及时发现和解决问题
- 定期进行故障恢复演练,验证跨平台复制的可靠性
V8 R7 版本对跨平台复制进行了多项增强,包括全面支持 Windows → Linux 复制、增强的混合平台支持和跨平台监控等,建议在新部署或升级时优先考虑使用 V8 R7 版本。
