环境

操作系统: ORACLE Linux7.9-64bit

数据库版本: Postgresql-14.2-64bit

OGG版本:OGG21.3-64bit

2台测试服务器:(源)192.168.56.51;(目标)192.168.56.52

概述

在写这篇文章的时候,也是经历了很多次的失败,在各种弹坑中爬起又跌倒,才在最后成功的基础上整理出详细步骤。以此纪念那几天抓狂的经历。希望后来者少走弯路,注意避坑。 本文是OGG for Postgresql的开篇,主要是介绍安装步骤和操作说明。

正式开始前先来梳理一下第一阶段要完成的安装和配置任务:

1. 安装数据库软件,完成OGG对数据库的基本配置要求

2. 安装OGG软件,完成相关的软件基本配置要求

3. 完成演示数据库的创建和源库的提取进程,OGG服务管理进程的部署,并正常启动服务

4. 介绍几个GGSCI的基本操作

安装部署步骤

1. 安装数据库

这个没有什么多说的,按照OGG的官方要求,需要用到postgresql中的test_decoding插件,该插件包含在postgresql14-contrib中,所以我是根据postgresql官方的安装说明进行的操作,具体说明不再赘述,可参考:PostgreSQL: Linux downloads (Red Hat family)

安装操作 (root用户)

# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Install PostgreSQL:
sudo yum install -y postgresql14-server
sudo yum install -y postgresql14-contrib
sudo yum install -y postgresql14-libs
sudo yum install -y postgresql14-devel
#
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

数据库的访问权限配置和OGG要求的复制槽配置

(1)访问权限白名单:/var/lib/pgsql/14/data/pg_hba.conf

echo "host all all 0.0.0.0/0 scram-sha-256" >>/var/lib/pgsql/14/data/pg_hba.conf
sed -i "s/peer/trust/g" /var/lib/pgsql/14/data/pg_hba.conf

(2)启用外部访问和复制槽:/var/lib/pgsql/14/data/postgresql.conf

sed -i "s/#wal_level = replica/wal_level = logical/g" /var/lib/pgsql/14/data/postgresql.conf
sed -i "s/#max_replication_slots = 10/max_replication_slots = 10/g" /var/lib/pgsql/14/data/postgresql.conf
sed -i "s/#max_wal_senders = 10/max_wal_senders = 10/g" /var/lib/pgsql/14/data/postgresql.conf
sed -i "s/#track_commit_timestamp = off/track_commit_timestamp = on/g" /var/lib/pgsql/14/data/postgresql.conf

(3)重启数据库

systemctl restart postgresql-14

2. 安装OGG

(1)上传安装包(root)

## 1. 创建临时存放安装包的目录
mkdir -p /home/postgres/stage
## 2. 使用传输工具把安装包上传到上述目录
## 3. 把该目录授权给postgres用户
chown -R postgres:postgres /home/postgres

(2)安装OGG软件(postgres)

安装软件的过程其实就是把安装包解压缩到指定的安装目录,此处是/home/postgres/ogg_postgresql,后面要设置环境变量OGG_HOME指向该目录

su - postgres
cd /home/postgres/stage
unzip 213000_ggs_Linux_x64_PostgreSQL_64bit.zip
mkdir -p /home/postgres/ogg_postgresql
tar xvf ggs_Linux_x64_PostgreSQL_64bit.tar -C /home/postgres/ogg_postgresql

解压完成后,还需要把postgresql中的libpq.so类库(在/usr/pgsql-14/lib/)复制到ogg的lib目录

cp /usr/pgsql-14/lib/libpq.so.5 /home/postgres/ogg_postgresql/lib/

(3)设置环境变量(postgres)

这些是OGG环境必须的几个环境变量,为了操作方便,也可以加入你自己想要的环境变量

vi ~/.bash_profile
##添加下列环境变量
export OGG_HOME=/home/postgres/ogg_postgresql
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OGG_HOME:$OGG_HOME/lib
export ODBCINI=$OGG_HOME/odbc.ini
export PATH=$OGG_HOME:/usr/pgsql-14/lib:$PATH
##保存退出
:wq
##重新加载
source ~/.bash_profile

ODBCINI是ODBC驱动所需的配置文件,后面步骤中会补充,这里先设置。OGG for Postgresql使用ODBC驱动连接数据库,相关的驱动程序已经包含在OGG安装包中,安装后的位置在/home/postgres/ogg_postgresql/lib/GGpsql25.so,后面配置odbc.ini时要用到。

