一、测试环境
名称 |
值 |
cpu |
Intel® Core™ i5-1035G1 CPU @ 1.00GHz |
操作系统 |
CentOS Linux release 7.9.2009 (Core) |
内存 |
4G |
逻辑核数 |
3 |
Gbase-8a源端节点-IP |
192.168.142.10 |
Gbase-8a目的端节点-IP |
192.168.142.11 |
Gbase-8a数据库版本 |
8.6.2.43-R33.132743 |
Gbase-8a-RSync同步工具版本 |
gcluster_rsynctool.py 8.6.2.43-R33.126038 |
二、工具介绍
1、简介
集群间同步工具是基于镜像集群的底层二进制同步的工具,其同步的对象是库内的数据,通过解析、比对二进制文件的变化进行同步; 包含增量同步和全量同步。
2、支持功能
序号 |
功能点描述 |
1 |
支持增量和全量两种数据同步方式; |
2 |
支持落盘数据的回读校验; |
3 |
支持主备分片同时同步(不保备份集群的表的数据安全性); |
4 |
支持先同步主分片,主分片成功后再同步备份分片; |
5 |
集群间同步支持使用普通数据库用户进行同步; |
3、注意点
序号 |
注意点描述 |
1 |
主备集群版本必须一致。 |
2 |
主备集群的被同步表至少有一组可用分片。 |
3 |
系统表、Nocopies不做同步。; |
三、测试
1、部署软件
[root@xdw0 pkg]
[root@xdw0 pkg]
[root@xdw0 pkg]
[root@xdw0 gcluster_rsynctool]
上一次登录:日 8月 21 09:01:43 CST 2022
[gbase@xdw0 ~]$ cd /opt/pkg/gcluster_rsynctool/
[gbase@xdw0 gcluster_rsynctool]$ ll
总用量 216
drwxr-xr-x 3 gbase gbase 273 7月 13 2021 GBaseConnector
-rw-r--r-- 1 gbase gbase 5633 7月 13 2021 GCClusterTopo.py
-rw-r--r-- 1 gbase gbase 6361 7月 13 2021 GCCommon.py
-rw-r--r-- 1 gbase gbase 1661 7月 13 2021 GCConnection.py
-rw-r--r-- 1 gbase gbase 225 7月 13 2021 GCException.py
-rw-r--r-- 1 gbase gbase 2895 7月 13 2021 GCFile.py
-rwxr-xr-x 1 gbase gbase 2110 7月 13 2021 GCIPMapping.py
-rw-r--r-- 1 gbase gbase 59555 7月 13 2021 gcluster_rsynctool.py
-rw-r--r-- 1 gbase gbase 17974 7月 13 2021 GCParameter.py
-rw-r--r-- 1 gbase gbase 4835 7月 13 2021 GCThreadPool.py
-rw-r--r-- 1 gbase gbase 421 7月 13 2021 Makefile
-rwxr-xr-x 1 gbase gbase 206 7月 13 2021 master_mapping
-rwxr-xr-x 1 gbase gbase 75990 7月 13 2021 pexpect.py
-rw-r--r-- 1 gbase gbase 13 7月 13 2021 release_version
-rwxr-xr-x 1 gbase gbase 205 7月 13 2021 slave_mapping
drwxr-xr-x 2 gbase gbase 252 7月 13 2021 test
-rw-r--r-- 1 gbase gbase 73 7月 13 2021 Version.py
2、支持参数
[gbase@xdw0 gcluster_rsynctool]$ python gcluster_rsynctool.py -h
Usage: gcluster_rsynctool.py [optinos]
Options:
-h, --help show this help message and exit
-v, --version output version information and exit
--master_mpp_ip=MASTER_MPP_IP
The ipaddress of master mpp gcluster,only support IPV4
--master_mpp_ip_mapping_file=MASTER_MPP_IP_MAPPING_FILE
The file for master mpp gcluster ipaddress transform
file format is json,only support IPV4
--master_mpp_gc_port=MASTER_MPP_GC_PORT
The port of master mpp gcluster[default:5258]
--master_mpp_gn_port=MASTER_MPP_GN_PORT
The port of master mpp gcluster's gnode[default:5050]
--slave_mpp_ip=SLAVE_MPP_IP
The ipaddress of slave mpp gcluster,only support IPV4
--slave_mpp_ip_mapping_file=SLAVE_MPP_IP_MAPPING_FILE
The file for slave mpp gcluster ipaddress transform
file format is json,only support IPV4
--slave_mpp_gc_port=SLAVE_MPP_GC_PORT
The port of slave mpp gcluster[default:5258]
--slave_mpp_gn_port=SLAVE_MPP_GN_PORT
The port of slave mpp gcluster's gnode[default:5050]
--master_mpp_gc_pw=MASTER_MPP_GC_PW
The password of master mpp gcluster's database
user[default:gbase20110531]
--slave_mpp_gc_pw=SLAVE_MPP_GC_PW
The password of slave mpp gcluster's database
user[default:gbase20110531]
--database_user=DATABASE_USER
A database user having rights to access tables defined
in 'table_list_file', this user
should exist in both master gcluster and slave
gcluster[default:gbase]
--table_list_file=TABLE_LIST_FILE
The file which contain the table list should be synced
--table_parallel_degree=TABLE_PARALLEL_DEGREE
The parallel degree for how many tables should be
synced [default:1, min:1, max:128]
--lock_table_timeout=LOCK_TABLE_TIMEOUT
The timeout use by gcluster locking table
[default:600,min:1,max:3600,unit:second]
--retry_times=RETRY_TIMES
Synctool retry times[default:1, min:1,
max:10,unit:times]
--retry_interval=RETRY_INTERVAL
The interval time between synctool retry [default:10,
min:1, max:1800,unit:second]
--sync_mode=SYNC_MODE
The synctool mode [default:2, min:1, max:3];
1: do table level scn check; 2:
not to do table level scn check,just check each column
scn; 3: not to do scn check
,just sync whole table data;
--error_table_list_file=ERROR_TABLE_LIST_FILE
The file output for failed table list[default:{$table_
list_file}_error_table_list_{%Y_%m_%d-%H:%M:%S}.log]
--log_name=LOG_NAME The log file
name[default:{$table_list_file}_{%Y_%m_%d}.log]
--log_level=LOG_LEVEL
The gcluster_rsynctool's log level [default:3, min:0,
max:5]; 0: nolog level;
1: critical level 2: error level
3: warning level 4: info level
5: debug level
--rsync_mode=RSYNC_MODE
The gcluster_rsynctool's rsync_mode [default:2, min:0,
max:2]; 0: sync major slice and
set status on backup slice; 1:
sync major slice and backup slice at the same;
2: sync major slice first and then sync the backup
slice if major slice sync success
.
--double_check check data that already write on disk.[default:false]
--slave_create_table_if_not_exists
create table if not exists on slave
mpp.[default:false]
--cleanup_uncontrolled_data=CLEANUP_UNCONTROLLED_DATA
whether clean up uncontrolled data on target table
[default:0, min:0, max:1]; 0:
not clean up uncontrolled data on target data;
1: clean up uncontrolled data on target data;
参考《GBase 8a MPP Cluster集群间同步工具手册》,有部分手册中没有是根据上面的help翻译。
参数名 |
介绍 |
master_mpp_ip |
含义:用于指定主集群的 coordinator 任一节点 IP 地址 |
|
参数类型:必选参数 |
|
注意事项和使用限制:只支持 IPV4 格式的 IP 地址 |
master_mpp_ip_mapping_file |
含义:主 mpp gcluster ip地址传输文件的文件格式为json,仅支持IPV4 |
|
参数类型:无 |
|
注意事项和使用限制:无 |
master_mpp_gc_port |
含义:用于指定主集群的 coordinator 端口信息 |
|
参数类型:可选参数,取值范围【default:5258, min:1,max:65536】 |
|
注意事项和使用限制: 如端口信息不是默认值,请指定该参数 |
master_mpp_gn_port |
含义:用于指定主集群的 gnode 端口信息 |
|
参数类型:可选参数,取值范围【default: 5050,min:1,max:65536】 |
|
注意事项和使用限制: 如端口信息不是默认值,请指定该参数 |
slave_mpp_ip |
含义:用于指定备集群的 coordinator 任一节点 IP 地址 |
|
参数类型:必选参数 |
|
注意事项和使用限制:只支持 IPV4 格式的 IP 地址 |
slave_mpp_ip_mapping_file |
含义:备 mpp gcluster ip地址传输文件的文件格式为json,仅支持IPV4 |
|
参数类型:无 |
|
注意事项和使用限制:无 |
slave_mpp_gc_port |
含义:用于指定备集群的 coordinator 端口信息 |
|
参数类型:可选参数,取值范围【default:5258, min:1,max:65536】 |
|
注意事项和使用限制: 如端口信息不是默认值,请指定该参数 |
slave_mpp_gn_port |
含义:用于指定备集群的 gnode 端口信息 |
|
参数类型:可选参数,取值范围【default: 5050,min:1,max:65536】 |
|
注意事项和使用限制: 如端口信息不是默认值,请指定该参数 |
master_mpp_gc_pw |
含义:用于指定主集群的数据库用户密码 |
|
参数类型:可选参数,取值范围【default: gbase20110531,min:无,max:无】 |
|
注意事项和使用限制: 如果数据库用户密码不是默认值,请指定该参数 |
slave_mpp_gc_pw |
含义:用于指定主集群的数据库用户密码 |
|
参数类型:可选参数,取值范围【default: gbase20110531,min:无,max:无】 |
|
注意事项和使用限制: 如果数据库用户密码不是默认值,请指定该参数 |
database_user |
含义:用于指定连接主、备集群的数据库用户 |
|
参数类型:可选参数,取值范围【default: gbase,min:无,max:无】 |
|
注意事项和使用限制: 需要具有访问‘table_list_file’中定义的表的权限,该用户需要同时存在于主备集群。 |
database_user |
含义:用于指定连接主、备集群的数据库用户 |
|
参数类型:可选参数,取值范围【default: gbase,min:无,max:无】 |
|
注意事项和使用限制: 需要具有访问‘table_list_file’中定义的表的权限,该用户需要同时存在于主备集群。 |
table_list_file |
含义:用于被同步表的配置文件 |
|
参数类型:必选参数 |
|
注意事项和使用限制:文件名,该文件内容为需要同步的表列表,可以只有一张表。文件内容格式为 DBName.TBName,用换行符进行分割,支持 windows 换行符和 linux 换行符,但必须统一,即文件内只能出现一种换行符。 |
table_parallel_degree |
含义:用于指定集群间同步每次并行同步的表的数量 |
|
参数类型:可选参数, 取值范围【default:1,min:1, max:128】 |
|
注意事项和使用限制:该参数需要根据主、备集群负载,业务并行度进行调节;当作业并行度低,主备集群负载不高的情况下,可适当增大该配置参数 |
lock_table_timeout |
含义:用于指定集群间同步工具对主集群、备集群表加锁的超时时间 |
|
参数类型:可选参数, 取值范围【unit:second,default:600,min:1, max:3600】 |
|
注意事项和使用限制: 由于锁是用来互斥表的写操作,该参数需要根据表的写操作最大时间进行适当延长; |
retry_times |
含义:用于指定底层分片对分片的同步失败后的重试次数 |
|
参数类型:可选参数, 取值范围【unit:次,default:1,min:1, max:10】 |
|
注意事项和使用限制: 该参数主要取决于网络状态,在网络状态不佳(闪断、网络阻塞)的情况下,会出现分片对分片的同步失败情况,需要重试来保障同步成功,需要根据网络状态进行适当的调大; |
retry_interval |
含义:用于指定底层分片对分片的同步失败后的每次重试的时间间隔 |
|
参数类型:可选参数, 取值范围【unit:second,default:10,min:1, max:1800】 |
|
注意事项和使用限制:该参数主要取决于网络状态,在网络状态不佳(闪断、网络阻塞)的情况下,会出现分片对分片的同步失败情况,失败后需要等待一段时间,期待网络恢复,然后再进行尝试,这个参数只是一个经验参数,不能确保等待一段时间后网络一定会恢复完,并且同步成功; |
sync_mode |
含义:用于指定数据同步的模式【粗糙过滤,增量同步,全量同步】 |
|
参数类型:可选参数, 取值范围【unit:无,default:1,min:1, max:3】 |
|
注意事项和使用限制:参数取值含义和使用场景: |
1: 粗糙过滤 |
含义:进行表的变更标识检查,如主备集群的表变更标识相同,直接跳过该表,不做同步;表的变更标识不同,再做每个列级别的变更标识检查,进行增量同步; |
|
适用场景: 该参数值适用于备集群初始化完毕后,增量数据的同步,这种情况下建议使用该参数; |
2:增量同步 |
含义:不做表的变更标识检查,直接做每个列级别的变更标识检查,进行增量同步; |
|
适用场景:该参数值适用于备集群初始化完毕后,增量数据的同步,该参数是由于版本迭代历史原因保留,完全是为了版本兼容性; |
3:全量同步 |
含义:不做任何级别的变更标识检查,直接用主机群的数据覆盖备集群的数据; |
|
适用场景:该参数值适用于需要人为覆盖备集群的所有数据时,这种情况一般发生在如下几种情况: |
|
1、对备份集群的表进行过手动修改,数据已经不可信。2、备集群的表数据发生损坏,需要重建修复。3、 备集群初始化。 |
error_table_list_file |
含义:用于指定同步失败的表存储的文件 |
|
参数类型:可选参数, 取值范围【default: 当前目录/${table_list_filename }error_table_list%Y_%m_%d-%H:%M:%S.log】 |
|
注意事项和使用限制:文件内容格式为 DBName.TBName,用换行符进行分割。可选参数,参数默认值为当前目录,名称默认为${table_list_filename }error_table_list%Y_%m_%d-%H:%M:%S.log,内容格式为 db.tb 每行一个,多行存储;该文件每次调用工具覆盖 |
log_name |
含义:用于指定工具日志的存储文件 |
|
参数类型:可选参数, 取值范围【default: 当前目录/gcluster_rsynctool_yyyy_mm_dd.log】 |
|
注意事项和使用限制: 指定的目录位置要有工具执行用户的写权限 |
log_name |
含义:用于指定工具日志的存储文件 |
|
参数类型:可选参数, 取值范围【default: 当前目录/gcluster_rsynctool_yyyy_mm_dd.log】 |
|
注意事项和使用限制: 指定的目录位置要有工具执行用户的写权限 |
log_level |
含义:用于指定工具日志级别 |
|
参数类型:可选参数,取值范围【default:3,min:0, max:5】 |
|
注意事项和使用限制:0: nolog level;1: critical level;2: error level;3: warning level ;4: info level;5: debug level; |
rsync_mode |
含义:用于指定工具调度模式 |
|
参数类型:可选参数,取值范围【default:2,min:0, max:2】 |
|
注意事项和使用限制 |
|
0:主分片同步,备分片设定状态含义:只同步备集群表的一组分片,其他备份的分片设定状态, 通过集群内部的自动恢复机制进行恢复适用场景:该参数值不建议使用,仅仅为了版本兼容保留 |
|
1: 主备同时同步含义:同时同步备集群的主、备分片,单表同步的性能能够达到最大化适用场景:该参数值不建议使用,存在一个分片的主备都同步失败,表不可用的情况,该参数是当初设计是为了数据安全性不高的场景; |
|
2: 先主后备同步方式.含义:先同步备集群表的主分片,主分片同步成功后再同步备分片,确保备集群的表在同步失败后存在一组可用分片,用来回滚同步操作;适用场景:建议使用该参数,保证备集群表的数据安全; |
double_check |
含义:用于指定是否启用回读校验 |
|
参数类型:可选参数,无参参数,取值范围【default:false】 |
|
注意事项和使用限制:数据写入磁盘后,回读检查备集群表数据;该参数会降低同步的性能,同时增加备集群的磁盘 IO 消耗;可以在部署初期为了验证同步的正确性时采用; |
slave_create_table_if_not_exists |
含义:表不存在时,创建。 |
|
参数类型:Create table if not slave mpp.[default:false] |
|
注意事项和使用限制:该参数在启用后,会在 slave 需要建表时,使用集群间同步工具指定的databaser_user 建表,如 master 上的表不是由该用户建立,会导致 slave 上出现异常,异常包括但不限于:建表不成功,该表建立后权限存在问题,表的 UID 不是预期的 UID,资源管理的磁盘空间限制出错等现象,所以启用该参数时,需要使用者严格按照被同步的表都是指定的 databaser_user 的表。 |
cleanup_uncontrolled_data |
含义:是否清理目标表上不受控制的数据。 |
|
参数类型:[default:0, min:0, max:1]; |
|
注意事项和使用限制:0:不清理目标数据上不受控制的数据; 1:清理目标数据上不受控制的数据; |
3、源端生成测试数据
gbase> create table sun (a int,b double,c varchar(100),d text,e blob,f longblob,g date,h timestamp);
Query OK, 0 rows affected (Elapsed: 00:00:00.22)
gbase> insert into sun values(1,1.1,'czg','快乐的小天使','qwertasdsdfzxczxxv','gregergjsfishfuieehfuiew','1995-09-18','2022-08-03 09:24:00.000');
Query OK, 1 row affected (Elapsed: 00:00:00.14)
gbase> insert into sun values(2,1.1,'zxj','快乐的小天使','qwertasdsdfzxczxxv','gregergjsfishfuieehfuiew','1995-09-18','2022-08-03 09:24:00.000');
Query OK, 1 row affected (Elapsed: 00:00:00.03)
gbase> insert into sun select * from sun;
Query OK, 2 rows affected (Elapsed: 00:00:00.17)
Records: 2 Duplicates: 0 Warnings: 0
gbase> insert into sun select * from sun;
Query OK, 4 rows affected (Elapsed: 00:00:00.14)
Records: 4 Duplicates: 0 Warnings: 0
gbase> select * from sun;
+
| a | b | c | d | e | f | g | h |
+
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
+
8 rows in set (Elapsed: 00:00:00.00)
4、目的端添加表结构
gbase> desc sun;
+
| Field | Type | Null | Key | Default | Extra |
+
| a | int(11) | YES | | NULL | |
| b | double | YES | | NULL | |
| c | varchar(100) | YES | | NULL | |
| d | text | YES | | NULL | |
| e | blob | YES | | NULL | |
| f | longblob | YES | | NULL | |
| g | date | YES | | NULL | |
| h | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+
8 rows in set (Elapsed: 00:00:00.00)
5、配置同步的表
[gbase@xdw0 gcluster_rsynctool]$ cat SyncTab.txt
czg.sun
6、测试同步
[gbase@xdw0 gcluster_rsynctool]$ ./gcluster_rsynctool.py --master_mpp_ip=192.168.142.10 --slave_mpp_ip=192.168.142.11 --table_list_file=SyncTab.txt --rsync_mode=1 --log_level=5
*************Gcluster Sync Tool Start*************************
Table [ czg: sun] Sync Start
Table [ czg: sun] Sync End cost : <0 s,818 ms>
*************Gcluster Sync Tool End With Success**************
目的端查询数据
gbase> select * from sun;
+
| a | b | c | d | e | f | g | h |
+
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 1 | 1.1 | czg | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
| 2 | 1.1 | zxj | 快乐的小天使 | qwertasdsdfzxczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
+
8 rows in set (Elapsed: 00:00:00.00)