介绍本篇前,先抛出一个问题。对于搭建混合云数据平台,通常需要首先解决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)。
前置准备:开始前请在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://ken.io/note/centos7-postgresql12-install-and-configuration
https://github.com/2ndQuadrant/pglogical