POSTGRESQL 高可用 Patroni VS Repmgr 到底哪家强(2) 更详细的指标

本文对比分析了Patroni与Repmgr这两款PostgreSQL高可用软件的特性与优劣,包括它们在网络抖动、服务重启及故障切换方面的表现。Patroni在服务重启和网络稳定性方面表现更佳,而Repmgr则提供了更简便的主从配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接上期,上期大致比对了一下基本的指标,本期就的详细的比对一下两个高可用软件的信息的功能了。

c31e374e992cac87d61be06f9dcfb4ce.png

以上信息展开来看

序号详细指标指标对象
1清理postgresql 进程,系统可被拉起使系统正常针对高可用 standby对象
2手动停止postgres 进程,系统被拉起进行工作针对高可用 standby对象
3重新启动postgresql, 自动拉起postgresql服务针对高可用 standby对象
4关闭patroni 服务 或 关闭 rpemgrd 服务针对高可用 standby对象
5清理postgresql 进程,系统可被拉起使系统正常针对高可用 master对象
6手动停止postgres进程针对高可用 master对象
7重新启动服务器针对高可用 master对象
8停止patroni  进程 或 停止repmgr 进程针对高可用进程

以上的8个点分别针对两种高可用方式中的 主节点 和 从节点 以及高可用服务本身。

PatroniRepmgr
可以功能不满足
可以功能不满足
默认重启服务器也强制拉起数据库不会强制拉起postgresql 数据库服务
相关命令失效,数据库服务不在被监管基本服务政策,故障切换功能停止
直接拉起服务,写入会有停顿启动提升从库的策略,从库升为主库,切换中有写入停顿
直接拉起服务,写入会有停顿启动提升从库的策略,从库升为主库,切换中有写入停顿
主从节点开始切换,重启服务器变为从节点加入到原集群主从节点开始切换,重启服务器变为从节点加入到原集群
产生双主,产生新主,旧主同时工作主不能被切换

从以上几点来分析, Patroni 明显在数据库服务停止时,及时的拉起postgres的数据库服务, 这点对比repmgr 明显是有优势的。对于一些由于服务进程本身停止或退出的情况可以立即的进行补救,避免切换的动作。而反观repmgr 本身基于监控postgres主进程的状态,如果进程停止,必然会触发切换的动作。 

另从主节点切换后,都提供基于PG_REWIND基础的,节点回归方式,这点是二者相同的。

但Patroni 有一个问题,就是在patroni 服务本身失效的情况下,有可能会产生双主的问题,而更糟糕的是在patroni 在旧主节点再次生效下,一些在双主时期写入旧主的数据会通过pg_rewind 被抹除掉,造成数据丢失。这点是一个硬伤,所以在使用patroni的时候,必须对patroni 服务本身进行严格的监控,同时必须配置一个靠谱的 VIP 服务及时切换,让应用写入新主。这个问题就基本上避免了。

从网络的角度,9和10两点针对网络的抖动和不稳定对于数据库高可用本身也是一种挑战,假设主节点和从节点网络突发出现问题,patroni 和  repmgr 两者本身对网络问题是如何进行应对的。

从最上面的图看,patroni 在面对网络的抖动的方面要强于 repmgr, 这主要也是基于二者的高可用架构的不同,patroni 本身是建立在raft 协议,或者paxos 协议上的一个模板,(具体是raft 还是 paxos 看你使用的分布式存储系统),这就奠定了patroni本身具备网络故障时进行问题粗粒的优势, 反观repmgr 本身是基于类似双机热备,模式,让他对网络的抖动进行快速的处理这在设计中就是劣势,加入monitor wintness 节点后会提高repmgr抵御网络问题的能力。

从第一期到本期,最终我们总结一下二者的优缺点

REPMGR 优点

Regmgr 提供了一套可以直接进行主从配置的程序,在部署repmgr本身就可以制作一套主从复制的节点,并且添加节点也比较容易。

本身安装简单,不使用任何额外的网络端口,通过SSH 本身进行相关的高可用工作支持。

提供用户注册的方式对集群中的节点进行前期的设置,可以方便的设置针对切换的敏感程度。

Patroni 优点

Patroni 启用的是一个端到端的服务支持REST APIS 对于二次开发是友好的,基于DSC 的概念,是一款具有分布式理念的高可用软件。针对网络问题可以较好的处理高可用切换。

REPMGR 问题:

REPMGR 针对postgresql的配置本身不会检测 standby 从库的问题,如果在切换过程中,发现主从库的配置不一,导致切换后出现问题,这需要DBA 本身对工作的细致以及责任。

本身基于服务本身状态提供和发现,不基于分布式协议。

切换后的注册信息,需要手工去处理。

