导读
作者:杨漆
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 地址,并将数据发送大小进行控制
评论