提示:对于新手来说,ODBC这个地方是容易掉坑的地方,配置错误就会导致无法在启动提取进程的时候连接数据库,请先严格按照本文描述步骤操作,再去研究原理,比如odbc.ini必须放在ogg安装目录内。

截止到这里,OGG for Postgresql的软件环境部署基本完成。最后再验证一下OGG的命令行接口是否正常,如不能正常启动请回顾上述步骤。

(4)验证

cd $OGG_HOME
ggsci
# 出现下面的提示符说明安装成功
GGSCI (postgresql) 1>

3. 为OGG准备专用schema和专用用户并授权

在正式开始配置OGG流程前,根据官方推荐,最好给OGG准备一个专门的schema和专门的用户,并对该用户授予必要的权限,操作如下:

(1)创建数据库

# 为了演示的时候方便使用,这里初始化一下管理员密码
# 创建演示库-test_db
psql
alter user postgres password 'Cloud_4u'; ##初始化密码
create DATABASE test_db; ##测试数据库
\q
# 切换到OGG专库,创建schema
psql -d test_db -U postgres
create SCHEMA ggsch; ##gg专用数据库shcema
\q
# 切换到演示库,创建测试用的表
psql -d test_db -U postgres
create schema test_schema;
create table test_schema.demo(id int2,cname varchar(20));
insert into test_schema.demo values(1,'no.1');
\q

(2)创建OGG专用用户,并授权

# 创建专用用户-gguser
psql
create role gguser login password 'Cloud_4u' ;
GRANT CONNECT ON DATABASE postgres TO gguser;
ALTER USER gguser WITH REPLICATION;
ALTER USER gguser WITH SUPERUSER;
\q
# 切换到test_db进行授权
psql -d test_db -U postgres
GRANT USAGE ON SCHEMA ggsch TO gguser;
GRANT SELECT ON ALL TABLES IN SCHEMA ggsch TO gguser;
GRANT INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA ggsch TO gguser;
-- 心跳和检查点权限
GRANT CREATE ON DATABASE gg_db TO gguser;
GRANT CREATE, USAGE ON SCHEMA ggsch TO gguser;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA ggsch TO gguser;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA ggsch TO gguser;
\q

4. 安装ODBC驱动,配置DNS

(1)稍早前的步骤已设置环境变量:ODBCINI,下面我们就创建和设置这个odbc.ini文件

vi $ODBCINI
##加入下面的内容
[ODBC Data Sources]
pg_src=DataDirect 7.1 PostgreSQL Wire Protocol
pg_tgt=DataDirect 7.1 PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=106
InstallDir=/home/postgres/ogg_postgresql
[pg_src]
Driver=/home/postgres/ogg_postgresql/lib/GGpsql25.so
Description=DataDirect 7.1 PostgreSQL Wire Protocol
Database=test_db
HostName=192.168.56.51
PortNumber=5432
[pg_tgt]
Driver=/home/postgres/ogg_postgresql/lib/GGpsql25.so
Description=DataDirect 7.1 PostgreSQL Wire Protocol
Database=test_db
HostName=192.168.56.52
PortNumber=5432

[ODBC Data Sources]

配置的数据源的名称,名称可自定义,DSN 名称的长度最多允许 32 个字母数字字符,不包括除下划线和破折号以外的特殊键盘字符。=后面的内容暂不清楚是何意义,这里是照搬的oracle官方操作例子(Preparing the Database for Oracle GoldenGate)。我配置了3个数据源,分别是pg_ogg是连接到ogg专属库的连接;pg_src是连接到数据源的连接;pg_tgt是连接到目标库的连接;

[ODBC]

IANAAppCodePage是字符集,106是UTF-8,其他的可以参考Progress Documentation

 InstallDir是 Oracle GoldenGate 安装文件夹的位置;

[pg_src]这是和[ODBC Data Sources]中定义的相同的DNS名称,必须一致

Driver是 Oracle GoldenGate 安装主$OGG_HOME/lib/GGpsql25.so 文件的位置。
Database是源或目标数据库的名称。
HostName是数据库主机 IP 地址或主机名。
PortNumber是数据库的监听端口。
还可以为 Extract 或 Replicat 用户提供LogonIDand Password,但这些将以明文形式存储,建议将这些字段保留在 DSN 之外,并将它们作为凭证别名存储在 Oracle GoldenGate 钱包中,并参考它们与 USERIDALIAS提取和复制中的参数一起使用。

(2)创建OGG登录凭证

这个可以统一管理登录口令,避免以明文形式出现在OGG的服务进程配置中

