一些数据根据业务拆分成一部分P1表、一部分P2表或者多个,A库操作P1表,B库操作P2表
现需要可以查询整个P表,即需要一个p表的汇总库 数据需求,所以通过逻辑复制来实现。
PostgreSQL 安装环境可见之前的搭建环境教程
分别在3台服务器 pg_hba.conf 配置文件新增
允许在 10.10.56.0 同一网段的服务器所有用户 进行复制、连接等操作
分别在 16、17、19 服务器启动服务,连接数据库执行sql,检查单个数据库是否为单实例主库
如上查询是否为备库 ,f 为表示false,即为主库,反之 t 为从库
分别在 16、17、19 单实例数据上创建数据库、用户、分配权限
在 16、17 服务器上分别创建 p 表(即表示各自业务的表),并给逻辑复制的用户 l_repl 分配权限。
在 16、17 服务器上分别创建发布者,即把自己的 p 表发布出去,使 订阅者 可以订阅
在19上创建订阅者,即分别订阅 16、17 服务器各自发布的表
16 服务器插入奇数id 数据
17 服务器插入偶数id数据
注 意
在16和17服务器插入数据时,必须主键不能冲突,否则会出错,在实际业务中,插入的数据主键永远不会冲突
此处我们在16服务器插入主键为 奇数 的数据,17为 偶数 的数据
此时19服务器查看P表汇总的数据
发现数据已经复制过来,达到我们需要的需求
创建R表背 景
在实际业务需求中,我们可能会有一些数据字典之类的公共表,即现有A、B、C 独立的数据库,但是他们都需要共同的字典表 R 表,且R表的入口只能有一个,比如只能在A库进行写入,其他库则需要同步该表,故通过逻辑复制来实现。
逻辑复制不支持 TRUNCATE 级联删除表数据
R 表的逻辑复制在16、17、19 分别创建 R表
配置文件上述已经配置,同上,16 发布 R 表,17 与 19 分别 订阅16服务器的R表,即可实现上述业务。
补充:PostgreSQL逻辑复制压测方案
逻辑复制延迟压测本次压力测试过程基于以上
56.16 –> 56.19 监控延迟脚本
创建脚本 query_logical_lag.sh,并分配权限
56.17 –> 56.19 延迟监测脚本
创建脚本 query_logical_lag2.sh
分配权限,不然无法执行脚本
执行监控延迟在16服务器执行:
表示:执行query_logical_lag.sh脚本 100000次,每执行一次等待5s,把查询结果记录到
query_logical_lag1文件
在17服务器执行
创建sequence,使用sequence保证不同节点插入的数值是奇数或偶数
56.16
56.17 服务器创建序列
16、17 服务器分别创建压测脚本 bench_script_for_insert.sql
16、17分别执行 pgbench 压测命令
nmon监控cpu、内存、网络
注:
-f 将结果存储在当前目录的文件中,以nmon结尾,自动生成
-c 总共统计120次
-s 每隔10s统计一次
以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。如有错误或未考虑完全的地方,望不吝赐教。