前言

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部署的更多相关文章

  1. 基于docker和cri-dockerd部署kubernetes v1.25.3

    基于docker和cri-dockerd部署kubernetes v1.25.3 1.环境准备 1-1.主机清单 主机名 IP地址 系统版本 k8s-master01 k8s-master01.wan ...

  2. 基于Docker的Kafka部署

    一 准备 1.1 安装docker-dompose #部署 sudo curl -L "https://github.com/docker/compose/releases/download ...

  3. SpringBoot | 第十四章:基于Docker的简单部署

    前言 讲解了单元测试,本章节讲讲应用的部署吧.总体而言,在进行自动化部署时,基本都会用上Jenkins+Maven+Docker进行部署.本章节主要讲解使用Maven+Docker进行SpringBo ...

  4. OpenLDAP 多主复制(基于docker容器模式部署)

    **本文主要讲述在docker环境下如何进行 OpenLDAP 多主复制,至于 OpenLDAP 原理可以先参考这篇文章了解:https://cloud.tencent.com/developer/a ...

  5. 基于docker的wekan部署

    镜像地址: https://hub.docker.com/r/wekanteam/wekan/ wiki: https://github.com/wekan/wekan/wiki#Developmen ...

  6. Ubuntu系统下基于docker部署Jenkins环境

    本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中, 至于docker如何安装,请参考https://www.cnblogs.com/xingyunqiu/p/115 ...

  7. 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署

    庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介      我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...

  8. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  9. 基于docker 如何部署surging分布式微服务引擎

    1.前言 转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微 ...

随机推荐

  1. Tensorflow Seq2seq attention decode解析

    tensorflow基于 Grammar as a Foreign Language实现,这篇论文给出的公式也比较清楚. 这里关注seq2seq.attention_decode函数, 主要输入 de ...

  2. MFMailComposeViewController发送邮件的实例

    本文转载至 http://blog.csdn.net/liufeng520/article/details/7585140   iPhone API已经提供了系统写邮件界面的接口,使用MFMailCo ...

  3. Android学习:简易图片浏览

    这个例子学习混合使用XML布局和代码来控制UI,习惯上把变化小.行为固定的组件放在XML布局文件中管理,而那些变化较多.行为控制复杂的组件则交给Java代码来管理. 先在布局文件中定义一个线性布局容器 ...

  4. 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  5. Educational Codeforces Round 2

    600A - Extract Numbers    20171106 字符串处理题,稍微注意点细节就能水过 #include<stdlib.h> #include<stdio.h&g ...

  6. ubuntu下安装php扩展

    参考原文地址:http://www.php.cn/php-weizijiaocheng-341528.html 发现在mac上好像不太行,然后按照下面的可以,写下来与大家分享 利用ubuntu的软件包 ...

  7. js 判断js,css是否引入,确保不重复引入

      基本原理:function loadjscssfile(filename, filetype){if (filetype=="js"){ //if filename is a ...

  8. 队列模拟基本操作I

    看到这道题,第一个想法就是“搜索”!“回溯”!的确,这种思路是很正确的,BFS和DFS都可以来解决: #include <cstdlib> #include <cstring> ...

  9. Linux命令 diff cmp patch

    diff: 以行为单位进行比对 $ cat passwd | sed -e '4d' -e '6c no six line' > passwd.new $ cat -n passwd.new 1 ...

  10. DELPHI中完成端口(IOCP)的简单分析(2)

    DELPHI中完成端口(IOCP)的简单分析(2)   今天我写一下关于DELPHI编写完成端口(IOCP)的工作者线程中的东西.希望各位能提出批评意见.上次我写了关于常见IOCP的代码,对于IOCP ...