四月 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
指定)。