暂无图片
暂无图片
8
暂无图片
暂无图片
4
暂无图片

goldengate12C安装调试手顺from_oracle12c到Kafka数据实时同步

原创 John2020 2021-06-08
3262

导读

作者:杨漆
16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦,跌过不少坑、熬过许多夜。把工作笔记整理出来分享给大伙儿,希望帮到大家少走弯路、少熬夜。

原创:John 杨漆
前言
From Oracle12c 到 Kafka 数据实时同步 源端和目标端信息:

一、Source(Oracle)配置: 1.1 建立 ogg 安装目录

mkdir -p /opt/ogg
复制

GoldenGate12C 安装调试手顺

版本

GoldenGate 包版本

IP

Source 端

Oracle12.2.0.1.0
复制

Oracle GoldenGate 12.3.0.1.4 for Oracle on Linux X86-64
复制

10.11.88.8

Target 端

Kafka_2.11-1.1.1
复制

Oracle GoldenGate for Big Data 12.3.2.1.1 on Linux X86-64
复制

10.11.88.9

解压后进入安装文件目录
unzip 123014_fbo_ggs_Linux_x64_shiphome.zip
## unzip 191004_fbo_ggs_Linux_x64_shiphome.zip
cd /root/ogg_for_oracleDB/fbo_ggs_Linux_x64_shiphome/Disk1

让 Oracle 用户拥有 Ogg 权限
chown -R oracle:oinstall /opt/ogg

##ogg 12C 用这个包 ##ogg 19C 用这个包

1.2 配置 ogg 环境变量

su - oracle
vi .bash_profile
复制
export OGG_HOME=/opt/ogg
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/usr/lib
export PATH=$OGG_HOME:$PATH
复制

让配置的新环境变量生效 . .bash_profile

1.3 在 /opt/ogg/建立静默应答文件

拷贝静默应答模板进行改写
cp /root/fbo_ggs_Linux_x64_shiphome/Disk1/response/ oggcore.rsp

编辑静默应答文件
vi /opt/ogg/oggcore.rsp

/opt/ogg/

####################################################################
## Copyright(c) Oracle Corporation 2019. All rights reserved.     ##
##                                                                ##
## Specify values for the variables listed below to customize     ##
复制

## your installation.                                             ##
##                                                                ##
## Each variable is associated with a comment. The comment        ##
## can help to populate the variables with the appropriate        ##
## values.                                                        ##
##                                                                ##
## IMPORTANT NOTE: This file should be secured to have read       ##
## permission only by the oracle user or an administrator who     ##
## own this installation to protect any sensitive input values.   ##
##                                                                ##
####################################################################
复制
#-------------------------------------------------------------------------------
# Do not change the following system generated value.
#-------------------------------------------------------------------------------
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_sc
hema_v19_1_0
复制
################################################################################
##                                                                            ##
## Oracle GoldenGate installation option and details                          ##
##                                                                            ##
################################################################################
复制
#-------------------------------------------------------------------------------
复制

# Specify the installation option.
# Specify ORA19c for installing Oracle GoldenGate for Oracle Database 19c or
复制
  • #          ORA18c for installing Oracle GoldenGate for Oracle Database 18c or
    
    复制
  • #          ORA12c for installing Oracle GoldenGate for Oracle Database 12c or
    
    复制
  • #          ORA11g for installing Oracle GoldenGate for Oracle Database 11g
    #-------------------------------------------------------------------------------
    INSTALL_OPTION=ORA12c
    
    复制
    #-------------------------------------------------------------------------------
    # Specify a location to install Oracle GoldenGate
    #-------------------------------------------------------------------------------
    SOFTWARE_LOCATION=/opt/ogg
    
    复制
    #-------------------------------------------------------------------------------
    # Specify true to start the manager after installation.
    #-------------------------------------------------------------------------------
    START_MANAGER=
    
    复制
    #-------------------------------------------------------------------------------
    # Specify a free port within the valid range for the manager process.
    # Required only if START_MANAGER is true.
    #-------------------------------------------------------------------------------
    MANAGER_PORT=
    
    复制
    #-------------------------------------------------------------------------------
    # Specify the location of the Oracle Database.
    
    复制

