乐趣区

关于数据库:工具-PG-集群复制管理工具-repmgr

作者:颜博 青云科技数据库研发工程师

目前从事 PostgreSQL 产品开发工作,热衷于 PostgreSQL 数据库的学习和钻研

| REPMGR 简介

repmgr[1] 是一套开源工具,用于治理 PostgreSQL 服务器集群内的复制和故障转移。repmgr 反对并加强了 PostgreSQL 的内置流复制,它提供了一个繁多的读 / 写主服务器和一个或多个只读备用服务器。

repmgr 流复制管理工具对 PostgreSQL 集群节点的治理是基于分布式的治理形式。集群每个节点都具备一个 repmgr.conf 配置文件,用来记录本节点的 ID、节点名称、连贯信息、数据库的 PGDATA 目录等配置参数。在实现参数配置后,就能够通过 repmgr 命令实现对集群节点的“ 一键式 ”部署。

repmgr 架构图(图片起源:https://repmgr.org/)如下:

集群节点部署实现后,每个节点都可通过 repmgrd 守护过程来监控节点数据库状态;每个节点元数据表可独立保护,这些元数据表将记录所有集群节点的信息。

选举原理

在产生 Auto Failover 时,备节点在尝试屡次连贯主节点失败后(尝试次数及尝试距离能够通过 repmgr.conf 配置文件批改),repmgrd 会在所有备节点中选举一个候选备节点(选举机制参考下文)晋升为新主节点,其余备节点去 Follow 到该新主上,造成一个新的集群。

repmgr 选举候选备节点依照以下程序选举:LSN > Priority > Node_ID

  • 零碎将优先选举一个 LSN 较大的节点,作为候选备节点;
  • 若 LSN 一样,会依据 Priority 优先级进行比拟(该优先级是在配置文件中进行参数配置,如果 Priority 为 0,则代表该节点被禁止晋升为主节点);
  • 若优先级也一样,会比拟节点的 Node ID,小者会优先选举。

两个工具

repmgr 次要提供了 repmgr 和 repmgrd 两个工具。

repmgr 是一个执行治理工作的命令行工具,不便进行 PostgreSQL 服务器集群的治理。具备以下性能特点:

  • 设置备用服务器
  • promote 备
  • 主从切换
  • 显示复制集群中服务器的状态

repmgrd 是一个守护过程,它被动监督复制集群中的服务器并反对以下工作:

  • 监控和记录复制集群信息
  • 故障检测、故障转移
  • 集群中事件的告诉(须要自定义脚本承受告诉)

用户与元数据

为了无效地治理复制集群,repmgr 须要将集群中节点的相干信息存储在 repmgr 专用数据库表中。此架构由 repmgr 扩大主动创立,该扩大在初始化由 repmgr 治理的集群(repmgr primary register)的第一步中装置,并蕴含以下对象:

  • Tables:

    • repmgr.events: records events of interest
    • repmgr.nodes: 复制集群中每个节点的连贯和状态信息
    • repmgr.monitoring_history: repmgrd 写入的历史备用监控信息
  • Views:

    • repmgr.show_nodes: 基于 repmgr.nodes 表,另外显示服务器上游节点的名称
    • repmgr.replication_status: 当启用 repmgrd 的监控时,显示每个 standby 的监控状态。repmgr 元数据信息能够存储在已有的数据库或在本人的专用数据库。

留神:repmgr 元数据信息不能存储在不属于 repmgr 治理的复制集群的 PostgreSQL 服务器上。repmgr 须要一个能够拜访数据库和执行必要的更改的用户,该用户能够不是超级用户,然而某些操作(例如 repmgr 扩大的初始装置)将须要超级用户连贯(能够在须要时应用命令行选项指定 –superuser)。

| 装置 repmgr

留神:必须在集群的所有节点装置雷同的“次要”repmgr 版本(例如 5.2.1.x)[2]。

repmgr 版本

repmgr 版本 反对的 PostgreSQL 版本 最新版本
repmgr 5.2 9.4, 9.5, 9.6, 10, 11, 12, 13 5.2.1 (2020-12-07)
repmgr 5.1 9.3, 9.4, 9.5, 9.6, 10, 11, 12 5.1.0 (2020-04-13)
repmgr 5.0 9.3, 9.4, 9.5, 9.6, 10, 11, 12 5.0 (2019-10-15)
repmgr 4.x 9.3, 9.4, 9.5, 9.6, 10, 11 4.4 (2019-06-27)
  • repmgr 2.x 和 3.x 系列不再维持,不在此列举。
  • repmgr 5.0 公布之后,将不会再公布 repmgr 4.x 系列。

装置过程

以 repmgr 5.2.x 版本为例,从源码仓库,Clone 并装置 repmgr。

$ git clone https://github.com/EnterpriseDB/repmgr
$ git checkout REL5_2_STABLE
$ cd repmgr/
./configure
$ make install

make install 胜利后,pg_bin_path 里会有 repmgr、repmgrd 两个可执行文件。

| 应用 repmgr

repmgr 工具的根本语法 [3]:

repmgr [OPTIONS] primary {register|unregister}
repmgr [OPTIONS] standby {register|unregister|clone|promote|follow|switchover}
repmgr [OPTIONS] node    {status|check|rejoin|service}
repmgr [OPTIONS] cluster {show|event|matrix|crosscheck|cleanup}
repmgr [OPTIONS] witness {register|unregister}
repmgr [OPTIONS] service {status|pause|unpause}
repmgr [OPTIONS] daemon  {start|stop}
  • 个别配置选项
  -b, --pg_bindir=PATH    PostgreSQL 二进制文件的门路(可选)-f, --config-file=PATH  repmgr 配置文件的门路
  -F, --force             强制执行有潜在危险的操作 
  • 数据库连贯选项
  -d, --dbname=DBNAME     要连贯的数据库(默认:“postgres”)-h, --host=HOSTNAME     数据库服务器主机
  -p, --port=PORT         数据库服务器端口(默认:“5432”)-U, --username=USERNAME 要连贯的数据库用户名(默认:“postgres”)
  • 特定于节点的选项
  -D, --pgdata=DIR        节点数据目录的地位
  --node-id               通过 id 指定节点(仅实用于局部操作)--node-name             按名称指定节点(仅实用于局部操作)
  • 记录选项
   --dry-run 显示动作会产生什么,但不执行它
   -L, --log-level 设置日志级别(笼罩配置文件;默认值:NOTICE)--log-to-file 记录到 repmgr.conf 中定义的文件(或记录工具)-q, --quiet 禁止除谬误之外的所有日志输入
   -t, --terse 不显示细节、提醒和其余非关键输入
   -v, --verbose 显示额定的日志输入(用于调试)

罕用操作

  • 操作类
命令 形容
repmgr primary register 注册以后节点为 primary 节点
repmgr primary unregister 登记 primary 主节点
repmgr standby clone 以后节点应用 pg_basebackup 从 primary 主节点复制数据目录
repmgr standby register 注册以后节点为 standby 节点
repmgr standby unregister 登记 standby 节点
repmgr standby promote 将 standby 节点晋升为 primary 主节点
repmgr standby follow 一主多从架构中,standby 节点从新指向新的 primary 主节点
repmgr standby switchover 将指定 standby 节点晋升为 primary 主节点,并将 primary 主节点降级为 standby 节点
repmgr witness register 注册以后节点为见证服务器节点
repmgr witness unregister 登记见证服务器节点
  • 查看类
命令 形容
repmgr node status 查看各节点的根本信息和复制状态
repmgr node check 高可用集群节点状态信息查看
repmgr node rejoin 重新加入一个失效节点到集群
repmgr cluster show 查看集群中已注册的节点根本信息与状态
repmgr cluster matrix 查看集群中所有节点的 matrix 信息
repmgr cluster crosscheck 查看集群中所有节点间两两穿插连贯检测
repmgr cluster event 查看集群事件记录信息
repmgr cluster cleanup 清理集群监控历史

下期预报

下期咱们将应用 repmgr,带您一步步搭建一套 PostgreSQL 高可用集群。

参考

[1]. repmgr:https://github.com/Enterprise…

[2]. 5.2.1 文档:https://repmgr.org/docs/5.2/

[3]. 常见操作:https://blog.csdn.net/weixin_…

退出移动版