GBase 8a
适配迁移
文章

gbase 8a 集群双活同步工具rsynctool使用方法

发表于2025-06-09 13:37:43148次浏览2个评论

一、环境信息

        前面的文章介绍了gbase 8a双活的两种方案,本文来描述下第一种方案rsynctool的使用方法,rsynctool使用的必要条件是两个集群需要相同的vcname和vcid,相同的nodedatamap,相同的字符集,相同的表空间设置方式,现在准备环境如下:

1.1 整体架构如下

1.2 集群IP设置对比

        集群安装IP使用的是数据IP,属于192.168段的私网IP,两个集群私网网络互不相通,另外对外提供服务的172.16.段属于业务网IP,可以互通,所以主备集群之间采用业务网IP进行数据同步,具体情况如下:

主集群:

ip a | grep net

gcadmin 
gcadmin showcluster vc vc1

备集群:

ip a | grep net

gcadmin 
gcadmin showcluster vc vc1

1.3 vc设置对比

select distinct(res.r), count(res.r) from (select count(*) r
 from gbase.nodedatamap t where t.data_distribution_id in (1,2)
 group by t.hashkey, t.nodeid) res group by res.r;

1.4  字符集设置对比

gccli -uroot -e "show variables like '%charac%';"

二、Rsynctool部署

Rsynctool 同步工具是通过备集群的gc_sync_client和主集群的gc_sync_server点对点完成数据同步的,根据以上环境主备集群每个数据节点有两个网段ip,一个为数据网内网ip(集群安装IP),一个为公网ip。两个集群之间只能通过业务ip进行互通,所以还需要使用IPmapping 功能进行IP映射,主备集群公网所需开通的端口有5051,5289,5258,5050。

2.1 安装包上传

Rsynctool 可以部署在源端、目标端、或独立部署。如下为在目标备库端的部署,将安装包上传到/home/gbase目录下并解压到/data目录。

su - gbase
cd /home/gbase
tar xfj gcluster_rsynctool-9.5.3.27.20_patch.4-redhat7-x86_64.tar.bz2 -C /data

2.2 synctool.conf配置

修改主备集群所有节点的$GBASE_BASE/config/synctool.conf,添加对外绑定 IP 和 syncServer 对外端口,重启 syncServer 服务

su - gbase
vi $GBASE_BASE/config/synctool.conf
## 在[gbased]下添加
BIND_ADDRESS_ADDITIONAL=172.16.9.11 ##填写对应节点业务网IP
SERVER_PORT_ADDITIONAL=5289
##添加完成后重启服务
gcluster_services syncserver restart
## 检查端口是否正常启动
lsof -i:5289

2.3 gbase_8a_gbase.cnf配置

修改主备集群所有gnode节点 的 gbase 配置文件$GBASE_BASE/config/gbase_8a_gbase.cnf,添加对外绑定 IP 和 gbase 对外端口后,重启 gbase 服务

su - gbase
vi $GBASE_BASE/config/gbase_8a_gbase.cnf
bind_address_additional=172.16.9.11 ##填写对应节点业务网IP
port_additional=5051
## 添加完成后重启服务
gcluster_services gbased restart
## 检查端口是否正常启动
lsof -i:5051

2.4 IP mapping 配置

编辑解压后 gcluster_rsynctool 目录下的master_mapping文件,添加如下配置

su - gbase
vi /data/gcluster_rsynctool/master_mapping
{
    "OWNER":"MASTER",
    "IPMAPPING":[
        {
            "FROM":"192.168.10.1", ##主集群数据网IP
            "TO":"172.16.9.10",    ##主集群业务网IP
            "GNPORT":"5051",       ##主集群gbase对外附加端口
            "SYNCPORT":"5289"      ##主集群synctool对外附加端口
        }
    ]
}

编辑解压后 gcluster_rsynctool 目录下的slave_mapping 配置文件,添加如下配置

su - gbase
vi /data/gcluster_rsynctool/slave_mapping
{
    "OWNER":"SLAVE",
    "IPMAPPING":[
        {
            "FROM":"192.168.11.2",   ##备集群数据网IP
            "TO":"172.16.9.11",      ##备集群业务网IP
            "GNPORT":"5051",         ##备集群gbase对外附加端口
            "SYNCPORT":"5289"        ##备集群synctool对外附加端口
        }
    ]
}

至此 rsynctool 部署配置完成,下面我们了解下运行时的参数信息

三、Rsynctool运行

3.1 常用参数配置

常用参数如下所示,其他具体参数可参考产品手册

--master_mpp_ip=MASTER_MPP_IP
用于指定主集群的 coordinator 任一节点 IP 地址;
--slave_mpp_ip=SLAVE_MPP_IP
用于指定备集群的 coordinator 任一节点 IP 地址;
--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,用换行符进行分割,该文件不要存放过多表,建议以2000为单位进行分割任务同步;
--table_parallel_degree=TABLE_PARALLEL_DEGREE
用于指定集群间同步每次并行同步的表的数量;
--retry_times=RETRY_TIMES
用于指定底层分片对分片的同步失败后的重试次数,建议设置为3;
--sync_mode=SYNC_MODE
用于指定数据同步的模式【1 粗糙过滤、2 增量同步、3 全量同步】,默认为1:进行表的变更标识检查的增量同步;
--error_table_list_file=ERROR_TABLE_LIST_FILE
用于指定同步失败的表存储的文件;
--log_name=LOG_NAME
用于指定工具日志的存储文件;
--rsync_mode=RSYNC_MODE
用于指定工具调度模式,0:主分片同步,备分片设定状态,1:主备同时同步,2:先主后备同步方式,建议使用该参数,保证备集群表的数据安全;
--slave_create_table_if_not_exists 
添加该参数,会在 slave 需要建表时,使用集群间同步工具指定的 database_user
建表;
--sync_vc_name=VC_NAME
需要同步的 VC 名字;
--master_mpp_ip_mapping_file 
指定主集群的IP映射文件
--slave_mpp_ip_mapping_file 
指定从集群的IP映射文件

3.2 进行主备同步

以testdb库为例,下面有t和t2表,模拟进行一次主从同步的过程。

su - gbase
cd /data/gcluster_rsynctool
### 添加需要同步的表文件
vi tb_name.list
testdb.t1
testdb.t2
### 执行同步命令
./gcluster_rsynctool.py --master_mpp_ip=172.16.9.10 --slave_mpp_ip=172.16.9.11 --database_user=gbase --master_mpp_gc_pw=gbase20110531 --slave_mpp_gc_pw=gbase20110531 --sync_vc_name=vc1 --table_list_file=tb_name.list --log_level=5 --rsync_mode=0 --slave_create_table_if_not_exists --log_name=testdb.log --master_mpp_ip_mapping_file=master_mapping --slave_mpp_ip_mapping_file=slave_mapping

### 查看全过程日志和错误表列表

如果有同步失败的表,会记录在对应的文件中,类似tb_name.list_error_table_list_2025_07_18-06:43:06.log,也可通过参数--error_table_list_file=ERROR_TABLE_LIST_FILE自行指定。

评论

登录后才可以发表评论
崔哥发表于 3个月前
迟日江山丽,春风花草香。泥融飞燕子,沙暖睡鸳鸯。江碧鸟逾白,山青花欲燃。今春看又过,何日是归年。
zixuwang发表于 2个月前
加油