cd $OGG_HOME
ggsci
add credentialstore
alter credentialstore add user gguser,password Cloud_4u alias ggpg

提示:这里建议每次启动ggsci的时候都在OGG_HOME中进行,否则后面配置进程启动时会遇到一些奇怪的问题。

5. OGG初始化

(1)初始化OGG目录组

cd $OGG_HOME
ggsci
create subdirs

(2)创建OGG全局参数文件GLOBALS

cd $OGG_HOME
touch GLOBALS
vi GLOBALS
# 添加一个目标模式
GGSCHEMA ggsch
:wq

全局模式ggsch就是OGG专属库中创建的那个模式,后续服务起来以后所有检查点心跳等,默认都使用它。GLOBALS 文件必须全部大写且无文件扩展名。

至此,要部署OGG服务进程的几个先决条件都配置完成了。接下来就可以进行服务进程的部署了。

OGG进程配置

同样的,在正式开始前,我们先简单了解一下有哪些进程需要配置。一个基本的OGG同步服务需要以下几个进程:

1. 管理服务进程

2. 配置数据源的提取进程

3. 配置目标库的复制进程

下面就正式开始。

1. 配置管理服务进程

cd $OGG_HOME
ggsci
edit params mgr
# 添加以下内容到配置文件
port 7809
DYNAMICPORTLIST  7810-7820
ACCESSRULE, PROG *, IPADDR *.*.*.*, ALLOW
AUTORESTART Extract *,RETRIES 10,WAITMINUTES 5, RESETMINUTES 60
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 15
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
# 保存退出
:wq

参数简要说明

DYNAMICPORTLIST 7810-7820
动态端口列表的范围从7840到7914。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。

—AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 7
当提取进程中断后尝试自动重启,每隔7分钟尝试启动一次,尝试5次。OGG运维人员通常会注释掉这条配置,更喜欢用手工重启的方式来控制。

PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 10
定期清理dirdat路径下的本地队列(local trail)。保留期限10天,过期后自动删除。从而控制队列文件的目录不会增长过大。

LAGREPORTHOURS 1
每隔一小时检查一次传输延迟情况

LAGINFOMINUTES 30
传输延时超过30分钟将写入错误日志

LAGCRITICALMINUTES 45
传输延时超过45分钟将写入警告日志

完成后可以先不启动,继续其他进程的配置。

2. 配置数据源提取进程(ggsci)

(1)首先要启用表的补充日志,这是提取进程的先决条件

DBLOGIN SOURCEDB pg_src USERIDALIAS ggpg
# 对于有主键或唯一索引的表,如果要设置成FULL日志,则必要使用ALLCOLS选项
ADD TRANDATA test_schema.* ALLCOLS
#查看补充日志级别
INFO TRANDATA test_schema.*

pg_src是dns名称;ggpg是登录凭证的名称;test_schema.*是所有指定schema下的表,也可以指定到具体的表名;

(2)注册提取进程

REGISTER EXTRACT e1

e1是提取进程的自定义名称,要求2位英文或数字字符

(3)编辑提取进程配置文件

edit params e1
## 把下列内容加入到配置文件
EXTRACT e1
SETENV(PGCLIENTENCODING = "UTF8" )
SETENV(ODBCINI="/home/postgres/ogg_postgresql/odbc.ini" )
--SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
LOGALLSUPCOLS
NOCOMPRESSUPDATES
UPDATERECORDFORMAT FULL
--TRANLOGOPTIONS MINEFROMACTIVEDG
DISCARDFILE ./dirrpt/e1.dsc, APPEND, MEGABYTES 4000
CACHEMGR CACHESIZE 1024MB, CACHEDIRECTORY ./dirtmp
REPORTCOUNT EVERY 10000 records, RATE
SOURCEDB pg_src USERIDALIAS ggpg
EXTTRAIL ./dirdat/e1
GETTRUNCATES
TABLE test_schema.*;

提示:这里要重点关注

EXTRACT:参数文件名,后面在注册和启动时也要用到这个名字,命名规则是2位的英文或数字

SETENV(ODBCINI="/home/postgres/ogg_postgres/odbc.ini" )--odbc驱动配置文件的位置

SOURCEDB pg_src USERIDALIAS ggpg--登录数据源的dns名称和登录凭证;

NOCOMPRESSUPDATES:捕获update不使用压缩方式,类似的选项还有NOCOMPRESSDELETES等

DISCARDFILE:discard文件,出错时可查看详细信息