# Required only if START_MANAGER is true.
#-------------------------------------------------------------------------------
DATABASE_LOCATION=
复制
################################################################################
##                                                                            ##
## Specify details to Create inventory for Oracle installs                    ##
## Required only for the first Oracle product install on a system.            ##
##                                                                            ##
################################################################################
复制
#-------------------------------------------------------------------------------
# Specify the location which holds the install inventory files.
# This is an optional parameter if installing on
# Windows based Operating System.
#-------------------------------------------------------------------------------
INVENTORY_LOCATION=/u01/app/oraInventory
复制
#-------------------------------------------------------------------------------
# Unix group to be set for the inventory directory.
# This parameter is not applicable if installing on
# Windows based Operating System.
#-------------------------------------------------------------------------------
UNIX_GROUP_NAME=oinstall
复制

1.4 配置完成后执行如下步骤安装 ogg

cd  /root/ogg_for_oracleDB/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller  -silent -nowait -responseFile /opt/ogg/oggcore.rsp
复制

验证安装 ogg 是否成功 ggsci

[oracle@kafka82118 response]$ ggsci
复制
Oracle GoldenGate Command Interpreter for Oracle
Version 12.3.0.1.4 OGGCORE_12.3.0.1.0_PLATFORMS_180415.0359_FBO
Linux, x64, 64bit (optimized), Oracle 12c on Apr 16 2018 00:53:30
Operating system character set identified as UTF-8.
复制

Copyright (C) 1995, 2018, Oracle and/or its affiliates. All rights reserved. GGSCI (kafka82118) 1>
出现如上画面表示安装 Ogg 成功。

1.5 进入 oracle 库进行配置和授权

数据库必须开启归档模式,并增加辅助日志
select force_logging,supplemental_log_data_min from v$database;

alter database force logging;
alter database add supplemental log data;
复制
alter system set enable_goldengate_replication=true scope=both;
复制
create user test_ogg identified by test_ogg default tablespace users;
grant dba to test_ogg;
复制

建立测试用户和表
conn test_ogg/test_ogg;
create table test_ogg(id int,name varchar(30),primary key(id));

1.6 对 Ogg 进行配置

ggsci
create subdirs
dblogin userid ogg password ogg
复制

配置全局变量
edit param ./globals

oggschema ogg
复制

配置 mgr 管理器 edit param mgr

PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints,minkeepdays 3
复制
#STARTUPVALIDATIONDELAY 5
复制

备注:1.PORT 为 mgr 默认监听端口;
2.DYNAMICPORTLIST 动态端口列表(指定端口不可用时会自动在这个范围内选择一个,能分配的最大范围是 256 个); 3.AUTORESTART 自动重启所有 EXTRACT 进程,至多 5 次,每次间隔 3 分钟;
4.PURGEOLDEXTRACTS 对 TRAIL 文件定期清除,以避免占用过多磁盘空间;
5.STARTUPVALIDATIONDELAY 即当 mgr 发出 start 命令后等待 5 毫秒检查进程的状态;

添加要复制的表
add trandata test_ogg.test_ogg

info trandata test_ogg.test_ogg
复制

配置 extract 进程 edit param extkafka

extract extkafka
dynamicresolution
SETENV(ORACLE_SID='orcl')
SETENV(ORACLE_HOME=/u01/app/oracle/product)
SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
userid ogg,password ogg
复制
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
GETUPDATEBEFORES
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
exttrail  /opt/ogg/dirdat/to
table test_ogg.test_ogg;
复制

备注:1. LOGALLSUPCOLS 加入前镜像
2. UPDATERECORDFORMAT COMPACT 把前后镜像混合到 trail 文件中去

3. GETUPDATEBEFORES 更新主键数据同步
4. NOCOMPRESSDELETES、NOCOMPRESSUPDATES delete、update 数据同步 5. exttrail 指定 trail 文件的保存位置及文件名
6. 指定要同步的表

配置 extract 进程
add extract extkafka,tranlog,begin now

若报错执行 create subdirs 后重新添加

添加 trail 与 extract 进程绑定
add exttrail /opt/ogg/dirdat/to,extract extkafka

配置 pump 进程
edit param pukafka

