南大通用数据库-Gbase-8a-学习-16-Gbase8a到Gbase8a的集群同步工具RSync

一、测试环境

名称
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]# tar -xvf gcluster_rsynctool-8.6.2_build43-R33-redhat7.3-x86_64.tar.bz2

[root@xdw0 pkg]# chown -R gbase:gbase /opt/pkg/gcluster_rsynctool

[root@xdw0 pkg]# chmod 777 -R /opt/pkg/gcluster_rsynctool

[root@xdw0 gcluster_rsynctool]# su - gbase
上一次登录:日 821 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 713 2021 GBaseConnector
-rw-r--r-- 1 gbase gbase  5633 713 2021 GCClusterTopo.py
-rw-r--r-- 1 gbase gbase  6361 713 2021 GCCommon.py
-rw-r--r-- 1 gbase gbase  1661 713 2021 GCConnection.py
-rw-r--r-- 1 gbase gbase   225 713 2021 GCException.py
-rw-r--r-- 1 gbase gbase  2895 713 2021 GCFile.py
-rwxr-xr-x 1 gbase gbase  2110 713 2021 GCIPMapping.py
-rw-r--r-- 1 gbase gbase 59555 713 2021 gcluster_rsynctool.py
-rw-r--r-- 1 gbase gbase 17974 713 2021 GCParameter.py
-rw-r--r-- 1 gbase gbase  4835 713 2021 GCThreadPool.py
-rw-r--r-- 1 gbase gbase   421 713 2021 Makefile
-rwxr-xr-x 1 gbase gbase   206 713 2021 master_mapping
-rwxr-xr-x 1 gbase gbase 75990 713 2021 pexpect.py
-rw-r--r-- 1 gbase gbase    13 713 2021 release_version
-rwxr-xr-x 1 gbase gbase   205 713 2021 slave_mapping
drwxr-xr-x 2 gbase gbase   252 713 2021 test
-rw-r--r-- 1 gbase gbase    73 713 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)

你可能感兴趣的:(#,Gbase-8a-学习,数据库,学习,linux,dba,运维)