1工具介绍
GBase 8a集群间同步工具是基于集群的底层二进制数据同步的工具,其同步的对象是库内的数据,通过解析、对比智能索引中摘要信息的变化,来实现同构集群的同构表的数据复制功能,目前已经支持图形化操作,主要功能点:
1.支持增量和全量两种数据同步方式;
2.支持落盘数据的回读校验;
3.支持主备分片同时同步;
4.支持先同步主分片,主分片成功后再同步备份分片;
5.支持使用普通数据库用户进行同步;
6.支持主集群源表重组后备集群的空间回收;
7.支持备集群同步表自动创建;
8.支持同步限制带宽;
9.支持同步数据二次压缩传输;
10.支持主备集群跨网段同步(ip mapping映射)。
2安装部署
集群间同步工具可部署在与主备集群网络互通的任意服务器上,使用前将安装包拷贝至执行用户具有读写权限的目录下,直接解压即可。
1.解压命令:
$ tar -xif gcluster_rsynctool-9.5.3.28.2-redhat7-x86_64.tar.bz2
2.部署示意图:
使用参数说明
命令格式:
Usage: gcluster_rsynctool.py [option]
Options:
-h, --help
含义:显示工具帮助信息
参数类型:可选参数, 取值范围:无
注意事项和使用限制:指定该参数直接显示帮助信息后工具退出运行
-v, --version
含义:显示工具版本信息
参数类型:可选参数,取值范围:无
注意事项和使用限制:指定该参数直接显示帮助信息后工具退出运行
--master_mpp_ip=MASTER_MPP_IP
含义:用于指定主集群的coordinator 任一节点IP地址,
参数类型:必选参数
注意事项和使用限制:只支持IPV4格式的IP地址
--master_mpp_gc_port=MASTER_MPP_GC_PORT?
含义:用于指定主集群的coordinator端口信息
参数类型:可选参数,取值范围【default:5258, min:1,max:65536】
注意事项和使用限制:如端口信息不是默认值,请指定该参数
--master_mpp_gn_port=MASTER_MPP_GN_PORT?
含义:用于指定主集群的gnode端口信息
参数类型:可选参数,取值范围【default: 5050,min:1,max:65536】
注意事项和使用限制:如端口信息不是默认值,请指定该参数
--slave_mpp_ip=SLAVE_MPP_IP
含义:用于指定备集群的coordinator 任一节点 IP地址
参数类型:必选参数
注意事项和使用限制:只支持IPV4格式的IP地址
--slave_mpp_gc_port=SLAVE_MPP_GC_PORT?
含义:用于指定备集群的coordinator端口信息
参数类型:可选参数,取值范围【default:5258,min:1,max:65536】
注意事项和使用限制:如端口信息不是默认值,请指定该参数
--slave_mpp_gn_port=SLAVE_MPP_GN_PORT?
含义:用于指定备集群的gnode端口信息
参数类型:可选参数, 取值范围【default: 5050,min:1,max:65536】
注意事项和使用限制:如端口信息不是默认值,请指定该参数
--database_user=DATABASE_USER??
含义:用于指定连接主、备集群的数据库用户
参数类型:必选参数
注意事项和使用限制:需要具有访问‘table_list_file’中定义的表的权限,该用户需要同时存在于主备集群。
--master_mpp_gc_pw=MASTER_MPP_GC_PW?
含义:用于指定主集群的数据库用户密码
参数类型:必选参数
注意事项和使用限制:如果数据库用户密码不是默认值,请指定该参数
--slave_mpp_gc_pw=SLAVE_MPP_GC_PW?
含义:用于指定备集群的数据库用户密码
参数类型:必选参数,
注意事项和使用限制:如果数据库用户密码不是默认值,请指定该参数
--table_list_file=TABLE_LIST_FILE?
含义:用于被同步表的配置文件
参数类型:必选参数
注意事项和使用限制:文件名,该文件内容为需要同步的表列表,可以只有一张表。文件内容格式为DBName.TBName,用换行符进行分割,支持windows换行符和linux换行符,但必须统一,即文件内只能出现一种换行符。
--table_parallel_degree=TABLE_PARALLEL_DEGREE?
含义:用于指定集群间同步每次并行同步的表的数量
参数类型:可选参数, 取值范围【default:1,min:1, max:128】
注意事项和使用限制:该参数需要根据主、备集群负载,业务并行度进行调节;当作业并行度低,主备集群负载不高的情况下,可适当增大该配置参数
--lock_table_timeout=LOCK_TABLE_TIMEOUT??
含义:用于指定集群间同步工具对主集群、备集群表加锁的超时时间
参数类型:可选参数, 取值范围【unit:second,default:600,min:1, max:3600】
注意事项和使用限制:由于锁是用来互斥表的写操作,该参数需要根据表的写操作最大时间进行适当延长;
--retry_times=RETRY_TIMES ?
含义:用于指定底层分片对分片的同步失败后的重试次数
参数类型:可选参数, 取值范围【unit:次,default:1,min:1, max:10】
注意事项和使用限制:该参数主要取决于网络状态,在网络状态不佳(闪断、网络阻塞)的情况下,会出现分片对分片的同步失败情况,需要重试来保障同步成功,需要根据网络状态进行适当的调大;
--retry_interval=RETRY_INTERVAL
含义:用于指定底层分片对分片的同步失败后的每次重试的时间间隔
参数类型:可选参数, 取值范围【unit:second,default:10,min:1, max:1800】
注意事项和使用限制:该参数主要取决于网络状态,在网络状态不佳(闪断、网络阻塞)的情况下,会出现分片对分片的同步失败情况,失败后需要等待一段时间,期待网络恢复,然后再进行尝试,这个参数只是一个经验参数,不能确保等待一段时间后网络一定会恢复完,并且同步成功;
--sync_mode=SYNC_MODE?
含义:用于指定数据同步的模式【粗糙过滤,增量同步,全量同步】
参数类型:可选参数, 取值范围【default:2,min:1, max:3】
注意事项和使用限制:
参数取值含义和使用场景:
1:粗糙过滤:
含义:进行表的变更标识检查,如主备集群的表变更标识相同,直接跳过该表,不做同步;表的变更标识不同,再做每个列级别的变更标识检查,进行增量同步;
适用场景: 该参数值适用于备集群初始化完毕后,增量数据的同步,这种情况下建议使用该参数;
2:增量同步:
含义:不做表的变更标识检查,直接做每个列级别的变更标识检查,进行增量同步;
适用场景:该参数值适用于备集群初始化完毕后,增量数据的同步,该参数是由于版本迭代历史原因保留,完全是为了版本兼容性;
3:全量同步:
含义:不做任何级别的变更标识检查,直接用主机群的数据覆盖备集群的数据;
适用场景:该参数值适用于需要人为覆盖备集群的所有数据时,这种情况一般发生在如下几种情况:
1)对备份集群的表进行过手动修改,数据已经不可信;
2)备集群的表数据发生损坏,需要重建修复;
3)备集群初始化;
--error_table_list_file=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=LOG_NAME??
含义:用于指定工具日志的存储文件
参数类型:可选参数, 取值范围【default: 当前目录/gcluster_rsynctool_yyyy_mm_dd.log】
注意事项和使用限制:指定的目录位置要有工具执行用户的写权限
--log_level=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?
含义:用于指定工具调度模式
参数类型:可选参数,取值范围【default:2,min:0, max:2】
注意事项和使用限制:
0:主分片同步,备分片设定状态
含义:只同步备集群表的一组分片,其他备份的分片设定状态, 通过集群内部的自动恢复机制进行恢复
适用场景:该参数值不建议使用,仅仅为了版本兼容保留
1: 主备同时同步
含义:同时同步备集群的主、备分片,单表同步的性能能够达到最大化
适用场景:该参数值不建议使用,存在一个分片的主备都同步失败,表不可用的情况,该参数是当初设计是为了数据安全性不高的场景;
2: 先主后备同步方式.
含义:先同步备集群表的主分片,主分片同步成功后再同步备分片,确保备集群的表在同步失败后存在一组可用分片,用来回滚同步操作;
适用场景:建议使用该参数,保证备集群表的数据安全;
--double_check??
含义:用于指定是否启用回读校验
参数类型:可选参数,无参参数,取值范围【default:false】
注意事项和使用限制:数据写入磁盘后,回读检查备集群表数据;该参数会降低同步的性能,同时增加备集群的磁盘IO消耗;可以在部署初期为了验证同步的正确性时采用;
--slave_create_table_if_not_exists
含义:是否启用在备集群建表
参数类型:可选参数,取值范围【default:false】
参数使用注意事项:
该参数在启用后,会在slave需要建表时,使用集群间同步工具指定的databaser_user建表,如master上的表不是由该用户建立,会导致slave上出现异常,异常包括但不限于:建表不成功,该表建立后权限存在问题,表的UID不是预期的UID,资源管理的磁盘空间限制出错等现象,所以启用该参数时,需要使用者严格按照被同步的表都是指定的databaser_user的表。
--master_mpp_ip_mapping_file=MASTER_MPP_IP_MAPPING_FILE
含义:用于存储主集群ip mapping映射的文件
参数类型:可选参数
参数使用注意事项:
该参数用于IP mapping映射功能,如果在V9.5.3版本使用,需先修改如下配置文件方可正常同步:
1:修改集群节点的synctool配置文件,添加以下对外绑定ip和端口,然后重启syncserver服务
BIND_ADDRESS_ADDITIONAL=对外绑定IP
SERVER_PORT_ADDITIONAL=端口
2:修改集群节点gbase配置文件,添加以下对外绑定ip和端口,然后重启gbase服务
bind-address_additional=对外绑定ip
port_additional=端口
3:手动配置好主备集群ip mapping转换规则,以一个数据节点为例,转换规则配置如下:
这里from是节点对内ip,to是需要转换的对外ip,GNPORT是gbase的对外端口,SYNCPORT是synctool的对外端口。
注意这里的对外ip要与前面的gbase,syncserver的对外绑定ip一致,端口也是一样,GNPORT要与gbase的port_additional一致,SYNCPORT要与SERVER_PORT_ADDITIONAL一致。格式如下:
{
??? "OWNER":"MASTER",
??? "IPMAPPING":[
??????? {
??????????? "FROM":"192.168.8.147",
??????????? "TO":"100.100.100.147",
??????????? "GNPORT":"5060",
??????????? "SYNCPORT":"5289"
??????? }
??? ]
}
注,在V9.5.2版本使用ip mapping映射功能,可省略步骤1)和步骤2),且步骤3)中的ip mapping转换规则无需指定GNPORT和SYNCPORT端口参数,默认采用5050作为对外端口。
--slave_mpp_ip_mapping_file=SLAVE_MPP_IP_MAPPING_FILE
含义:用于存储备集群ip mapping映射的文件
参数类型:可选参数
参数使用注意事项:参考--master_mpp_ip_mapping_file。
格式如下:
{
??? "OWNER":"SLAVE",
??? "IPMAPPING":[
??????? {
??????????? "FROM":"192.168.8.148",
??????????? "TO":"100.100.100.148",
??????????? "GNPORT":"5060",
??????????? "SYNCPORT":"5289"
??????? }
??? ]
}
--sync_network_bandwidch
含义:用于指定同步数据传输的带宽
参数类型:可选参数,取值范围【unit:M/s,default:0】
参数使用注意事项:
为节省带宽,可对同步进行限流,在单机层synctool.cnf中进行如下配置:
BANDWIDTH_QOS_SWITCH=1 (1为打开限速功能,0为关闭,默认关闭)
另,为节省带宽,也可对同步进行传输数据进行二次压缩,在单机层synctool.cnf中进行如下配置即可,同步语句中无需再指定参数:
COMPRESSED_SWITCH=1 (1为打开压缩传输功能,0为关闭,默认关闭)
限速和压缩功能可分别或同时开启,参数名必须为大写。
3操作示例
1、兼容模式集群之间的同步
1)主备集群架构:
兼容模式:2个节点,p 1 d 1
2)主备集群建表:
drop database if exists test;
create database test;
use test;
create table t(a int)distributed by ('a');
3)主集群插入数据:
insert into t values(1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
4)编写同步表列表文件,比如t.txt:
$ cat t.txt:
test.t
5)执行同步命令:
$ ./gcluster_rsynctool.py --master_mpp_ip=10.10.3.193 --slave_mpp_ip=10.10.3.168 --master_mpp_gc_pw=***** --slave_mpp_gc_pw=***** --table_list_file=t.txt
注:默认采用--sync_mode增量同步
2、兼容模式集群之间的同步
1)主备集群架构:
vc模式:单vc含2个节点,p 1 d 1
2)主备集群建表:
use vc vc1;
drop database if exists test;
create database test;
use test;
create table t(a int)distributed by ('a');
3)主集群插入数据:
insert into t values(1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
4)编写同步表列表文件,比如t.txt:
$ cat t.txt:
test.t
5)执行同步命令:
$ ./gcluster_rsynctool.py --master_mpp_ip=10.10.3.193 --slave_mpp_ip=10.10.3.168 --master_mpp_gc_pw=***** --slave_mpp_gc_pw=***** --table_list_file=t.txt --sync_vc_name=vc1
注:每次只能同步同一vc的数据表,且--table_list_file内容格式为dbname.tbname不包含vc名
3、限制带宽同步
1)主备集群架构:单实例:单vc含2个节点,p 1 d 1
2)主备集群建表:
use vc vc1;
drop database if exists test;
create database test;
use test;
create table t(a int)distributed by ('a');
3)主集群插入数据:
insert into t values(1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
4)编写同步表列表文件:
$ cat t.txt:
test.t
5)主备集群各单机配置文件synctool.conf添加参数:
BANDWIDTH_QOS_SWITCH=1
6)执行同步命令:
$ ./gcluster_rsynctool.py --master_mpp_ip=10.10.3.193 --slave_mpp_ip=10.10.3.168 --master_mpp_gc_pw=***** --slave_mpp_gc_pw=***** --table_list_file=t.txt --sync_vc_name=vc1 ?--sync_network_bandwidth=100
注,主备集群所有data节点均需添加限速参数BANDWIDTH_QOS_SWITCH=1,且必须大写,修改后重启syncserver服务。若主备集群是否限速配置不一致,则同步失败。
4、压缩传输同步
1)主备集群架构:单实例:单vc含2个节点,p 1 d 1
2)主备集群建表:
use vc vc1;
drop database if exists test;
create database test;
use test;
create table t(a int)distributed by ('a');
3)主集群插入数据:
insert into t values(1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
4)编写同步表列表文件:
$ cat t.txt:
test.t
5)主备集群各单机配置文件synctool.conf添加参数:
COMPRESSED_SWITCH=1
6)执行同步命令:
$ ./gcluster_rsynctool.py --master_mpp_ip=10.10.3.193 --slave_mpp_ip=10.10.3.168 --master_mpp_gc_pw=***** --slave_mpp_gc_pw=*****??--table_list_file=t.txt --sync_vc_name=vc1
注,主备集群所有data节点均需添加压缩参数COMPRESSED_SWITCH=1,且必须大写,修改后重启syncserver服务。同步语句无需单独再指定参数。若主备集群是否压缩传输配置不一致,则同步失败。
5、多实例集群ip mapping映射同步
1)主备集群架构:多实例:单vc含4个节点,p 1 d 1,其中单物理机2个ip地址
2)网络配置,比如:
主集群网段为10.10.*.*,对外网段为10.40.*,*
备集群网段为10.11.*.*,对外网段为10.40.*,*
同步工具网段为10.40.*.*
主备集群间不互通,但均与rsynctool同步工具网络互通
3)主备集群建表:
use vc vc1;
drop database if exists test;
create database test;
use test;
create table t(a int)distributed by ('a');
4)主集群插入数据:
insert into t values(1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
5)编写同步表列表文件:
$ cat t.txt:
test.t
6)主集群配置文件添加参数:
以其中一个节点10.10.3.193为例:
A)gbase_8a_gbase.cnf
bind_address_additional=10.40.1.127
port_additional=6001
B) synctool.conf
BIND_ADDRESS_ADDITIONAL=10.40.1.127
SERVER_PORT_ADDITIONAL=7001
同一物理机上的10.10.100.1节点:
A)gbase_8a_gbase.cnf
bind_address_additional=10.40.1.127
port_additional=6002
主集群ip mapping映射文件:
$ cat master_1
{
??? "OWNER":"MASTER",
??? "IPMAPPING":[
??????? {
??????????? "FROM":"10.10.3.193",
??????????? "TO":"10.40.1.127",
??????????? "GNPORT":"6001",
??????????? "SYNCPORT":"7001"
??????? },
??????? {
??????????? "FROM":"10.10.0.25",
??????????? "TO":"10.40.4.27",
??????????? "GNPORT":"6001",
??????????? "SYNCPORT":"7001"
??????? },
??????? {
??????????? "FROM":"10.10.100.1",
??????????? "TO":"10.40.1.127",
??????????? "GNPORT":"6002",
??????????? "SYNCPORT":"7002"
??????? },
??????? {
??????????? "FROM":"10.10.100.2",
??????????? "TO":"10.40.4.27",
??????????? "GNPORT":"6002",
??????????? "SYNCPORT":"7002"
??????? }
??? ]
}
7)备集群配置文件添加参数:
以其中一个节点10.10.3.168为例:
A)gbase_8a_gbase.cnf
bind_address_additional=10.40.2.228
port_additional=6001
B)synctool.conf
BIND_ADDRESS_ADDITIONAL=10.40.2.228
SERVER_PORT_ADDITIONAL=7001
同一物理机上的10.10.100.3节点
A)gbase_8a_gbase.cnf
bind_address_additional=10.40.2.228
port_additional=6002
B)synctool.conf
BIND_ADDRESS_ADDITIONAL=10.40.2.228
SERVER_PORT_ADDITIONAL=7002
备集群ip mapping映射文件:
$ cat slave_1
{
??? "OWNER":"SLAVE",
??? "IPMAPPING":[
??????? {
??????????? "FROM":"10.11.3.168",
??????????? "TO":"10.40.2.228",
??????????? "GNPORT":"6001",
??????????? "SYNCPORT":"7001"
??????? },
??????? {
??????????? "FROM":"10.11.2.209",
??????????? "TO":"10.40.2.98",
??????????? "GNPORT":"6001",
??????????? "SYNCPORT":"7001"
??????? },
?????? {
??????????? "FROM":"10.11.100.3",
??????????? "TO":"10.40.2.228",
??????????? "GNPORT":"6002",
??????????? "SYNCPORT":"7002"
??????? },
??????? {
??????????? "FROM":"10.11.100.4",
??????????? "TO":"10.40.2.98",
??????????? "GNPORT":"6002",
??????????? "SYNCPORT":"7002"
??????? }
??? ]
}
8)执行同步命令:
$ ./gcluster_rsynctool.py --master_mpp_ip=10.10.3.193 --slave_mpp_ip=10.10.3.168 --table_list_file=t.txt --master_mpp_gc_pw=*****
--slave_mpp_gc_pw=*****?
--master_mpp_ip_mapping_file=master_1 --slave_mpp_ip_mapping_file=slave_1 --sync_vc_name=vc1
注,mpping_file内容需与单机gbased及syncserver配置文件中的参数值一致,且参数名大小写严格匹配,修改后重启gbased及syncserver服务。若配置不一致,则同步失败。