GBase 8s Enterprise Replication 主‑目标复制示例
Enterprise Replication(简称 ER)是 GBase 8s 重要的数据复制能力,主‑目标(主从)复制模式是最常用的复制场景:仅将主端的数据变更同步复制到目标端,目标端本地产生的数据修改不会反向同步回主端,适用于数据分发、报表卸载、读写分离等业务场景。
本文基于官方示例文档完整演示 ER 主‑目标复制的环境准备、服务器组定义、复制对象创建与激活的全流程,所有命令、输出样例均保留原文,可供运维人员做环境部署、功能验证参考。
1. 复制环境准备
本示例的复制环境由以下组成:
三台计算机(s1 、s2 和 s3)分别是数据库服务器 usa 、italy 和 japan 的主机。每台计算机都具有与其它两台计算机的活动网络连接。
数据库服务器 usa 、italy 和 japan 分别是数据库服务器组 g_usa 、g_italy 和 g_japan 的成员。
每个数据库服务器的 sqlhosts 文件必须具有以下连接信息:
g_usa group - - i=1
usa ontlitcp s1 techpubs1 g=g_usa
g_italy group - - i=8
italy ontlitcp s2 techpubs2 g=g_italy
g_japan group - - i=6
japan ontlitcp s3 techpubs6 g=g_japan必须为行数据创建 sbspace 并将 CDR_QDATA_SBSPACE 参数设置为该 sbspace 的位置。
除了在 italy 和 japan 上创建样本数据库之外,此示例中的所有命令都是从计算机 s1 上发出的。
用于本示例的数据库是具有日志记录的完全相同的 stores_demo 数据库,如下所示:
在 usa 数据库服务器上创建名为 stores 的数据库:
s1> dbaccessdemo -log stores在 italy 数据库服务器上创建名为 stores 的数据库:
s1> rlogin s2
s2> dbaccessdemo -log stores在 japan 数据库服务器上创建名为 stores 的数据库:
s1> rlogin s3
s3> dbaccessdemo -log stores2. 主‑目标示例
在主‑目标复制中,只有对主表的更改才复制到复制中的其他表中。不会复制对辅助表的更改。
在本示例中,把 g_usa 和 g_italy 数据库服务器组定义为 Enterprise Replication 服务器并创建复制 repl1。
要定义数据库服务器组并创建复制:
- 创建并将 usa 数据库服务器定义为复制服务器的数据库:
cdr define server --init g_usa--init 选项指定该服务器是一个新的复制服务器。在定义复制服务器时,必须使用数据库服务器组的名称( g_usa)而不是数据库服务器的名称。
2. 显示所定义的复制服务器,以验证定义是否成功:
cdr list server命令返回以下信息:
SERVER ID STATE STATUS QUEUE CONNECTION CHANGED
----------------------------------------------------------
g_usa 1 Active Local 03. 将另一个数据库服务器 italy 定义为复制服务器:
cdr define server --connect=italy --init --sync=g_usa g_italy--connect 选项允许您在 s1 计算机上工作时定义 italy。--sync 选项指示此命令将已定义的复制服务器(g_usa)用作新定义的模式。--sync 选项也将两个复制服务器链接到一个复制环境中。
4. 验证第二个定义是否成功:
cdr list server命令返回以下信息:
SERVER ID STATE STATUS QUEUE CONNECTION CHANGED
----------------------------------------------------------
g_italy 8 Active Connected 0 JUN 14 14:38:44 2000
g_usa 1 Active Local 05. 定义复制 repl1:
cdr define replicate --conflict=ignore repl1 \
"P stores@g_usa:informix.manufact" \
"select * from manufact" \
"R stores@g_italy:informix.manufact" \
"select * from manufact"说明:以上为单条完整命令,行末尾反斜杠
\代表命令换行延续。
这一步指定应该忽略冲突,并描述了复制中的两个参与者 usa 和 italy :
- P 表示在该复制中 usa 是主服务器。即,如果选择的列中的任何数据更改,那么更改的数据应当发送到辅助服务器上。
- R 表示在该复制中 italy 是辅助服务器(仅接收)。指定的表和列接收从主服务器发送的信息。对 italy 上那些列的更改不会被复制。
6. 显示所定义的复制,以便可以验证定义是否成功:
cdr list replicate命令返回以下信息:
CURRENTLY DEFINED REPLICATES
------------------------------------------------
REPLICATE: repl1
STATE: Inactive
CONFLICT: Ignore
FREQUENCY: immediate
QUEUE SIZE: 0
PARTICIPANT: g_usa:informix.manufact
g_italy:informix.manufact步骤 5 定义了一个复制,但未使该复制活动。步骤 6 的输出显示复制的状态是 INACTIVE。
7. 使复制变成活动状态:
cdr start repl18. 显示复制,这样您可以验证 STATE 是否已更改为 ACTIVE:
cdr list replicate命令返回以下信息:
CURRENTLY DEFINED REPLICATES
------------------------------------------------
REPLICATE: repl1
STATE: Active
CONFLICT: Ignore
FREQUENCY: immediate
QUEUE SIZE: 0
PARTICIPANT: g_usa:informix.manufact
g_italy:informix.manufact如果对 manufact 表进行了任何更改,那么更改将复制到复制的其他参与者上。
关键点总结:
- ER 复制配置必须使用服务器组名,不要直接写实例名;
P代表主参与者,R代表接收参与者,主‑目标模式下仅主端变更向外同步;cdr define replicate仅创建复制规则,必须执行cdr start复制才真正生效;- 前置条件务必配置好
sqlhosts、CDR_QDATA_SBSPACE 对应的 sbspace,否则复制环境无法正常初始化。
大家在实操过程中,如果遇到 cdr 命令报错、复制状态异常、数据不同步等问题,欢迎在社区评论区留言交流,后续可以补充 ER 复制常见排错思路。
热门帖子
- 12025-12-01浏览数:183726
- 22023-05-09浏览数:26431
- 42023-09-25浏览数:20095
- 52020-05-11浏览数:18821