暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SUNDB数据库技术宝典 | SUNDB到SUNDB的数据同步

原创 科蓝SUNDB数据库 2023-12-20
172

1. 环境说明

1.1 拓扑图

image.png
图1 CYCLONE拓扑(Sundb–>Sundb)

1.2 服务器信息

表3 服务器配置及软件版本
image.png

2. 准备工作

准备好2台已装好Sundb的服务器,并做好关闭防火墙及关闭SELINUX操作。
如果待同步的表在源端不是空表,这部分数据如需在目标端使用,需使用gloader或其他三方工具将源端历史数据导入至目标端中,然后再开启同步。如果不需要历史数据,则直接开启同步即可,无需做数据迁移。

2.1 源端准备工作

2.1.1 创建用户及分配权限

CYCLONE在运行中会查询并处理数据,因此需要有专门运行CYCLONE的用户,并赋予其指定权限,以下创建的用户为“CDC”,用户名称可自定义。

gSQL-Master> CREATE USER cdc IDENTIFIED BY cdc;
User created.
gSQL-Master> GRANT CREATE SESSION ON DATABASE TO cdc;
Grant succeeded.
gSQL-Master> GRANT INSERT ANY TABLE,DELETE ANY TABLE,UPDATE ANY TABLE ON DATABASE TO cdc;
Grant succeeded.
gSQL-Master> GRANT CREATE OBJECT ON TABLESPACE mem_data_tbs TO cdc;
Grant succeeded.
gSQL-Master> GRANT CREATE OBJECT ON TABLESPACE mem_temp_tbs TO cdc;
Grant succeeded.
gSQL-Master> GRANT CREATE TABLE,CREATE INDEX,CREATE SEQUENCE,CREATE VIEW,ADD CONSTRAINT ON SCHEMA cdc TO cdc;
Grant succeeded.
gSQL-Master> COMMIT;
Commit complete.

2.1.2 创建两张测试表

切换至cdc用户创建T1、T2表,暂不插入测试数据。

gSQL-Master> connect cdc cdc
gSQL-Master> CREATE TABLE T1 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
gSQL-Master> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (C1);
Table altered.
gSQL-Master> COMMIT;
Commit complete.
gSQL-Master> CREATE TABLE T2 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
gSQL-Master> ALTER TABLE T2 ADD CONSTRAINT PK_T2 PRIMARY KEY (C1);
Table altered.
gSQL-Master> COMMIT;
Commit complete.

2.1.3 配置Sundb.properties.conf

需要确认的2个参数为:
DATA_STORE_MODE
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY
CYCLONE读取SUNDB的重做日志文件并执行复制。DATA_STORE_MODE值为’1’时为CDS (Concurrent Data Store)模式, '2’时为TDS (Transactional Data Store)模式。因此SUNDB要以TDS (Transactional DataStore)模式运行,该操作需要重启实例。
SUNDB的参数开启SUPPLEMENTAL LOGGING时,将记录所有表的附加日志,该操作需要重启实例。
[sunje@gs01 ~]$ cd $SUNDB_DATA/conf

[sunje@gs01 conf]$ pwd
/home/sunje/product/Sundb_data/conf
[sunje@gs01 conf]$ grep DATA_STORE_MODE Sundb.properties.conf
DATA_STORE_MODE = 2
[sunje@gs01 conf]$ grep SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY Sundb.properties.conf
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY = YES

2.1.4 配置cyclone.master.conf

以下内容为复制2张测试表的配置样例,关于该文件的其他配置参数,可参考文档末端附件中的“cyclone配置文件参数说明”表格。
[sunje@gs01 conf]$ pwd
/home/sunje/product/Sundb_data/conf
[sunje@gs01 conf]$ cat cyclone.master.conf

##################################
#       Cyclone Configure       
#        MASTER             
##################################
 USER_ID           = cdc
 USER_PW           = cdc
 GROUP_NAME = Group1
{
    PORT = 21102
    CAPTURE_TABLE =
    (
        cdc.t1,
        cdc.t2
    )
} 

2.1.5 开启归档

如果CYCLONE正在处理的重做日志文件被SUNDB再次使用,则CYCLONE将强制结束。为了保证复制的稳定运行,因此SUNDB一定要以归档日志模式运行。
首先关闭实例,在mount阶段将数据库变更为归档模式。

gSQL-Master> shutdown immediate
Shutdown success
gSQL-Slave> quit
[sunje@gs02 ~]$

然后将实例启动至MOUNT阶段,开启归档模式。

gSQL-Master> startup mount
Startup success
gSQL-Master> alter database archivelog;
Database altered.
gSQL-Master> alter system open database;
System altered.
gSQL-Master> select PROPERTY_NAME,PROPERTY_VALUE
from v$property
where PROPERTY_NAME=‘DATA_STORE_MODE’
or PROPERTY_NAME=‘SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY’;

PROPERTY_NAME                     PROPERTY_VALUE
--------------------------------- --------------
DATA_STORE_MODE                   2             
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY YES           

