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

配置调整之后需要重新启动主数据库实例。
然后在主数据库对我们需要配置的数据库执行逻辑发布
CREATE PUBLICATION p FOR ALL TABLES WITH (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);
其中 p 为这个发布设置的名称,也可以自定义为其它。

然后在从数据库实例上选择我们要用来订阅主实例的数据库,然后执行创建逻辑订阅
CREATE SUBSCRIPTION s
CONNECTION 'host=127.0.0.1 port=5432 user=postgres dbname=xxxxx connect_timeout=10 password=xxxxxx'
PUBLICATION p
WITH (connect = true, enabled = true, copy_data = 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' 为主库的连接信息

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

下面介绍如果想要删除发布设置和订阅设置的操作
在主库执行
SELECT * FROM pg_publication 可以查询当前主库的所有发布信息

DROP PUBLICATION p 删除名字为 p 的发布信息
在从库执行:
SELECT * FROM pg_subscription 可以查询当前从库的所有订阅信息

DROP SUBSCRIPTION s 删除名字为 s 的订阅信息
至此 Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务 就讲解完了,有任何不明白的,可以在文章下面评论或者私信我,欢迎大家积极的讨论交流,有兴趣的朋友可以关注我目前在维护的一个 .NET 基础框架项目,项目地址如下
https://github.com/berkerdong/NetEngine.git
https://gitee.com/berkerdong/NetEngine.git
Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务的更多相关文章
- Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务
PostgreSQL 高可用数据库的常见搭建方式主要有两种,逻辑复制和物理复制,上周已经写过了关于在Windows环境搭建PostgreSQL逻辑复制的教程,这周来记录一下 物理复制的搭建方法. 首先 ...
- mysql复制(高可用架构方案的基础)
mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以 ...
- PostgreSQL 流复制+高可用
QA PgPool-II 同步 Postgresql X1 服务器准备 192.168.59.121 PostgreSQL10 192.168.59.120 PGPool-II 3.7 X2 安装Po ...
- 004.Heartbeat+HAProxy+MySQL半复制高可用架构
一 基础环境 节点 系统版本 MySQL版本 业务IP 心跳IP Master CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100 Slave Cen ...
- Heartbeat+HAProxy+MySQL半复制高可用架构
目录 一 基础环境 二 架构设计 三 安装MySQL 3.1 安装MySQL 3.2 初始化MySQL 四 配置MySQL半同步 4.1 加载插件 4.2 配置半同步复制 4.3 master创建账号 ...
- 搭建Hadoop的HA高可用架构(超详细步骤+已验证)
一.集群的规划 Zookeeper集群: 192.168.182.12 (bigdata12)192.168.182.13 (bigdata13)192.168.182.14 (bigdata14) ...
- 美团点评基于MGR的CMDB高可用架构搭建之路【转】
王志朋 美团点评DBA 曾在京东金融担任DBA,目前就职于美团点评,主要负责金融业务线数据库及基础组件数据库的运维. MySQL Group Replication(以下简称MGR),于5.7.17版 ...
- MySQL高可用架构-MMM环境部署记录
MMM介绍MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管理 ...
- MySQL高可用架构-MHA环境部署记录
一.MHA介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司) ...
随机推荐
- 部署 Vite 静态网站到 Gitee Pages
开启仓库的 Gitee Pages 服务,部署目录 dist/: Vite 构建 build,输出到 dist 文件:取消 .gitignore 中的 dist: Vite preview 查看静态网 ...
- Unhandled Exception: MissingPluginException(No implementation found for method launch on channel)
在添加依赖包时,可能会出现Unhandled Exception: MissingPluginException(No implementation found for method launch o ...
- CF1450E 资本主义Capitalism(差分约束)
题面 点此看题 没有永远的朋友,只有永远的利益 在这个黑漆漆的社会上,有 n n n 个布衣百姓,他们在利益驱使下成为金钱的奴隶,看不到属于生活的阳光.在茫茫奔途中,他们相互扶持,结交了有 m m m ...
- C#实现HTTP访问类HttpHelper
在项目开发过程中,我们经常会访问第三方接口,如我们需要接入的第三方接口是Web API,这时候我们就需要使用HttpHelper调用远程接口了.示例中的HttpHelper类使用Log4Net记录了每 ...
- 大促活动如何抵御大流量 DDoS 攻击?
每一次活动大促带来的迅猛流量,对技术人而言都是一次严峻考验.如果在活动期间遭受黑产恶意DDoS攻击,无疑是雪上加霜.电商的特性是业务常态下通常不会遭受大流量DDoS攻击,且对延迟敏感,因此只需要在活动 ...
- KingbaseES R6 通过脚本构建集群案例
案例说明: KingbaseES V8R6部署一般可采用图形化方式快速部署,但在生产一线,有的服务器系统未启用图形化环境,所以对于KingbaseES V8R6的集群需采用手工字符界面方式部署,本 ...
- P8539 「Wdoi-2」来自地上的支援 题解
思路 根据题意,如果每次询问选中的为第 \(x\) 个数,那么前 \(x-1\) 次操作一定不会选中第 \(x\) 个数.(感觉在说废话.) 同样,因为第 \(x\) 个数必须被选中 \(k\) 次, ...
- 基于 iframe 的微前端框架 —— 擎天
vivo 互联网前端团队- Jiang Zuohan 一.背景 VAPD是一款专为团队协作办公场景设计的项目管理工具,实践敏捷开发与持续交付,以「项目」为核心,融合需求.任务.缺陷等应用,使用敏捷迭代 ...
- 【Java面试】这应该是面试官最想听到的回答,Mysql如何解决幻读问题?
"Mysql如何解决幻读问题" 一个工作了4年小伙伴,去一个美团面试,遇到了这样一个问题. 大家好,我是Mic,一个工作了14年的Java程序员 关于这个问题,面试官想考察什么?我 ...
- Windows服务器无法配置IP
前天在给一台服务器配置IP地址的时候发现一个奇怪的问题.IP地址配置之后不生效,还是使用的169.254这个微软保留自动分配地址.由于这个是一台虚拟机,尝试了删除添加网卡也没有用.配置IP不成功的时候 ...