基于Docker的GoldenGate部署
前言
Docker最近几年异常火爆,主要是因为其方便、快捷、轻量,相对于VM,它不需要占用太多资源,随时可以创建、删除,或在已有image上添加一些软件,再制作成另一个模板image供日后使用。Docker提供的Hub或private registry功能,也极大的方便了日常测试环境的配置和使用,类似于手机应用商店,可以按需下载,帮助企业在很短的时候内部署多个不同的DB环境,如Windows, Unbuntu, MySQL, Postgresql, Hive等,跟传统的VM相比,占用资源更少,效率也更高。
针对软件开发、测试和发布,Docker在DevOps更是如鱼得水,将持续集成和测试提升到了一个新的高度。不过,今天主要介绍GoldenGate在Docker环境下的使用和心得。
GoldenGate主要用于关系型数据库的增量数据捕获和实时投递,支持Oracle, MySQL, SQLServer, DB2, Sybase, Big data等。通过将GoldenGate制作成Docker Image,可以很容易的搭建一套捕获增量数据的测试环境,同时,也可以在企业内部实现快速的GoldenGate部署。
本次测试主要有三套Docker环境
l Oracle DB on Docker
l OGG on Docker with Oracle Instant client and OGG for mysql
l MySQL on Docker
下面测试以Oracle DB为源数据库,使用OGG远程抽取增量数据,再将增量数据投递到MySQL中。架构如下:

Docker环境准备
Oracle on docker准备
针对Oracle DB on docker,可以从store.docker.com上下载,也可以自己在一个Oracle Linux容器中安装oracle db,从省事的角度,我们直接从docker hub上面pull即可,不过需要先在docker网站创建账号,然后才能下载oracle db image
docker login
docker pull store/oracle/database-enterprise:12.2.0.1
由于当前是oracle db 12.2版本,因此,OGG for oracle只能使用12.3版本。
Mysql on docker准备
直接下载官方的image即可。
docker pull mysql
OGG on docker准备
GoldenGate Image没有现成的,所以还需要我们手工生成。本次测试主要是为了展现docker的可重用性,因此,我们在一个image中部署有ogg for oracle和ogg for mysql。
由于ogg for oracle需要有OCI才能正常运行,所以我们可以直接使用docker oracle instant client image,在此基础上再安装ogg for oracle和ogg for mysql。
先准备oracle instance client image
docker pull store/oracle/database-instantclient:12.2.0.1
基于此image再建立一个包含ogg for oracle及ogg for mysql的image,需要先将安装好的ogg目录打包,再添加到docker中。
Dockerfile内容如下:
|
FROM container-registry.oracle.com/database/instantclient:12.2.0.1 ENV OGG_HOME=/u01/ogg123 ENV ORACLE_HOME=/lib/oracle/12.2/client64 ENV LD_LIBRARY_PATH=/lib/oracle/12.2/client64/lib ENV TNS_ADMIN=/u01/tns RUN mkdir /u01/tns/ ADD tnsnames.ora /u01/tns/ ADD ogg123.tar /u01/ ADD ggmysql.tar /u01/ EXPOSE 7809 7909 CMD ["/bin/bash"] |
其中tnsnames.ora用于在ogg docker中访问oracle db,内容如下:
其中172.17.0.3是oracle db docker的IP地址。
|
ORCLCDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.0.3)(PORT=1521)) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLCDB.localdomain))) ORCLPDB1=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.0.3)(PORT=1521)) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLPDB1.localdomain))) |
创建ogg image
docker build -t="ogg123mysql122" .
测试
下载的oracle db image默认是未打开归档的,所以需要根据OGG的配置要求,在oracle db上打开归档及设置其它参数,此处涉及到OGG的相关配置,在此略过。
启动源端db on docker
docker run -d -it --name orcl –p 11521:1521 store/oracle/database-enterprise:12.2.0.1
#由于启动DB需要花一定时间,等container运行正常之后,再连接到DB
docker exec -it orcl bash -c "source /home/oracle/.bashrc; sqlplus / as sysdba"
查看一下DB的相关信息
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
ORCLCDB
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB1 READ WRITE NO
SQL>
切换到pdb上,查看我们的此次用到的测试表

启动目标端DB
启动mysql docker
docker run –ti –p 13306:3306 mysql /bin/bash
然后在内容中执行如下命令
#service mysql start
#mysql –u root
查看目标端的测试表

启动OGG image并测试
根据前面创建的ogg image,运行并进入shell
docker run –ti --name oggdocker ogg123mysql122 /bin/bash