Patroni 问题:

Patroni 本身是不会检测复制连接的状态,当主从的复制不工作的情况下,此节点还是会被展示成一个从库, 同时patroni的安装一直是一个比较复杂的问题,需要选择一款 DCS软件并且对此软件的工作原理和操作有比较深的使用知识。需要设置多个端口来提供相关的服务,并且如果遇到服务器出现性能超负荷的情况下,分布式软件的部署的位置有可能会影响本身Patroni 判断和工作的状态。

总结:两款产品都有自己的特点和优势,也都有自己的问题点,熟悉自己工作环境中的问题点(如主机稳定不高或网络不稳定),针对高可用中的某些服务建立有效监控,调整参数,甚至进行二次开发,降低高可用配置的难度与结构的复杂性,选择好基于postgresql 的一款好用的高可用软件。

3dbcf246d03d56e0d2b975e619b0e8eb.png

<think>好的,我现在要回答用户关于如何使用repmgr部署PostgreSQL高可用集群的问题。首先,我需要回顾用户提供的引用内容,确保回答准确。 根据引用[2],部署过程分为准备工作和主库配置。用户需要先在所有节点安装repmgrPostgreSQL。主库需要修改postgresql.conf,调整max_wal_senders、wal_level等参数。这部分是关键,因为正确的配置是复制的基础。然后创建复制用户和数据库,注册主节点。接下来是备库的安装和配置,同样需要修改配置文件,并从主库克隆数据。注册备库后,集群就初步搭建完成了。 用户提到的引用[3]指出,虽然主从搭建完成,但还存在自动故障转移和节点管理的问题。这里需要补充repmgr的故障检测和切换机制,比如设置repmgrd守护进程,并配置参数如failover=automatic。同时,可能需要结合外部工具如SLB来处理入口分离,而不是使用pgpool,这点需要调。 接下来,用户可能需要知道如何验证集群状态,使用repmgr cluster show命令。此外,监控和日志管理也是重要环节,确保及时发现和处理问题。 生成相关问题时,要考虑用户可能的后续需求,比如如何扩展节点、如何处理网络分区或数据不一致的情况,以及与其他高可用方案的对比。例如,引用[1]提到RepmgrPatroni对比,可以引导用户进一步了解不同工具的优缺点。 需要确保回答结构清晰,分步骤讲解,并引用正确的来源。同时,注意使用中文,数学公式和代码块的格式正确。最后,检查是否有遗漏的步骤或常见问题,确保用户能够顺利部署并理解后续管理方法。</think>### 使用repmgr部署PostgreSQL高可用集群的步骤 以下流程基于引用内容整理,涵盖主从节点配置、故障转移及注意事项。 #### 1. 准备工作 - **所有节点**安装PostgreSQLrepmgr ```bash # 以CentOS为例 yum install postgresql-server repmgr ``` - 确保所有节点网络互通,SSH免密登录配置完成[^2]。 #### 2. 主库配置 **2.1 修改`postgresql.conf`** ```bash max_wal_senders = 10 max_replication_slots = 10 wal_level = 'hot_standby' hot_standby = on archive_mode = on archive_command = '/bin/true' # 禁用归档(repmgr无需归档) ``` **2.2 创建复制用户与数据库** ```sql CREATE USER repmgr WITH SUPERUSER LOGIN; CREATE DATABASE repmgr OWNER repmgr; ``` **2.3 注册主节点** ```bash repmgr primary register # 注册当前节点为主库 ``` #### 3. 备库配置 **3.1 同步主库数据** ```bash repmgr -h <主库IP> -U repmgr -d repmgr standby clone ``` **3.2 启动并注册备库** ```bash pg_ctl start repmgr standby register # 注册为备库 ``` #### 4. 验证集群状态 ```bash repmgr cluster show # 显示节点角色与状态 ``` 输出示例: ``` ID | Name | Role | Status | Upstream ---+--------+---------+-----------+--------- 1 | node1 | primary | * running | 2 | node2 | standby | running | node1 ``` #### 5. 实现自动故障转移 **5.1 启动守护进程`repmgrd`** ```bash repmgrd -d --verbose # 所有节点启动监控守护进程 ``` **5.2 配置`repmgr.conf`** ```ini failover=automatic # 启用自动切换 promote_command='repmgr standby promote' follow_command='repmgr standby follow' ``` #### 6. 注意事项 - **入口分离**:建议结合云服务商SLB(如AWS ALB或阿里云SLB)实现流量分发,避免使用pgpool增加复杂度[^3]。 - **节点扩容**:新节点需重复步骤3,并通过`repmgr node join`加入集群。 - **监控告警**:配置`repmgr`日志与Prometheus监控,实时检测节点健康状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值