extract pukafka
passthru
dynamicresolution
userid ogg,password ogg
rmthost 10.11.88.9 mgrport 7810
rmttrail  /opt/ogg/dirdat/to
table test_ogg.test_ogg;
复制

备注:1. passthru 禁止 ogg 和 oracle 交互,使用 pump 逻辑传输,故静止既可 2. rmthost 指定目标端 IP 和端口
3. rmttrail 指定目标端 trail 文件位置、名字

添加 pump 进程
add extract pukafka,exttrailsource /opt/ogg/dirdat/to,begin now

add rmttrail /opt/ogg/dirdat/to,extract pukafka 配置 define 文件
edit param test_ogg

defsfile /opt/ogg/dirdef/test_ogg.test_ogg
userid ogg,password ogg
table test_ogg.test_ogg;
复制

登录 ogg 主目录下执行(oracle)
cd $OGG_HOME
./defgen paramfile dirprm/test_ogg.prm

将生成的 define 文件 copy 到远端
scp -r /opt/ogg/dirdef/test_ogg.test_ogg root@10.11.88.9:/opt/ogg/dirdef/

二、Target 端配置(kafka)

mkdir -p /opt/ogg
复制
unzip  OGG_BigData_Linux_x64_12.3.2.1.1.zip
## unzip OGG_BigData_Linux_x64_19.1.0.0.5.zip
复制

##12c 用 ##19c 用

tar -xf  OGG_BigData_Linux_x64_12.3.2.1.1.tar
## tar -xf     OGG_BigData_Linux_x64_19.1.0.0.5.tar  -C
复制

配置环境变量
vi /etc/profile

-C

/opt/ogg ##12c 用

/opt/ogg

##19c 用

export JAVA_HOME=/usr/java/jkd1.8.0_201-cloudera
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
复制
export OGG_HOME=/opt/ogg
export
LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64/libjsig.so:$JAVA_H
OME/jre/lib/amd64/server/libjvm.so:$OGG_HOME/lib:$LD_LIBRARY_PATH:$OGG_HOME
export PATH=$OGG_HOME:$PATH:$JAVA_HOME/bin
复制
source /etc/profile
复制

ggsci
create subdirs
exit
复制

启动 zookeeper
cd /opt/kafka_2.11-1.1.1/

nohup /opt/kafka_2.11-1.1.1/bin/zookeeper-server-start.sh  config/zookeeper.properties>/dev/null 2>&1 &
复制

启动 Kafka
nohup /opt/kafka_2.11-1.1.1/bin/kafka-server-start.sh config/server.properties>/dev/null 2>&1 &

检查 Kafka 进程是否启动

jps
若出现 Kakfa 表明启动成功

ggsci

配置 MGR
edit params mgr

PORT 7810
DYNAMICPORTLIST 7801-7809
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*, usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
复制

备注:LAGREPORTHOURS 1、LAGINFOMINUTES 30、LAGCRITICALMINUTES 45 mgr 每隔 1 小时检查 extract 的延迟情况,若超 30 分钟延 迟纪录到错误日志,若超 45 分钟延迟做为警告纪录进错误日志

配置 Checkpoint (数据复制可追溯的偏移量纪录) edit param ./GLOBALS

CHECKPOINTTABLE  test_ogg.checkpoint
复制

配置投递进程
edit param rekafka