EXTTRAIL:Trail文件路径,会生成多个Trail文件,文件名为前缀ex+文件编号

支持truncate

TABLE test_schema.* --要提取的表名,可以使用通配符*,每个表一行

上述几个都是最重要的,弄错了 就可能启动进程失败

DYNAMICRESOLUTION
有时候开启OGG进程的时候较慢,可能是因为需要同步的表太多,OGG在开启进程之前会将需要同步的表建立一个记录并且存入到磁盘中,这样就需要耗费大量的时间。使用该参数来解决此问题。

DBOPTIONS ALLOWUNUSEDCOLUMN
当抽取进程遇到一个没有使用的字段时只生成一个警告,进程会继续执行而不会被异常终止(abend)

FETCHOPTIONS NOUSESNAPSHOT
不会从闪回日志中获取数据

REPORTCOUNT EVERY 30 MINUTES, RATE
每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息

DISCARDFILE ./dirrpt/extya.dsc, APPEND, MEGABYTES 1024
将执行失败的记录保存在discard file中,该文件位于./dirrpt/extya.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。

DISCARDROLLOVER AT 3:00
为了防止discard file被写满,每天3:00做一次文件过期设定

WARNLONGTRANS 2h, CHECKINTERVAL 3m
每隔3分钟检查一下大事务,超过2小时还没结束的进行报告

更多命令可以参数官方说明:https://docs.oracle.com/goldengate/c1221/gg-winux/GWURF/summary-oracle-goldengate-commands.htm#GWURF884

(4)添加抽取进程及其关联文件

ADD EXTRACT e1, TRANLOG, BEGIN NOW
ADD EXTTRAIL ./dirdat/e1, EXTRACT e1

e1:就是参数文件中的进程名字

(5)启动服务

start mgr
start e1

<extname>:参数文件中的名字

(6)验证

info all

这时候如果配置都没有问题,应该能看到两个进程,且状态都是running。参考如下显示

Program     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING
EXTRACT     RUNNING     E1          00:00:00      00:00:08  

介绍几个GGSCI的基本操作命令

GGSCI是OGG经典版的交互工具,它是一个命令行工具,了解几个常用的操作命令

(1)# 启动GGSCI

ggsci

如果命令找不到,请检查环境变量LD_LIBRARY_PATH,OGG_HOME,PATH

(2)连接到数据源

DBLOGIN SOURCEDB dsn USERIDALIAS alias

dsn:DNS名称

alias:登录凭证别名

配置进程参数文件,添加心跳检查等操作时,必须先用此命令登录到指定数据源

(3)编辑配置参数文件

EDIT PARAMS extname

extname:数据提取的名称(不超过8个字符)

参数文件命名规则遵照ogg的规范

(4)添加 Extract 及其关联的跟踪文件

ADD EXTRACT extname, TRANLOG, BEGIN NOW
ADD EXTTRAIL ./dirdat/ep, EXTRACT extname

删除Extract

DELETE EXTRACT extname
unregister extract extname, database

删除跟踪文件

DELETE EXTTRAIL ./dirdat/ep
rm ./dirdat/ep*

extname:数据提取的名称(不超过8个字符)

./dirdat/ep:提取写入捕获数据的两个字符的本地路径

(5)启动进程

start extname

关闭进程

stop extname

extname:是进程的名称,可以是管理服务进程名、数据抽取名称或数据复制名称

(6)查看进程状态

# 查看所有进程
info all
# 查看指定进程
info e1
# 查看指定进程运行日志报告
view report e1

(7)添加检查点表

ADD CHECKPOINTTABLE <ggschema>.<chktablename>

删除检查点表

delete checkpointtable <ggschema>.<chktablename>

ggschema:是ogg专属库中的专属schema名称

chktablename:是检查点表的名称

(8)添加心跳

ADD HEARTBEATTABLE

故障笔记

【1】 启动ggsci报错:ggsci: error while loading shared libraries: libGGicu25.so:...

解决方法:这是多数是环境变量没有配置正确,检查LD_LIBRARY_PATH的配置是否包含ogg主目录和lib

