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

作者:颜博 青云科技数据库研发工程师
目前从事 PostgreSQL 产品开发工作,热衷于 PostgreSQL 数据库的学习和研究

| REPMGR 简介

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

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

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

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

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

集群节点部署完成后,每个节点都可通过 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 备
  • 主从切换
  • 显示复制群集中服务器的状态
    [En]

    display the status of the servers in the replication cluster*

repmgrd 是一个守护进程,它主动监视复制集群中的服务器并支持以下任务:

  • 监控和记录复制集群信息
  • 故障检测、故障转移
  • 通知集群中的事件(需要自定义脚本才能接受通知)
    [En]

    Notification of events in the cluster (custom script is required to accept notifications)*

用户与元数据

为了有效地管理复制集群,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/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

Original: https://www.cnblogs.com/radondb/p/15632080.html
Author: RadonDB
Title: 工具 | PG 集群复制管理工具 repmgr

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/507984/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • vue2框架基础

    一、什么是vue? vue是一个优秀的前端框架,他与Angular.js、React.js成为前端三大主流框架。他是一套构建用户界面的框架,只关注视图层,可以完成大型项目的开发,框…

    数据库 2023年6月14日
    088
  • Kmp算法

    算法流程: kmp_search(char[] text,char[] pattern) 构建前缀表 prefix[0]默认&#…

    数据库 2023年6月11日
    0118
  • Python 3.10 is coming!

    看看Python 官网的文档 whatsnew,Python 3.10 已然距离我们越来越近了,然我们看看 Python 3.10 相较于 Python 3.9 有哪些改变吧 新特…

    数据库 2023年6月6日
    0100
  • dba+开源工具:MHA复刻版,轻松实现MySQL高可用故障转移(附下载)

    由于MHA(mha4mysql-manager)工具在2018年已经停止维护更新,且不支持GTID复制模式,在原版基础上增补功能难度较大,因此考虑将其重构。 参考了原版MHA的故障…

    数据库 2023年5月24日
    0105
  • 设计模式之(2)——工厂方法模式

    定义:工厂方法模式又称为工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类来定义创建对象的接口,而子类负责生成具体的对象; 主要作用:将类的实例化延迟到工厂类的子类中进行,由…

    数据库 2023年6月14日
    0101
  • Mysql 一主一从

    1. 主从原理 1.1 主从介绍 所谓 mysql 主从就是建立两个完全一样的数据库,其中一个为主要使用的数据库,另一个为次要的数据库,一般在企业中,存放比较重要的数据的数据库服务…

    数据库 2023年5月24日
    076
  • Yapi安装配置(CentOs)

    环境要求 nodejs(7.6+)mongodb(2.6+)git 准备工作 清除yum命令缓存 sudo yum clean all 卸载低版本nodejs yum remove…

    数据库 2023年6月11日
    072
  • python logging模块详解

    日志 日志是跟踪软件运行时所发生的事件的一种方法。软件开发者在代码中调用日志函数,表明发生了特定的事件。事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次…

    数据库 2023年6月11日
    096
  • Kafdrop

    Kafdrop 是一个用于查看 Kafka 主题和浏览消费者组的 Web UI docker run -d –rm -p 9000:9000 \ -e KAFKA_BROKERC…

    数据库 2023年6月14日
    0126
  • PHP array_values()

    array_values array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。 示例: function arrayValues() { $dat…

    数据库 2023年6月14日
    0130
  • 第十六章:接口

    本篇翻译自《Practical Go Lessons》 Chapter 16: Interfaces 1 你将在本章学到什么? 什么是类型接口? 如何定义接口。 “实现…

    数据库 2023年6月6日
    095
  • Consul 入门-gRPC 服务注册与发现

    前言 假如我有钱,我&am…

    数据库 2023年6月6日
    096
  • 5 float f = 3.4,是否正确

    不正确,赋值运算符 “=” 左右两边的精度类型不匹配。 Java中,有小数点的默认被存储为double类型,即双精度;而float类型的变量为单精度。 可以…

    数据库 2023年6月6日
    074
  • Indian Math tech

    https://www.youtube.com/watch?v=2j0nHEy5y18 本文来自博客园,作者:ukyo–BlackJesus,转载请注明原文链接:htt…

    数据库 2023年6月11日
    082
  • 集成 nacos注册中心配置使用

    pom <span class="hljs-tag"><<span class="hljs-name">pro…

    数据库 2023年6月6日
    098
  • 读取资源文件的几种常用方法

    资源文件的读取方法: 本地读取资源文件 undefined2. 服务器(Tomcat)通过ServletContext获取: ServletContext servletConte…

    数据库 2023年6月16日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球