技术分享丨IDC自建Postgres数据库同步方案

2023-05-17 11:00


介绍本篇前,先抛出一个问题。对于搭建混合云数据平台,通常需要首先解决IDC数据库到云上数据库的数据同步问题。本篇通过实战的方式介绍IDC Postgres 数据库到云上数据库的数据CDC同步方案的实现。


AWS Database Migration Service

以下简称-AWS DMS

AWS DMS是一项托管迁移和复制服务,基于这项服务可帮助您将数据库和分析工作负载快速、安全地迁移到亚马逊云平台,并尽可能减少停机时间和杜绝数据丢失。

AWS DMS 支持 20 多个数据库和分析引擎之间的迁移,例如Oracle到Amazon Aurora MySQL兼容版、MySQL到Amazon Relational Database (RDS)for MySQL、Microsoft SQL Server到Amazon Aurora PostgreSQL兼容版、MongoDB到Amazon DocumentDB(与 MongoDB兼容)、Oracle到Amazon Redshift以及Amazon Simple Storage Service (S3)。




方案架构说明:

会模拟本地数据中心通过自建IDCpostgres 数据库通过DMS服务CDC拉取本地数据中的数据到AWS RDS Postgres数据库,实现同构的数据同步。


前置准备:开始前请在AWS RDS 服务中自建一台Postgres实例作为数据同步的目标实例。





01

搭建自建Postgres数据库


请在IDC环境中部署一台centos 7.8虚拟机,机器配置可按需设置,如测试环境可设置为低配。例如2c 1G 10G磁盘即可。


网络要求:

centos 7.8虚拟机需能连接公网,因需要下载相关数据库镜像及依赖插件。

虚拟主机需要网络与亚马逊环境的RDS目标实例所在的网络联通。未来和根据需要调整为VPN或专线网络联通云上云下环境。


登录本地虚拟主机。


导入postgres官方 yum源sudo yum install -y

https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装PostgreSQL服务

sudo yum install -y postgresql12 postgresql12-server

初始化数据库

sudo/usr/pgsql-12/bin/postgresql-12-setup initdb


修改postgres账号密码

su postgres

psql

ALTER USER postgres WITH PASSWORD '11111111';


安装防火墙

sudo yum install firewalld -y

sudo systemctl start firewalld

sudo systemctl enable firewalld

sudo systemctl status firewalld


配置远程访问

sudo firewall-cmd --add-port=5432/tcp --permanent

sudo firewall-cmd --reload


重启数据库,确认数据库服务端口服务正常

sudo systemctl start postgresql-12


修改配置文件,允许IP访问

vi /var/lib/pgsql/12/data/pg_hba.conf

#在问价尾部加入

host   all   all 0.0.0.0/0 md5


修改IP绑定

vi /var/lib/pgsql/12/data/postgresql.conf

将监听地址修改为*

#默认listen_addresses配置是注释掉的,所以可以直接在配置文件开头加入该行

listen_addresses=':*'


设置 wal_level = logical。


将 max_replication_slots 设置为一个大于 1 的值。

将 max_wal_senders 设置为一个大于 1 的值。

wal_sender_timeout=60


shared_preload_libraries= 'pglogical'.


重启PostgreSQL服务

sudo systemctl restart postgresql-12


这里报错因为未安装插件。


安装pglogical插件

(https://github.com/2ndQuadrant/pglogical)

这里安装对应版本的插件,其他对应版本的数据库插件到链接查找。

yum install postgresql12-server postgresql12-contrib -y

curl https://techsupport.enterprisedb.com/api/repository/dl/default/release/12/rpm | bash


安装对应版本的pglogical插件

yum install postgresql12-pglogical -y

重启数据库

sudo systemctl restart postgresql-12

进入数据创建pglogical插件

su postgres

psql


创建pglogical.

create extension pglogical;


注意:目前数据同步因为需要用到pglogical插件,而使用此插件目前需要Superuser权限,因此执行同步任务时数据库请用管理员用户,后续待pglogical插件官方优化后,再进行权限优化。

https://github.com/2ndQuadrant/pglogical




02

准备测试数据

创建测试数据库 mydb

#创建数据库

CREATE DATABASE mydb;

#查看所有数据库

\l


#切换当前数据库

\c mydb


#创建表

CREATE TABLE test(id int,body varchar(100));

#查看当前数据库下所有表

\d


插入一行测试记录

INSERT INTO test VALUES (002,'test');

SELECT * FROM test;

至此本地库已经部署完毕。




03

DMS数据同步服务测试

进入亚马逊控制台DMS服务,创建复制任务实例。

进入亚马逊控制台DMS服务,对源库和目标库分别创建数据同步终端节点,测试连接性。

先创建源终端节点。

左右滑动查看


服务器名填写本地服务器IP,数据库名为本地要同步的数据库名,点击创建终端节点。


完成后测试与复制实例的连通性。


创建目标终端节点。

左右滑动查看


这里确认目标库和源库的复制任务终端节点创建完成且连接畅通。


1.创建复制任务。

2.选择先前创建的复制实例。

3.选择对应的源节点和目标节点。

4.配置需要同步的数据库信息


这里架构名称填mydb库中的schema “public”。

表名填“test”。


创建任务,等待任务启动。



可以看到已经同步数据。

进入源和目标数据库中检查数据同步情况。

左右滑动查看


确认数据一致。

及时插入数据,验证数据的即时同步功能。


进入目标数据库刷新表确认增量数据。

数据即时同步成功。


参考资料

https://docs.amazonaws.cn/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Prerequisites

https://ken.io/note/centos7-postgresql12-install-and-configuration

https://github.com/2ndQuadrant/pglogical




云与应用现代化
——
扫描关注微信公众号
获取更多云端资讯
联系我们
——

模板表单-2(1)

  • 姓名*

  • 电话*

  • 邮箱*

  • 公司*

  • 职称*

  • 地址*

  • 需求*