【OGG】经典架构在postgresql-14上的安装部署-1相关推荐

  1. Redis在CentOS 7上的安装部署

    http://www.linuxidc.com/Linux/2017-05/143312.htm   不能更赞了 简介: Redis是一种高级key-value数据库.它跟memcached类似,不过 ...

  2. #gStore-weekly | Centos7系统下gStore在 docker上的安装部署

    本人在使用gStore时想在docker环境中安装部署,但是官网的开发文档中关于docker安装部署指导很少,因此本人就根据自己的安装经验编写一篇关于gStore在docker上的安装部署博文. 本人 ...

  3. ARM架构服务器centos7.4上yum安装k8s教程

    1.环境说明 [root@k8s-master ~]# uname -a Linux slave1 4.11.0-22.el7a.aarch64 #1 SMP Sun Sep 3 13:39:10 C ...

  4. DotAsterisk(点星PBX)呼叫中心系统在阿里云ECS服务器上的安装部署

    最近有一项语音呼叫的业务需要将DotAsterisk(点星PBX)部署到阿里云ECS云主机上,正好这段时间发现阿里云做活动,ECS机器购买优惠力度很大,新用户只需要699元就可以购买一台2CPU 4G ...

  5. 14.Flink1.11 安装部署及Release 文档解读

    Flink1.11 安装部署及Release 文档解读 1. [Flink 1.11 Release 文档解读](https://ci.apache.org/projects/flink/flink- ...

  6. Flink1.14多种模式安装部署

    Flink支持多种安装模式 - Local-本地单机模式,学习测试时使用 - Standalone-独立集群模式,Flink自带集群,开发测试环境使用 - StandaloneHA-独立集群高可用模式 ...

  7. zookeeper-3.4.14集群安装部署

    一.服务版本说明 服务 版本号 备注 zookeeper zookeeper-3.4.14 jdk jdk-8u231 二.部署环境 系统环境 主机名 IP centos7.6 yhcs_1 192. ...

  8. ElasticSearch elasticsearch-servicewrapper 在linux上的安装部署全程记录

    原文地址:http://www.cnblogs.com/tianjixiaoying/p/4316011.html 由于项目需求,需要在linux平台搭建一套ES服务.在搭建过程中,遇到各种各样的问题 ...

  9. 纯手动搭建大数据集群架构_记录011_搭建Nifi_安装部署_搭建集群---大数据之Hadoop3.x工作笔记0172

    可以看到左侧,把nifi安装包先上传到服务器,然后,去解压,一样放到opt/software目录,然后解压到/opt/module目录 然后去修改这个配置文件nifi.properties,然后 然后 ...

最新文章

  1. ORB特征提取算法分析与实现,算法分解
  2. tornado数据库迁移
  3. OHCI,UHCI,EOHCI,XHCI
  4. 9款超绚丽的HTML5/CSS3应用和动画特效
  5. 鼠标点击测试_鼠标键盘如何检测故障,这边教您简单的测试
  6. 微抖动,繁忙的等待和绑定CPU
  7. Android加密通信防抓包,[原创]基于Taintdroid思想的android ssl\tsl保密通信抓包研究(未成功,分享一下思路)...
  8. 通过命令行新建qt项目,并编译打包
  9. 给大家介绍一个日期输入控件javascript实现,我修改了下,符合我的习惯了,^_^!...
  10. jwt token and shiro
  11. 在苹果Mac中巧用聚焦搜索Spotlight
  12. Atitit word ppt excel convert txt bp 等文档转换纯文本问题最佳实践.docx Atitit word ppt excel等文档转换txt问题最佳实践 目录 1.
  13. 跳石头 vijos1981 NOIP2015 D2T1 二分答案 模拟 贪心
  14. 一寸照纯红色底图片_红底证件照换成蓝色背景,边缘怎样处理,才能让照片更自然呢?...
  15. 数据分析~中国五大城市PM2.5数据分析02
  16. 海信75E5K怎么样 海信75E5K和75E5H区别 哪个好
  17. ActiveMQ系列—ActiveMQ中的Queue和Topics
  18. ffmpeg使用记录--解决了压制的视频在安卓不播放的问题
  19. Invalid bound statement (not found)错误的原因和解决办法
  20. 苹果IOS开发常用的第三方库总结

热门文章

  1. 注册dll时返回0x80004005的解决方法
  2. 北斗三号频点_北斗三代B2a频点软件接收机的设计
  3. Java - 处理unsigned类型
  4. Python里的阻塞队列
  5. 服务器型号hstns,HSTNS-PL14 HSTNS-PR17 DL360G7 DL380G6 HP服务器电源
  6. 回顾“低代码”历史发展,是技术进步了还是倒退了?
  7. 63页智慧工业园区大数据云平台建设和运营解决方案
  8. 那些不得不说的性能优化套路
  9. (考研湖科大教书匠计算机网络)第一章概述-第二节:三种交换方式(电路交换、报文交换和分组交换)
  10. AFL++ (PlusPlus) 介绍与实践