1 场景
- 中台的各个中心划分较细,主数据在用户、渠道、会员、商品这些中心,业务流程数据在支付、交易、库存、结算等中心,跨中心进行数据查询频繁使用feign调用的方式太过笨重。
2 方案
- 搭建一个数据中心,通过pgsql-11提供的逻辑复制功能,实现各个业务中心的表数据实时同步到数据中心,再由数据中心多表联查提供对外的服务能力,也常用于读写分离,高可用的场景。
- 本文基于开发环境进行演示记录,生产环境RDS类似。
- 官方文档:https://www.postgresql.org/docs/devel/logical-replication.html
3 两台pgsql的搭建和基本配置
-
使用docker-compose部署业务和数据两个数据库
-
在/home下新建pgsql-item/,pgsql-data/两个文件夹,两个docker-compose.yml文件如下:
version: "3" services: postgres: image: postgres:11-alpine container_name: pgsql-item environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: 123456 MAX_CONNECTIONS: 2000 TZ: Asia/Shanghai volumes: - ./data:/var/lib/postgresql/data ports: - "15432:5432"
version: "3" services: postgres: image: postgres:11-alpine container_name: pgsql-data environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: 123456 MAX_CONNECTIONS: 2000 TZ: Asia/Shanghai volumes: - ./data:/var/lib/postgresql/data ports: - "15433:5432"
可以使用数据卷挂在data文件夹,这里挂到当前目录下为了方便修改配置文件
-
发布端配置
vim /home/pgsql-item/data/postgresql.conf
wal_level = logical #开启逻辑复制模式 max_replication_slots = 20 #该配置项表示发布端最多可以发布多个Publication max_wal_senders =40 #一般设置为max_replication_slots的2倍
-
订阅端配置
vim /home/pgsql-data/data/postgresql.conf
wal_level = logical #开启逻辑复制模式 max_replication_slots=20 #订阅端也需要配置该配置项,不能小于需要订阅的数量 max_logical_replication_workers=20 #订阅端可以配置多个订阅 max_worker_processes=22 #最少为max_logical_replication_workers+1。
-
重启两台pgsql
docker restart pgsql-item pgsql-data
4 数据库订阅同步
-
pgsql-item创建一个数据库channel-center,3张表cc_store,cc_store_sku,cc_area
-
pgsql-data创建一个数据库data-center,使用navicat数据传输工具同步2张表结构cc_store,cc_store_sku
发布节点和订阅节点表的模式名、表名必须一致。
-
发布端
-- 创建发布 create publication channel_center_pub for table cc_store,cc_store_sku; -- 发布端常用命令 select * from pg_publication ; #查看发布者列表 select * from pg_stat_replication; #查看逻辑复制的状态 select * from pg_publication_tables; #查看发布者发布了哪些数据表
-
订阅端
-- 创建订阅 create subscription channel_center_sub connection 'host=192.168.31.167 port=15432 user=postgres password=devops dbname=channel_center' publication channel_center_pub; -- 订阅端常用命令 select * from pg_subscription; #查看订阅者列表 select * from pg_stat_subscription; #查看订阅者状态
-
验证下,在业务中心表的增删改,金融级响应速度同步到数据中心对应的表
5 一些场景操作
-
业务中心表结构发生变更,字段新增、字段删除、建立索引等操作,会使订阅失效
处理方法:使用navicat结构同步工具,同步表更的表到数据中心,保持两端表结构一致,订阅即可恢复正常。
-
一个发布修改发布的数据表,例如channel_center_pub的发布中2张表变更为3张表
发布端修改发布:alter publication channel_center_pub set table cc_store,cc_store_sku,cc_area;
订阅端刷新订阅:alter subscription channel_center_sub refresh publication;
网友评论