写点什么

工具 | PG 集群复制管理工具 repmgr

  • 2021 年 12 月 02 日
  • 本文字数:2308 字

    阅读完需:约 8 分钟

工具 | 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 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 ,带您一步步搭建一套 PostgreSQL 高可用集群。

参考

[1]. repmgr:https://github.com/EnterpriseDB/repmgr


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


[3]. 常见操作:https://blog.csdn.net/weixin_37692493/article/details/117032458?ivk_sa=1024320u

发布于: 2 小时前阅读数: 7
用户头像

https://radondb.com 2021.06.21 加入

一个面向云原生、容器化的数据库开源社区!

评论

发布
暂无评论
工具 | PG 集群复制管理工具 repmgr