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

环境

操作系统: 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 Chkpt

MANAGER     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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值