GBase Visio Rsynctool(缩写为GVR)是GBase 可视化集群双活同步工具软件。是对2套集群间同步数据工具Rsynctools的可视化封装。本文包括该工具的快速部署方案以及各种配置的介绍。
目录导航
快速部署
本文是默认部署的最小要求。版本是GBase_Visio_Rsynctool-9.5.4.5_build3。
环境要求
资源库
GVR默认使用sqllite数据库作为资源库,包括各种配置和运行信息。该数据库已经默认在安装包内,无需单独安装。
JRE
GVR要求jre 1.8,已经默认包含在安装包内。
python
2.7版本。
内存
GVR的主程序默认使用2GB的内存,测试环境内存不要低于4GB。正式环境建议参看正式手册。
端口
GVR默认使用1526端口对外提供WEB服务,如端口已被占用,需要修改application.yml里的port参数。
可通过如下命令,查看端口是否被占用。如果输出为空,则没有占用。
[root@vm151 GBase_Visio_Rsynctool-9.5.4.5_build3]# lsof -i:1521
[root@vm151 GBase_Visio_Rsynctool-9.5.4.5_build3]#
如下是GVR启动后,占用了1526端口。
[root@vm151 GBase_Visio_Rsynctool-9.5.4.5_build3]# lsof -i:1526
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 77456 gbase 36u IPv6 704590 0t0 TCP *:pdap-np (LISTEN)
部署
安装包为GBase_Visio_Rsynctool-X.X.X.X_buildX.tar,使用tar解压即可。
[gbase@vm151 gbase]$ tar xvf GBase_Visio_Rsynctool-9.5.4.5_build3.tar
GBase_Visio_Rsynctool-9.5.4.5_build3/
GBase_Visio_Rsynctool-9.5.4.5_build3/GBase_Visio_Rsynctool-9.5.4.5_build3.jar
。。。
启动
进入解压后的目录,启动服务
[root@vm151 gbase]# cd GBase_Visio_Rsynctool-9.5.4.5_build3/
[root@vm151 GBase_Visio_Rsynctool-9.5.4.5_build3]# sh rsync.sh start
System is x86_64 arch
Start GBase_Visio_Rsynctool-9.5.4.5_build3 ...
访问
打开浏览器,访问该机器的1526端口

配置
目录结构
- application-druid.yml 保存资源库用的数据库配置
- application.yml 主配置文件
- db 内置的sqllite数据库
- deploy_tools 部署工具,包括部署手册
- GBase_Visio_Rsynctool-9.5.4.5_build3.jar 主程序的jar包
- ipmapping IP映射配置
- jre_aarch64 内置的JRE
- jre_aarch64_orcl 内置的JRE
- jre_x86 内置的JRE
- logback.xml 日志配置
- rsync.sh 主程序脚本
- rsynctool 同步工具,GVR就是对其做的图形化封装
- sql 针对mysql,postgresql的初始化SQL,以及不同GVR的表结构变动。
application-druid.yml
资源库用来保存GVR的元数据,比如用户,数据源,同步任务,进度等。支持sqllite,mysql和postgresql三种数据库,默认为内置的sqllite。
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: org.sqlite.JDBC
# driverClassName: com.mysql.cj.jdbc.Driver
# driverClassName: org.postgresql.Driver
druid:
# 主库数据源
master:
url: jdbc:sqlite:db/sqlite.db?date_string_format=yyyy-MM-dd HH:mm:ss
username:
password:
# url: jdbc:mysql://192.168.3.87:3308/gbase_gvr_demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
# username: root
# password: 111111
# password: JM(Z2Jhc2U=)
#
# url: jdbc:postgresql://192.168.88.82:5432/gbase_gvr_demo
# username: postgres
# password: postgres
# 初始连接数d
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM sys_user
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: gbase
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
wall:
config:
multi-statement-allow: true
在datasource部分,针对驱动driverClassName,jdbc的连接串URL,分别给出了三种数据库的样例。
更换数据源的方法和样例,请参看后面修改样例部分。
logback.xml
日志配置文件。其中log.path用到了/tmp目录,可根据现场情况修改。
日志数据级别(file_info,file_error)的文件保留天数,可根据实际情况修改。
默认日志放在/tmp/sync下面。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="/tmp/sync/logs" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/gvr-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/gvr-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/gvr-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/gvr-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--屏幕输出日志-->
<root level="info">
<appender-ref ref="console" />
</root>
<!--INFO日志-->
<root level="info">
<appender-ref ref="file_info" />
</root>
<!--ERROR日志-->
<root level="error">
<appender-ref ref="file_error" />
</root>
</configuration>
IP mapping 配置说明
用于2套集群的数据侧IP不通的情况。比如业务侧用的是10网段的IP, 这个IP在整个客户业务网络是唯一的,而数据侧是192网段,不通集群的数据侧IP是可以重复的。 两套集群的业务侧IP是互通的,但数据侧是不通的。
请直接参考用户手册的《IP mapping 配置说明》部分。
修改样例
修改1526对外服务端口
修改配置文件application.yml,其中的server部分
# 运行环境配置
server:
# 服务器的HTTP端口,默认为1526
port: 1526
将其中的1526改成可用的端口即可。
# 运行环境配置
server:
# 服务器的HTTP端口,默认为1526
port: 8526
通过grep确认修改成功
[root@vm151 GBase_Visio_Rsynctool-9.5.4.5_build3]# grep port: application.yml
port: 8526
然后重启服务生效。 服务启动需要点时间,当lsof能看到8526被使用后即表示服务启动成功了。
[root@vm151 GBase_Visio_Rsynctool-9.5.4.5_build3]# sh rsync.sh restart
Stop GBase_Visio_Rsynctool-9.5.4.5_build3
GBase_Visio_Rsynctool-9.5.4.5_build3 (pid:132689) exiting...
GBase_Visio_Rsynctool-9.5.4.5_build3 exited.
System is x86_64 arch
Start GBase_Visio_Rsynctool-9.5.4.5_build3 ...
[root@vm151 GBase_Visio_Rsynctool-9.5.4.5_build3]# lsof -i:8526
[root@vm151 logs]# lsof -i:8526
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 136868 root 38u IPv6 932136 0t0 TCP *:8526 (LISTEN)

