基于Docker的GoldenGate部署
前言
??? Docker最近幾年異常火爆,主要是因?yàn)槠浞奖恪⒖旖荨⑤p量,相對于VM,它不需要占用太多資源,隨時可以創(chuàng)建、刪除,或在已有image上添加一些軟件,再制作成另一個模板image供日后使用。Docker提供的Hub或private registry功能,也極大的方便了日常測試環(huán)境的配置和使用,類似于手機(jī)應(yīng)用商店,可以按需下載,幫助企業(yè)在很短的時候內(nèi)部署多個不同的DB環(huán)境,如Windows, Unbuntu, MySQL, Postgresql, Hive等,跟傳統(tǒng)的VM相比,占用資源更少,效率也更高。
針對軟件開發(fā)、測試和發(fā)布,Docker在DevOps更是如魚得水,將持續(xù)集成和測試提升到了一個新的高度。不過,今天主要介紹GoldenGate在Docker環(huán)境下的使用和心得。
GoldenGate主要用于關(guān)系型數(shù)據(jù)庫的增量數(shù)據(jù)捕獲和實(shí)時投遞,支持Oracle, MySQL, SQLServer, DB2, Sybase, Big data等。通過將GoldenGate制作成Docker Image,可以很容易的搭建一套捕獲增量數(shù)據(jù)的測試環(huán)境,同時,也可以在企業(yè)內(nèi)部實(shí)現(xiàn)快速的GoldenGate部署。
本次測試主要有三套Docker環(huán)境
l Oracle DB on Docker
l OGG on Docker with Oracle Instant client and OGG for mysql
l MySQL on Docker
下面測試以O(shè)racle DB為源數(shù)據(jù)庫,使用OGG遠(yuǎn)程抽取增量數(shù)據(jù),再將增量數(shù)據(jù)投遞到MySQL中。架構(gòu)如下:
Docker環(huán)境準(zhǔn)備
Oracle on docker準(zhǔn)備
針對Oracle DB on docker,可以從store.docker.com上下載,也可以自己在一個Oracle Linux容器中安裝oracle db,從省事的角度,我們直接從docker hub上面pull即可,不過需要先在docker網(wǎng)站創(chuàng)建賬號,然后才能下載oracle db image
docker login
docker pull store/oracle/database-enterprise:12.2.0.1
由于當(dāng)前是oracle db 12.2版本,因此,OGG for oracle只能使用12.3版本。
Mysql on docker準(zhǔn)備
直接下載官方的image即可。
docker pull mysql
OGG on docker準(zhǔn)備
GoldenGate Image沒有現(xiàn)成的,所以還需要我們手工生成。本次測試主要是為了展現(xiàn)docker的可重用性,因此,我們在一個image中部署有ogg for oracle和ogg for mysql。
由于ogg for oracle需要有OCI才能正常運(yùn)行,所以我們可以直接使用docker oracle instant client image,在此基礎(chǔ)上再安裝ogg for oracle和ogg for mysql。
先準(zhǔn)備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內(nèi)容如下:
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,內(nèi)容如下:
其中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))) |
創(chuàng)建ogg image
docker build -t="ogg123mysql122" .
測試
下載的oracle db image默認(rèn)是未打開歸檔的,所以需要根據(jù)OGG的配置要求,在oracle db上打開歸檔及設(shè)置其它參數(shù),此處涉及到OGG的相關(guān)配置,在此略過。
啟動源端db on docker
docker run -d -it --name orcl –p 11521:1521 store/oracle/database-enterprise:12.2.0.1
#由于啟動DB需要花一定時間,等container運(yùn)行正常之后,再連接到DB
docker exec -it orcl bash -c "source /home/oracle/.bashrc; sqlplus / as sysdba"
查看一下DB的相關(guān)信息
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上,查看我們的此次用到的測試表
啟動目標(biāo)端DB
啟動mysql docker
docker run –ti –p 13306:3306 mysql /bin/bash
然后在內(nèi)容中執(zhí)行如下命令
#service mysql start
#mysql –u root
查看目標(biāo)端的測試表
啟動OGG image并測試
根據(jù)前面創(chuàng)建的ogg image,運(yùn)行并進(jìn)入shell
docker run –ti --name oggdocker ogg123mysql122 /bin/bash
源端OGG for oracle
進(jìn)入源端的ggsci,查看抽取進(jìn)程參數(shù)及運(yùn)行狀態(tài)
可以從OGG docker順利登錄到另一個docker內(nèi)的oracle 源數(shù)據(jù)庫。
在源端DB插入測試數(shù)據(jù),檢查OGG的捕獲進(jìn)程情況。
OGG可以正常捕獲數(shù)據(jù)。
目標(biāo)端ogg for mysql
投遞進(jìn)程參數(shù)文件,通過docker內(nèi)部IP,可正常登錄到mysql.
可以看到,數(shù)據(jù)可以正常投遞到mysql中。
以下是數(shù)據(jù)庫中的實(shí)際數(shù)據(jù)。
結(jié)論
可以看到,在具備ogg docker image的情況下,如果要部署一套實(shí)時的數(shù)據(jù)復(fù)制鏈路,只需要將docker run起來,通過簡單的參數(shù)配置即可。采用OGG+docker的架構(gòu),可以很快的提供數(shù)據(jù)復(fù)制測試和生產(chǎn)部署,同時,在大數(shù)據(jù)集成環(huán)境中,也可以很容易的部署多個投遞點(diǎn),而不用擔(dān)心版本不一致。
轉(zhuǎn)載于:https://www.cnblogs.com/margiex/p/8999245.html
總結(jié)
以上是生活随笔為你收集整理的基于Docker的GoldenGate部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据软件安装之Azkaban(任务调度
- 下一篇: 波浪号和Hyphen扩展