repmgr: 概述

四月 16, 2024

摘要:本章简要概述了 repmgr 的组件和功能。

概念

本指南假定您熟悉 PostgreSQL 管理和流复制的概念。有关流复制的更多详细信息,请参阅 PostgreSQL 文档有关流复制的部分。

以下术语贯穿整个 repmgr 文档。

  • 复制集群

    在 repmgr 文档中,“复制集群”是指通过流复制连接的 PostgreSQL 服务器网络。

  • 节点

    一个节点是复制集群中的单个 PostgreSQL 服务器。

  • 上游节点

    备用服务器连接到的节点,以便接收流复制。这要么是主服务器,要么是在级联复制的情况下,另一个备用服务器。

  • 故障转移

    这是在主服务器发生故障时,将一个合适的备用服务器提升为新的主服务器时,发生的操作。repmgrd 守护程序支持自动故障转移,以最大程度地减少停机时间。

  • 切换

    在某些情况下,例如维护硬件或操作系统期间,需要使主服务器下线;在这种情况下,需要进行受控切换,从而提升合适的备用数据库,并以受控方式从复制集群中删除现有的主数据库。repmgr 命令行客户端提供了此功能。

  • 隔离

    在故障转移情况下,在提升新的备用数据库后,必须确保之前的主数据库不要意外地重新上线,这会导致脑裂情况。为了防止这种情况,应将发生故障的主数据库与应用程序隔离开来,即“隔离”。

  • 见证服务器

    repmgr 提供了设置所谓的“见证服务器”的功能,在具有多个备用服务器的故障转移情况下,用以帮助确定新的主服务器。见证服务器本身不是复制集群的一部分,尽管它确实包含了一份 repmgr 元数据模式的副本。

    见证服务器的目的是提供“投票”,在复制集群中的服务器会被分布到多个位置。如果这些位置之间的连接丢失,见证服务器的存在与否,将决定该位置的服务器是否升级为主服务器;这是为了防止出现“脑裂”情况,其中一个被网络隔离的位置会被当作远程主服务器故障,并提升一个正常的备用服务器。

    仅当使用 repmgrd 时,才需要创建见证服务器。

组件

repmgr 是一套开源工具,用于管理 PostgreSQL 服务器集群中的复制和故障转移。它支持并增强了 PostgreSQL 的内置流复制,支持单个读/写主服务器和一个或多个只读备用服务器,备用服务器中包含了主服务器数据库的近乎实时的副本。它提供了两个主要工具:

repmgr

用于执行管理任务的命令行工具,例如:

  • 设置备用服务器
  • 将备用服务器提升为主服务器
  • 切换主服务器和备用服务器
  • 显示复制集群中服务器的状态

repmgrd

主动监视复制集群中的服务器,并执行以下任务的守护程序:

  • 监视和记录复制性能
  • 通过检测主服务器故障,并提升最合适的备用服务器,来执行故障转移
  • 通过用户定义的脚本提供有关集群中事件的通知,该脚本可以执行通过电子邮件发送警报等任务

Repmgr 用户和元数据

为了有效地管理复制集群,repmgr 需要将集群中服务器的信息存储在一个专用的数据库模式中。此模式由 repmgr 扩展自动创建,该扩展在初始化 repmgr 管理的集群(repmgr primary register)的第一步中安装,并包含以下对象:

  • repmgr.events:记录感兴趣的事件
  • repmgr.nodes:复制集群中每个服务器的连接和状态信息
  • repmgr.monitoring_history:repmgrd 写入的关于备用服务器的历史监控信息

视图

  • repmgr.show_nodes:基于表repmgr.nodes,额外显示服务器上游节点的名称
  • repmgr.replication_status:启用 repmgrd 的监控后,显示每个备用服务器的当前监控状态。

repmgr 元数据模式可以存储在现有数据库中,也可以存储在其自己的专用数据库中。请注意,repmgr 元数据模式不能驻留在不属于 repmgr 管理的复制集群的数据库服务器上。

必须要有可用的数据库用户供 repmgr 访问此数据库,并执行必要的更改。此用户不需要是超级用户,但是某些操作(例如 repmgr 扩展的初始安装)将需要一个超级用户连接(可以在需要时使用命令行选项--superuser指定)。