前言
对于能支持驱动包加载自定义数据源的工具,我理解YashanDB都应该能支持数据同步的。所以简单测试一下使用OGG是否能将MySQL的数据同步到YashanDB,主要看整个流程是否能跑通,肯定测不了全功能项的。
本测试仅供学习产品使用,切勿商用。
1. OGG 简单介绍
Oracle Golden Gate(简称OGG)。
1.1 OGG产品系列
- OCI GoldenGate
- Oracle GoldenGate for Marketplace
- Oracle GoldenGate for Big Data
- Oracle GoldenGate Application Adapters
- Oracle GoldenGate for HP NonStop (Guardian)
- Oracle GoldenGate Veridata
- Oracle GoldenGate Plug-in for EMCC
- Oracle GoldenGate Monitor
- Oracle GoldenGate Studio
1.2 同步原理
OGG是一种基于日志的结构化数据复制软件,通过捕获源数据库online redo log (在线重做日志)或archive log(归档日志)获得数据变化,形成tail(队列文件 ),再将这些tail通过网络协议,传输到目标数据库,目标端通过解析,插入至目标端数据库,从而实现源端与目标端数据同步。
1.3 特性
- 对生产系统影响小:实时读取交易日志,以低资源占用实现大交易量数据实时复制;
- 以交易为单位复制,保证交易一致性:只同步已提交的数据;
- 支持一对一、一对多、多对一、多对多和双向复制等。
1.4 逻辑架构
参照上图简单理解解释OGG逻辑架构。在OGG使用过程中主要涉及以下进程及文件
- Service Manager:需要源端跟目标端同时运行,主要作用是监控管理其它进程,报告错误,分配及清理数据存储空间,发布阈值报告等;
- Extract进程:运行在数据库源端,主要用于捕获数据的变化,负责全量、增量数据的抽取
3.Trails文件:临时存放在磁盘上的数据文件 - Data Pump进程:运行在数据库源端,属于Extract进程的一个辅助进程,如果不配置Data Pump,Extract进程会将抽取的数据直接发送到目标端的Trail文件,如果配置了Data Pump,Extract进程会将数据抽取到本地Trail文件,然后通过Data Pump进程发送到目标端,配置Data Pump进程的主要好处是即使源端到目标端发生网络中断,Extract进程依然不会终止
- Collector进程:接收源端传输过来的数据变化,并写入本地Trail文件中
- Replicat进程:读取Trail文件中记录的数据变化,创建对应的DML语句并在目标端回放
抓重点,就是它会产生一个中间产物叫Trail文件,这是一种特定格式的文件,其实也就是我们要同步的数据,把它解析应用,就可以同步到目标库了。等会在测试过程中,可以看到这个文件。
2.环境准备
测试使用OGG通过MySQL数据到崖山数据库YashanDB。因为是做功能测试,就使用一台主机,部署两套,一套ogg big data,一套ogg for mysql。
2.1 主机信息
主机名 | ip | 配置 |
---|---|---|
mysql | 192.168.23.57 | 16C/32G |
[ogg@mysql ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.23.57 mysql
2.2 安装java环境
(在root用户下执行)
yum -y install java
2.3 创建用户ogg
useradd ogg
echo "ogg" |passwd --stdin ogg
2.4 创建需要的目录
(注意系统权限)
mkdir -p /home/stage/oggsc
mkdir -p /home/stage/ogg-big-data
mkdir -p /home/stage/ogg-big-data-deploy-home
mkdir -p /home/stage/ogg-big-data-service-manager
chown -R ogg:ogg /home/stage
mkdir -p /home/stage2/oggsc
mkdir -p /home/stage2/ogg-mysql
mkdir -p /home/stage2/ogg-mysql-deploy-home
mkdir -p /home/stage2/ogg-mysql-service-manager
chown -R ogg:ogg /home/stag
#目录说明
- /home/stage/oggsc:存放解压软件包文件的目录
- /home/stage/ogg-big-data:OGG_HOME目录
- /home/stage/ogg-big-data-deploy-home:部署目录
- /home/stage/ogg-big-data-service-manager:service manager目录
2.5 安装ogg big data
用于接受数据,应用到YashanDB。
2.5.1 安装软件
[ogg@mysql ~]$ cd /home/soft
[ogg@mysql soft]$ ll
total 639412
-rw-r--r--. 1 ogg ogg 308564766 Sep 15 16:29 V1011477-01.zip
-rw-r--r--. 1 ogg ogg 346187748 Sep 15 16:30 V1019737-01.zip
unzip V1019737-01.zip -d /home/stage/oggsc
cd /home/stage/oggsc/ggs_Linux_x64_BigData_services_shiphome/Disk1/
export DISPLAY=192.168.30.49:0.0
./runInstaller
因为是图形化界面安装,这里通过DISPLAY将界面投射到个人主机上进行操作。
进入安装big data 微服务界面
1.选择安装Oracle GoldenGate for BigData
2.填写OGG_HOME目录
3.使用默认的路径的用户组
4.确认安装信息
5.使用root用户执行orainsRoot.sh脚本
[root@mysql soft]# sh /home/stage/oraInventory/orainstRoot.sh
Changing permissions of /home/stage/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /home/stage/oraInventory to ogg.
The execution of the script is complete.
6.软件安装完成
2.5.2 创建服务
2.5.2.1 配置环境变量
vim ~/.bash_profile 添加下面两行
export OGG_HOME=/home/stage/ogg-big-data
export PATH=$PATH:$OGG_HOME/bin
source ~/.bash_profile
2.5.2.2 执行oggca.sh创建服务
export DISPLAY=192.168.30.49:0.0
oggca.sh
进入图形化界面
1.service manager选择,填写部署HOME目录、hostname、端口号。
(这里不建议用ip,首先使用ip这个步骤要等很久,其次在最后deploy的时候,一直卡在17%,观察日志报错说The Service Manager process is not accepting REST calls.好像是找不到服务,之后改成hostname就没有这个问题了。)
2.选择添加一个新的OGG部署(如果有部署了一半失败的情况,也可以使用这里的remove选线来删除)
3.填写部署细节,这里的软件目录对应的就是OGG_HOME目录
4.填写部署目录,用于存放部署的配置文件等,这个路径不建议使用 OGG_HOME ,这样方便升级。也不能使用 第一步的 service manager 的目录。
5.配置环境变量,官方文章推荐增加这个变量 ENV_LC_ALL=zh_CN.UTF-8
6.设置管理账号密码
root/Asdf123.
7.安全选项,为了简化配置,这里不使用ssl/tls
8.这里将所有的服务都部署上,端口设置第一个后,后面的会自动加1
9.确认配置信息
10.安装过程,很快就结束了,所以没截上图
11.安装完成
12.进入到界面查看,root/Asdf123.
http://192.168.23.57:8688
http://192.168.23.57:8689
2.6 安装ogg for mysql
用于抓取MySQL中的数据,生成Trail文件。
整个安装步骤和上面类似。
2.6.1 安装软件
cd /home/soft
unzip V1011477-01.zip -d /home/stage2/oggsc
export DISPLAY=192.168.30.49:0.0
export OGG_HOME=/home/stage2/ogg-mysql
cd /home/stage2/oggsc/ggs_Linux_x64_MySQL_services_shiphome/Disk1/
./runInstaller
进入图形化界面
1.选择ogg for mysql
2.选择OGG_HOME,这里就是新的针对于mysql的ogg_home
3.配置确认
4.安装过程,很快
5.安装完成
2.6.2 创建服务
[ogg@mysql Disk1]$ export OGG_HOME=/home/stage2/ogg-mysql
[ogg@mysql Disk1]$ export PATH=$PATH:$OGG_HOME/bin
[ogg@mysql Disk1]$ whereis oggca.sh
oggca: /home/stage/ogg-big-data/bin/oggca.sh /home/stage2/ogg-mysql/bin/oggca.sh
[ogg@mysql Disk1]$ cd $OGG_HOME/bin
[ogg@mysql bin]$ ./oggca.sh
进入图形化界面
1.部署一个新的service manager,路径选择与mysq对象的部署目录
2.添加一个新的deployment
3.填写deployment的名字,这里的software home就是OGG_HOME
4.填写deploy_home
5.填写环境变量,按照官方文档推荐增加了这个变量 ENV_LC_ALL=zh_CN.UTF-8
6.填写管理用户密码,root/Asdf123.
7.安全选项,为了简化配置,这里选择不使用tls
8.管理服务端口-填入9689,其他端口号留空,会自动递增1,打开监控,监控数据存储路径留空(这里的端口记得要跟楼上的big data的端口分开,别冲突了)
9.填写默认的schema(没太懂这个含义,随便写了个名字,估计是后面抽取时mysql中默认的database)
10.确认配置信息
11.安装。过程很快
12.安装完成
小结:到这里,源端(MySQL)的ogg环境(ogg for mysql)和目标端(yashan)的ogg 环境(ogg big data)基本部署好了,后面就是配置抽取和插入规则了。
3.配置抽取和插入
3.1 源端配置
1.登录http://192.168.23.57:9689
2.创建用户
3.添加一个【提取】
4.初始加载提取
5.配置提取项,进程名字不能超过8个字符,身份证明选择前面创建的mysql信息,线索名称只能为两个字母,比如ab。
6.配置参数文件,这里的extfile建议用绝对路径,不然找不到这个trail file会生成在那个目录。
7.运行完之后,会在文件目录下生成以线索名开头的trail file,比如ab000000。
8.绿√代表任务正在运行
9.黄色!代表任务正常运行完成(好一个黄色感叹号,我还以为告警呢了,果然不能想当然)
10.通过详细信息,可以查看任务执行的相关信息
11.查看报告,会看到有哪些表提取了多少行等信息
3.2 配置目标端
1.先把YashanDB JDBC驱动放在对应目录
cd /home/stage
mkdir -p ./ogg-big-data-driver/yashan
cd ./ogg-big-data-driver/yashan
#放在这个目录下
2.登录http://192.168.23.57:8689
3.添加一个【复制】
4.选择【经典复制】
5.填写复制选项,进程名也是不能超过8个字符,线索名就是【提取】时定义的线索名,线索子目录就是提取定义的线索所在路径,目标用JDBC。
6.配置参数文件,这里记得要配置字符集,也要注意表名的大小写等问题
7.配置属性文件,就是目标数据库连接方式
# Properties file for Replicat my2yas
# JDBC Handler Template
# Note: Recommended to only edit the configuration marked as TODO
gg.handlerlist=jdbcwriter
gg.handler.jdbcwriter.type=jdbc
#TODO: Edit the JDBC Driver class name.
gg.handler.jdbcwriter.DriverClass=com.yashandb.jdbc.Driver
#TODO: Edit the JDBC connectionURL.
gg.handler.jdbcwriter.connectionURL=jdbc:yasdb://192.168.3.186:1688/yasdb
#TODO: Edit the JDBC database user.
gg.handler.jdbcwriter.userName=tpcc
#TODO: Edit the JDBC database password.
gg.handler.jdbcwriter.password=tpcc
#TODO: Edit the classpath to point to the location of the JDBC driver.
gg.classpath=/home/stage/ogg-big-data-driver/yashan/yashandb-jdbc-1.5.1.jar
jvm.bootoptions=-Xmx512m -Xms32m
8.正常运行完成后,任务不会停止,可以通过详情查看偏移量,知道数据是否同步完成。可以手动停止任务
通过偏移量可以看到数据已经同步完成了,可以在数据库里面查询一下即可。
个人感受
这次测试大部分时间都是在安装OGG环境上了,自己的猜想也得到的证实。所以对于这种能使用驱动去自定义数据库源的工具,YashanDB应该都能支持,也可能会有些bug,就看驱动本身实现上有没有一些功能限制了,流程上应该没什么大问题。
像kettle也可以通过驱动自定义数据源,应该也是支持的,下次试试。