源端OGG for oracle
进入源端的ggsci,查看抽取进程参数及运行状态
可以从OGG docker顺利登录到另一个docker内的oracle 源数据库。
在源端DB插入测试数据,检查OGG的捕获进程情况。
OGG可以正常捕获数据。
目标端ogg for mysql
投递进程参数文件,通过docker内部IP,可正常登录到mysql.
可以看到,数据可以正常投递到mysql中。
以下是数据库中的实际数据。

结论
可以看到,在具备ogg docker image的情况下,如果要部署一套实时的数据复制链路,只需要将docker run起来,通过简单的参数配置即可。采用OGG+docker的架构,可以很快的提供数据复制测试和生产部署,同时,在大数据集成环境中,也可以很容易的部署多个投递点,而不用担心版本不一致。
基于Docker的GoldenGate部署的更多相关文章
- 基于docker和cri-dockerd部署kubernetes v1.25.3
基于docker和cri-dockerd部署kubernetes v1.25.3 1.环境准备 1-1.主机清单 主机名 IP地址 系统版本 k8s-master01 k8s-master01.wan ...
- 基于Docker的Kafka部署
一 准备 1.1 安装docker-dompose #部署 sudo curl -L "https://github.com/docker/compose/releases/download ...
- SpringBoot | 第十四章:基于Docker的简单部署
前言 讲解了单元测试,本章节讲讲应用的部署吧.总体而言,在进行自动化部署时,基本都会用上Jenkins+Maven+Docker进行部署.本章节主要讲解使用Maven+Docker进行SpringBo ...
- OpenLDAP 多主复制(基于docker容器模式部署)
**本文主要讲述在docker环境下如何进行 OpenLDAP 多主复制,至于 OpenLDAP 原理可以先参考这篇文章了解:https://cloud.tencent.com/developer/a ...
- 基于docker的wekan部署
镜像地址: https://hub.docker.com/r/wekanteam/wekan/ wiki: https://github.com/wekan/wekan/wiki#Developmen ...
- Ubuntu系统下基于docker部署Jenkins环境
本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中, 至于docker如何安装,请参考https://www.cnblogs.com/xingyunqiu/p/115 ...
- 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署
庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介 我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...
- 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介 前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...
- 基于docker 如何部署surging分布式微服务引擎
1.前言 转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微 ...
随机推荐
- 浅谈一下Windows下的用户权限
大学毕业后,选择做了苹果开发,一直是使用的Mac系统,所以对Windows的基本操作忘得几乎一干二净:因为做内网穿透的需要,要用到Windows下的权限问题,所以重新研究了一下Windows设置用户权 ...
- vs启动出错(chenlu-1):参数“basePath”不能是相对路径
参数“basePath”不能是相对路径 原因: 1.调试路径下没有exe文件.没有生成exe文件. 2.项目属性->配置属性->调试->命令中的参数被设置为相对路径.
- STC15单片机最小系统DIY
DIY计划简介 STC15F2K60S2简介: STC-Y5高速内核,工作频率可配置为1T(sysclk=mclk) 2K RAM(256字节 idata + 1792字节 xdata) + 60K ...
- 漏洞预警:Linux内核9年高龄的“脏牛”0day漏洞
这个名叫Dirty COW,也就是脏牛的漏洞,存在Linux内核中已经有长达9年的时间,也就说2007年发布的Linux内核版本中就已经存在此漏洞.Linux kernel团队已经对此进行了修复. 漏 ...
- MapReduce Map数 reduce数设置
JobConf.setNumMapTasks(n)是有意义的,结合block size会具体影响到map任务的个数,详见FileInputFormat.getSplits源码.假设没有设置mapred ...
- zabbix的安装部署及自定义监控的实现
此篇感谢我的小师傅. 1. Zabbix主要功能和优劣势说明 1. Zabbix主要功能和优劣势说明 1.1 Zabbix主要功能: 1)Application monitoring 应用监控 数据库 ...
- 11.14 luffycity项目(6)
2018-11-14 21:26:45 实现了购物车功能! 涉及到了redis的使用 需要在pycharm中下载 django_redis 其他的看一下笔记,有购物车里面数据存储的结构才发现数据 ...
- error_match问题
当nginx的sendfile处于on的情况下,在docker的环境下修改js文件会出现error_match的问题,应该要在nginx的配置中把sendfile设为off
- jquery面试(2)
DOM操作——怎样添加.移除.移动.复制.创建和查找节点? (1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体 ...
- java基础---->Java的格式化输出
在JavaSe5中,推出了C语言中printf()风格的格式化输出.这不仅使得控制输出的代码更加简单,同时也给与Java开发者对于输出格式与排列更大的控制能力.今天,我们开始学习Java中的格式化输出 ...