2 rows selected.

2.1.6 开启监听器

[sunje@gs01 conf]$ glsnr --start
Listener is started successfully.

2.2 目标端准备工作

2.2.1 创建用户及分配权限

为便于管理,建议目标端创建的同步用户名称与源端所创建的名称一致,当然如果有需要也可以设置成不同的名称,需要在cyclone.slave.conf文件中注意用户映射。

gSQL-Slave> CREATE USER cdc IDENTIFIED BY cdc;
User created.
gSQL-Slave> GRANT CREATE SESSION ON DATABASE TO cdc;
Grant succeeded.
gSQL-Slave> GRANT INSERT ANY TABLE,DELETE ANY TABLE,UPDATE ANY TABLE ON DATABASE TO cdc;
Grant succeeded.
gSQL-Slave> GRANT CREATE OBJECT ON TABLESPACE mem_data_tbs TO cdc;
Grant succeeded.
gSQL-Slave> GRANT CREATE OBJECT ON TABLESPACE mem_temp_tbs TO cdc;
Grant succeeded.
gSQL-Slave> GRANT CREATE TABLE,CREATE INDEX,CREATE SEQUENCE,CREATE VIEW,ADD CONSTRAINT ON SCHEMA cdc TO cdc;
Grant succeeded.
gSQL-Slave> COMMIT;
Commit complete.

2.2.2 创建两张测试表

切换至cdc用户创建T1、T2表。

gSQL-Slave> connect cdc cdc
gSQL-Slave> CREATE TABLE T1 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
gSQL-Slave> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (C1);
Table altered.
gSQL-Slave> COMMIT;
Commit complete.
gSQL-Slave> CREATE TABLE T2 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
gSQL-Slave> ALTER TABLE T2 ADD CONSTRAINT PK_T2 PRIMARY KEY (C1);
Table altered.
gSQL-Slave> COMMIT;
Commit complete.

2.2.3 配置cyclone.slave.conf

目标端无需修改实例配置参数,只对cyclone.slave.conf配置即可。
[sunje@gs02 ~]$ cd $SUNDB_DATA/conf
[sunje@gs02 conf]$ pwd
/home/sunje/product/Sundb_data/conf
[sunje@gs02 conf]$ cat cyclone.slave.conf

##################################
#        Cyclone Configure       #
#             SLAVE              #
##################################

 USER_ID           = cdc
 USER_PW          = cdc
 MASTER_IP         = 192.0.2.21
 HOST_PORT        = 22581

GROUP_NAME = Group1
{
    PORT              = 21102
    APPLY_TABLE = 
    (
	cdc.t1 to cdc.t1,
	cdc.t2 to cdc.t2
    )
}

2.4 开启监听器

[sunje@gs02 conf]$ glsnr --start
Listener is started successfully.

3. 启动CYCLONE服务

在启动服务时,Master与Slave均可使用–sync参数,也可对特定的表使用–sync TABLE_NAME。
参与复制的Slave的表里有数据时,由于PK重复等数据同步会失败,因此在执行同步前用户需要手动删除Slave的表数据。
使用 --reset TABLE_NAME或–reset all选项实现从当前时间点开始重新复制指定的表或所有的表。
在CYCLONE运行期间,CYCLONE的运行情况会记录在跟踪日志中,保存在$SUNDB_DATA/conf/路径下。
表4 CYCLON跟踪日志位置
image.png

3.1 源端启动Cyclone

[sunje@gs01 conf]$ cyclone --master --start --reset all
[GROUP1] Startup done as Master.

3.2 目标端启动Cyclone

[sunje@gs02 conf]$ cyclone --slave --start --reset all
[GROUP1] Startup done as Slave.

4. 数据同步验证

4.1 Master端插入数据

分别对T1、T2表中各插入1条测试数据。

[sunje@gs01 conf]$ gs
Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release Venus.3.2.5 revision(28401)
Connected to SUNDB Database.
gSQL-Master> connect cdc cdc
gSQL-Master> INSERT INTO T1 VALUES (1, sysdate, ‘T1 CYCLONE TEST’);
1 row created.
gSQL-Master> commit;
Commit complete.
gSQL-Master> INSERT INTO T2 VALUES (1, sysdate, ‘T2 CYCLONE TEST’);
1 row created.
gSQL-Master> commit;
Commit complete.

4.2 Slave端查看数据

登陆目标端实例进行数据查看,可以看到插入的2条测试数据已经同步完成。

[sunje@gs02 conf]$ gs
Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release Venus.3.2.5 revision(28401)
Connected to SUNDB Database.
gSQL-Slave> connect cdc cdc
gSQL-Slave> select * from t1;

C1 C2         C3             
-- ---------- ---------------
 1 2020-02-13 T1 CYCLONE TEST

1 row selected.

gSQL-Slave> select * from t2;

C1 C2         C3             
-- ---------- ---------------
 1 2020-02-13 T2 CYCLONE TEST

1 row selected.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论