Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务

本文主要介绍 Windows 环境下搭建 PostgreSQL 的主从逻辑复制,关于 PostgreSQl 的相关运维文章,网络上大多都是 Linux 环境下的操作,鲜有在 Windows 环境下配置的教程,所以本文采用 Windows 环境作为演示系统来进行 PostgreSQL 高可用数据库服务的搭建 。
关于 Windows 系统 PostgreSQL 的安装方法可以直接看之前的博客 https://www.cnblogs.com/berkerdong/p/16645493.html
在Windows 环境运行 PostgreSQL 在连接数的配置方便需要注意以下这个知识点:

由于PostgreSQL所依赖的一些库依赖于user32.dll,后者从内存中一块称为桌面堆(Desktop Heap)的区域中分配内存 。桌面堆被分配给了每一个登录的会话,在 Windows 10 以上的操作系统通常一个非交互的会话将会分配给768KB 。每个交互登录会话将会分配给20MB的桌面堆,每个postgres进程典型的桌面堆消耗是3.2KB 。
  • 当作为Windows服务运行时,因为每个非交互会话将会分配768KBMB的桌面堆,所以大约可以支撑 200-220个连接 。
  • 当在命令行方式运行时,因为每个交互登录会话将会分配20MB的桌面堆,所以大约可以支撑 5000-6000个连接 。
以上说的值是操作系统默认的值,这个堆分配大小可以通过调整注册表来进行修改,但是此操作需要非常小心,一旦指定的值过大,系统将无法启动,所以不推荐去手动修改这个值 。如果想要了解更多这个知识点可以看 微软官方的这个说明:https://learn.microsoft.com/zh-CN/troubleshoot/windows/win32/user32-kernel32-not-initialize
结合上面的知识点,所以我们在Windows环境下配置 PostgreSQL 的最大连接数时,如果采用 Windows 服务模式运行则配置最大连接数为200比较好,如果需要200个以上的并发连接,则最好采用控制台形式启动运行PostgreSQL,同时结合计算机的可以内存去综合考虑一般100个连接数会消耗 1G内存,所以假设我们电脑内存为8G,考虑到系统本身运行需要2G内存,所以这是 PostgreSQL 的最大连接数配置为500 左右即可 。
PostgreSQL控制台运行,启动和停止命令如下:
启动 pg_ctl.exe -D "D:\Software\PostgreSQL\data" start停止 pg_ctl.exe -D "D:\Software\PostgreSQL\data" stop
-D 的参数 "D:\Software\PostgreSQL\data" 是 PostgreSQL 的数据实例位置
今天我们采用逻辑同步复制来实现主从数据库的配置,首选在主数据库上调整 postgresql.conf 配置文件启用逻辑复制功能wal_level = logical
Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务

文章插图
配置调整之后需要重新启动主数据库实例 。
然后在主数据库对我们需要配置的数据库执行逻辑发布CREATE PUBLICATION p FOR ALL TABLES WITH (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);其中 p为这个发布设置的名称,也可以自定义为其它 。
Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务

文章插图
然后在从数据库实例上选择我们要用来订阅主实例的数据库,然后执行创建逻辑订阅
CREATE SUBSCRIPTION sCONNECTION 'host=127.0.0.1 port=5432 user=postgres dbname=xxxxx connect_timeout=10 password=xxxxxx'PUBLICATION pWITH (connect = true, enabled = true, copy_data = https://www.huyubaike.com/biancheng/true, create_slot = true, synchronous_commit ='remote_apply');其中 s 为这个订阅设置的名称 'host=127.0.0.1 port=5432 user=postgres dbname=xxxxx connect_timeout=10 password=xxxxxx' 为主库的连接信息
Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务

文章插图
这样我们就完成本地 localhost 的 PostgreSQL 实例中 csapp 数据库和 远程服务器上 caspp 数据库的主从配置 。
这里要注意的一点是 PostgreSQL 的 逻辑订阅并不会同步DDL操作 ,所以对于数据库的建表等操作是不会进行主从同步的,我们需要手动维护 主从实例数据库上的表结构使其保持一致 。当在主和从数据库都创建完成表之后需要在从库上执行以下刷新订阅的 SQL,每次主库新增或者删除了表,从库都需要执行这个操作 。

经验总结扩展阅读