GBase Visio Rsynctool(GVR)的快速部署和配置

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