REPLICAT rekafka
setenv(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
HANDLECOLLISIONS
sourcedefs /opt/ogg/dirdef/test_ogg.test_ogg
TARGETDB LIBFILE libggjava.so SET property=./dirprm/kafka.props
REPORTCOUNT EVERY 1 MINUTES,RATE
GROUPTRANSOPS 10000
MAP test_ogg.test_ogg,TARGET test_ogg.test_ogg;
复制

备注:
1. HANDLECOLLISIONS 目标端出现重复纪录和缺少纪录的错误解决 2. sourcedefs 源端服务器上做的表映射文件
3. TARGETDB LIBFILE 即 kafka 的适配性库文件和配置文件
4. REPORTCOUNT 复制任务报告生成频率
5. GROUPTRANSOPS 事务传输时的事务合并单位,为减少频繁 I/O 操作 6. MAP 源端、目标端映射关系

add replicat rekafka, exttrail /opt/ogg/dirdat/to,checkpointtable test_ogg.checkpoint
复制

三、Kafka 配置文件设置 cd /opt/ogg/dirprm/

vi kafka.props
复制
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=test_ogg
gg.handler.kafkahandler.keyMappingTemplate=
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.format.insertOpKey=I
gg.handler.kafkahandler.format.updateOpKey=U
gg.handler.kafkahandler.format.deleteOpKey=D
gg.handler.kafkahandler.format.truncateOpKey=T
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/:/opt/kafka/libs/*:/opt/kafka_2.11-1.1.1/libs/*:/opt/ogg/:/opt/ogg/lib/*
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
复制
vi custom_kafka_producer.properties
复制
bootstrap.servers=10.11.88.9:9092, 10.11.88.10:9092, 10.11.88.11: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=16384
复制
linger.ms=10000
max.request.size=5024000
send.buffer.bytes=5024000
复制

四、开启 OGG 数据同步 启动顺序
Source 端:

start mgr

Target 端: start mgr

Source 端: start extkafka start pukafka

Target 端: start rekafka

五、验证数据同步效果
cd /opt/kafka_2.11-1.1.1

bin/kafka-topics.sh --list --zookeeper localhost:2181 5.1 有对应表名,证明任务存在

5.2 通过消费者看是否有同步信息
bin/kafka-console-consumer.sh --bootstrap-server 10.11.88.9:9092 --topic test_ogg --from-beginning

验证,Kafka 端成功同步数据 !

六、故障及解决总结 6.1 故障现象

原因: 无法读取 mgr 配置文件
解决方案:必须先 cd $OGG_HOME,再通过 ggsci 进入

6.2 故障现象

原因:配置手册中 defgen 的 Source 文件名错误 解决方案:将文件名调整为 test_ogg.prm 即解决

6.3 故障现象

原因:Oracle 中 ogg 参数开关未开启
解决方案: alter system set enable_goldengate_replication = true scope=both

6.4 故障现象

原因: target 端 mgr 进程端口不匹配 解决方案:将 target 端 mgr 进程端口重新配置

6.5 故障现象

原因: 老的进程在后端占用进程,新配置的进程无法启动 解决方案:通过 ps –ef 查出老进程号并 kill 掉,之后重新 start

6.6 故障现象

原因: 环境变量 classpath 配置不全 解决方案:重新梳理 classpath 参数项,并补全配置

6.7 故障现象

原因: pump 进程无法锁定数据文件 解决方案:修改 pump 进程参数中的远端地址设置

6.8 故障现象

原因: Target 端 Kakfa.props 参数配置不匹配 解决方案:将 Kakfa.props 参数调整为与 Ogg 12C 的新参数

6.9 故障现象: Replicat 进程无法启动

原因: Kakfa 后台进程没有启动 解决方案:1.启动 zookeeper

nohup /opt/kafka_2.11-1.1.1/bin/zookeeper-server-start.sh config/zookeeper.properties>/dev/null 2>&1 & 2.启动 Kafka
nohup /opt/kafka_2.11-1.1.1/bin/kafka-server-start.sh config/server.properties>/dev/null 2>&1 &

通过 jps 命令检查,出现以上进程,表明 Kafka 启动成功。 6.10 故障现象: Target 端数据无法写入

原因: OGG 无法识别 Kafka 里 server.properites 文件中 hostname
解决方案:将 server.properites 中的 hostname 改为 IP 地址,并将数据发送大小进行控制


123凡科快图.gif

最后修改时间:2021-06-09 14:45:17
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

筱悦星辰
暂无图片
1年前
评论
暂无图片 0
遇事先处理情绪,再处理事情。沉着冷静,直面问题,才能让事情向着自己满意的方向发展。
1年前
暂无图片 点赞
评论
库海无涯
暂无图片
1年前
评论
暂无图片 0
少走弯路、少熬夜
1年前
暂无图片 点赞
评论
rundba
暂无图片
3年前
评论
暂无图片 0
ogg oracle2hive也来一篇
3年前
暂无图片 点赞
1
John2020
暂无图片
3年前
回复
暂无图片 1
感谢关注! 暂时没有做hive的. 等以后做了一定分享给大家,哈哈哈!
3年前
暂无图片 1
回复