修改默认资源库数据源
如果不使用sqllite,改用其它的,可参考如下停掉GVR,将现用的数据源参数注释掉,再去掉需要使用的数据源的注释部分,并对参数做修改。如下以用mysql作为资源库为例。
登录mysql数据,创建数据库
mysql> create database gbase_gvr_demo;
Query OK, 1 row affected (0.02 sec)
mysql> use gbase_gvr_demo;
Database changed
mysql>
初始化元数据表
mysql> source /opt/gbase/GBase_Visio_Rsynctool-9.5.4.5_build3/sql/gbase-gvr_mysql_4.2.sql
....
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+---------------------------------------+
| Tables_in_gbase_gvr_demo |
+---------------------------------------+
| sync_code_message |
| sync_config |
| sync_config_database |
| sync_config_file |
| sync_config_history |
| sync_config_table |
| sync_data_validation_config |
| sync_data_validation_result |
| sync_data_validation_result_tablename |
| sync_datasource |
| sync_getscn_nodes |
| sync_metrics |
| sync_result |
| sync_result_item |
| sync_version |
| sync_warning |
| sys_config |
| sys_dept |
| sys_dict_data |
| sys_dict_type |
| sys_job |
| sys_job_log |
| sys_logininfor |
| sys_menu |
| sys_notice |
| sys_oper_log |
| sys_post |
| sys_role |
| sys_role_dept |
| sys_role_menu |
| sys_user |
| sys_user_online |
| sys_user_post |
| sys_user_role |
| task_job |
+---------------------------------------+
35 rows in set (0.01 sec)
mysql>
更新累计补丁,如果执行过程中报错可以忽略(主键重复之类的)
mysql> source upgrade_4.4.sql
...
最后,根据补丁的版本(4.4)和当前的版本(4.5),参考《部署说明》文档里的sqllite升级部分,可能需要部分表结构变动。
我这个样例GVR4.5版本,需要额外执行如下这部分变动

修改数据源配置文件,从sqllite改成mysql
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
#driverClassName: org.sqlite.JDBC
driverClassName: com.mysql.cj.jdbc.Driver
# driverClassName: org.postgresql.Driver
druid:
# 主库数据源
master:
#url: jdbc:sqlite:db/sqlite.db?date_string_format=yyyy-MM-dd HH:mm:ss
#username:
#password:
url: jdbc:mysql://localhost:3306/gbase_gvr_demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
username: root
password: 111111
# password: JM(Z2Jhc2U=)
#
# url: jdbc:postgresql://192.168.88.82:5432/gbase_gvr_demo
# username: postgres
# password: postgres
# 初始连接数d
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM sys_user
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: gbase
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
wall:
config:
multi-statement-allow: true
然后重启GVR服务。
期间查看日志文件,确认是否有报错
tail /tmp/sync/logs/gvr-error.log