Oracle GoldenGate 调研

# 概述
Oracle GoldenGate 是一款用于实时数据集成和异构数据库复制的产品。它支持组织实现与分析系统的实时数据集成、无停机地迁移和整合到云架构、 从事务系统(内部和云)分流报告功能以实现最高性能、实施主动-主动数据库复制以实 现数据分布和持续可用性。


## 定位
- 零宕机时间数据库升级和迁移。
- 满足用户亚秒级实时数据的需求。
- 可持续的数据高可用性和实时商务智能。
- 异构平台及跨操作系统实时数据同步。

- 对源系统和目标系统是非侵入式的。

## 架构
和传统的逻辑复制一样,GoldenGate实现原理是通过抽取源端的redo log 或者archive log,然后通过TCP/IP投递到目标端,最后解析还原应用到目标端,使目标端实现同源端数据同步。




## 组件
- Manager进程: Manager进程运行在源端和目标端上,作用:启动、监控、重启GoldenGate的其他进程,报告错误及事件,分配数据存储空间,发布阈值报告等.
- Extract进程: 运行在数据库源端,负责从源端数据表或者日志中捕获数据。checkpoint机制,信息写入trail文件,实现断点续传.
- Pump进程: 运行在数据库源端,如果源端使用了本地的trail文件,那么Pump进程就会把trail以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推荐的方式。与Pump进程相对应的叫做Server Collector进程,对用户透明,把Extract/Pump投递过来的数据块重新组装成trail文件.
- Trail文件: trail文件存在的目的旨在防止单点故障,将事务信息持久化,并且使用checkpoint机制来记录其读写位置,如果故障发生,则数据可以根据checkpoint记录的位置来重传。trail文件并不总是必须的。人们可以在配置Extract进程的时候通过TCP/IP协议直接把日志的信息投递到目标端(不推荐).
- Replicat进程: 运行在目标端,是数据传递的最后一站,负责读取目标端trail文件中的内容,并将其解析为DML或DDL语句,然后应用到目标源中。checkpoint机制.
- GGSCI: 提供了十分丰富的命令来对GoldenGate进行各种操作,如创建、修改、监控GoldenGate进程等。


## 复制模式
- “一对一”是GoldenGate最简单的一种模式,也是最常用的模式。这种模式的一种典型应用就是用于数据容灾,通常源端数据库为生产端,目标端数据库为容灾端。
- 另外一种应用场景是把源端的OLTP系统产生的交易日志传送到目标端,使用BI数据仓库或者是OLAP



## mysql to kafka installation
- 源端
    - 软件:ggs_Linux_x64_MySQL_64bit.tar
    - 配置环境变量
    ```json
    export MYSQL_HOME=<MySQL bin location>
    export GGS_HOME=/home/ec2-user/l3/gg
    export LD_LIBRARY_PATH=$GG_HOME:/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/lib/amd64/server
    export PATH=$PATH:$GGS_HOME
    ```
    - ggsci
    - create subdirs
    - EDIT PARAMS MGR
    ```json
    PORT 7801
    AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
    PURGEOLDEXTRACTS /home/hadoop/l3/gg/dirdat/*,usecheckpoints, minkeepdays 3
    ```
    - START mgr
    - INFO MANAGER/INFO ALL
    - EDIT PARAM ext_name
    ```json
    extract ext_l
    setenv (MYSQL_HOME="/usr/libexec/mysql55")
    tranlogoptions altlogdest /var/lib/mysql/mysql.index
    DBOPTIONS HOST localhost, CONNECTIONPORT 3306
    SOURCEDB test,USERID root, PASSWORD 123456
    RMTHOST 192.15.2.10, MGRPORT 7801
    gettruncates
    GETUPDATEBEFORES
    NOCOMPRESSDELETES
    NOCOMPRESSUPDATES
    RMTTRAIL ./dirdat/l3
    TABLE test.t_test;
    ```
    - ADD EXTRACT ext_l, TRANLOG, BEGIN NOW
    - ADD RMTTRAIL ./dirdat/l3 EXTRACT ext_l, MEGABYTES 5
    - start extract ext_l
    - info extract ext_l, detail
    - view report ext_l
    - edit param pump_l (可选)
    ```json
    rmthost 192.15.2.10,mgrport 7801
    rmttrail /usr/local/ogg/ogg/dirdat/WC
    passthru
    gettruncates
    table test.t_test;
    ```
    - start pump_l 
    - 查看日志:GoldenGate安装目录下: ggserr.log


- 目标端
    - 软件: OGG_BigData_Linux_x64_12.3.2.1.0.tar,kafka_2.12-0.10.2.1
    - 配置环境变量
    ```json
    export MYSQL_HOME=<MySQL bin location>
    export GGS_HOME=/home/ec2-user/l3/gg
    export LD_LIBRARY_PATH=$GG_HOME:/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/lib/amd64/server
    export PATH=$PATH:$GGS_HOME
    ```
    - kafka创建topic:bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic t_test
    - 查看topic: bin/kafka-topics.sh --list --zookeeper localhost:2181
    - 消费topic: bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic t_test --from-beginning
    - ggsci
    - create subdirs
    - EDIT PARAMS MGR
    ```json
    PORT 7801
    AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
    PURGEOLDEXTRACTS /home/hadoop/l3/gg/dirdat/*,usecheckpoints, minkeepdays 3
    ```
    - START mgr
    - INFO MANAGER/INFO ALL
    - EDIT PARAM rep_name
    ```json
    REPLICAT rep_l
    TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
    REPORTCOUNT EVERY 1 MINUTES, RATE
    GROUPTRANSOPS 10000
    MAP test.t_test, TARGET test.t_test;
    ```
    - add replicat rep_l, exttrail ./dirdat/l3
    - start replicat rep_l
    - info rep_l/info all
    - 查看日志:GoldenGate安装目录下: ggserr.log
    - vim dirprm/kafka.props
    ```json
    gg.handlerlist=kafkahandler
    gg.handler.kafkahandler.type=kafka
    gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
    gg.handler.kafkahandler.topicMappingTemplate=t_order_action
    gg.handler.kafkahandler.keyMappingTemplate=${currentTimestamp}
    gg.handler.kafkahandler.format=delimitedtext
    gg.handler.kafkahandler.format.fieldDelimiter=|
    gg.handler.kafkahandler.SchemaTopicName=tpcSchemaTopic
    gg.handler.kafkahandler.BlockingSend=false
    gg.handler.kafkahandler.includeTokens=false
    gg.handler.kafkahandler.mode=op
    goldengate.userexit.timestamp=utc
    goldengate.userexit.writers=javawriter
    javawriter.stats.display=TRUE
    javawriter.stats.full=TRUE
    gg.log=log4j
    gg.log.level=INFO
    gg.report.time=30sec
    gg.classpath=dirprm/:/home/hadoop/kafka_2.12-0.10.2.1/libs/*
    javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
    ```
    - vim dirprm/custom_kafka_producer.properties
    ```json
    bootstrap.servers=localhost:9092
    acks=1
    compression.type=gzip
    reconnect.backoff.ms=1000
    value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
    key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
    batch.size=102400
    linger.ms=10000
    ```
    - edit param ./GLOBALS
    - start replicat ext_l

猜你喜欢

转载自blog.csdn.net/feng12345zi/article/details/80669513