repmgr管理pg高可用

news2024/12/30 2:56:21

repmgr用于管理 PostgreSQL 服务器集群内的复制和故障转移,类似dg-broker,可以实现swichover和failover。

整体架构

repmgr架构图如下:

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

在发生failover时,备节点尝试多次连接主节点失败后(尝试次数和间隔可通过repmgr.conf配置),repmgrd会在所有备节点中选举一个作为新主节点(repmgr 选举新主节点按照以下顺序选举:LSN > Priority > Node_ID),其他备节点会follow新主节点,形成新的集群。

两个工具

repmgr主要提供了repmgr和repmgrd两个工具:

repmgr 是一个执行管理任务的命令行工具,方便进行 PostgreSQL 服务器集群的管理,主要功能有:

  • 主备节点加入集群;
  • 查询集群所有节点状态;
  • 主从switchover;
  • failover的旧主节点rejoin集群

repmgrd作为守护进程,监视集群中节点的状态,主要功能如下:

  • 监控和记录集群信息;
  • 自动故障检测
  • 自动failover(选主原则:LSN > Priority > Node_ID)

元数据信息

为了有效地管理复制集群,repmgr 需要将集群中节点的相关信息存储在 repmgr 专用数据库表中。包含以下对象:

表:

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

视图:

repmgr.show_nodes: 基于 repmgr.nodes 表,另外显示服务器上游节点的名称
repmgr.replication_status: 当启用 repmgrd 的监控时,显示每个 standby 的监控状态

注:

repmgr 元数据信息只能存储在被此repmgr管理的集群中,且需要可以访问数据库和执行更改的管理用户,由于repmgr的初始安装需要超级用户权限,所以此管理用户需要被赋予superuser权限。

安装repmgr

1、主机规划

主机名IPnode_idnode_namepriority备注
pr-obsrv0110.10.237.111obsrv01默认100pg、repmgr、repmgrd
pr-obsrv0210.10.237.122obsrv02默认100pg、repmgr、repmgrd
pr-obsrv0310.10.237.133obsrv03默认100pg、repmgr、repmgrd

2、安装repmgr

2.1 下载repmgr

repmgr - Replication Manager for PostgreSQL clusters

Release notes: repmgr - Replication Manager for PostgreSQL clusters

可选择最新版本(最新版本5.4.1支持pg9.4~pg15)

2.2 操作系统配置(三个节点都执行)

2.2.1 关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld

vi /etc/selinux/config
SELINUX=disabled

reboot
2.2.2 创建pg目录和用户
mkdir /pg
useradd -d /pg pg
passwd pg
cp /etc/skel/* /pg
chown -R pg.pg /pg
su - pg
vi .bash_profile
export PGHOME=/pg
export PGDATA=$PGHOME/data
export PATH=$PATH:$PGHOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib
2.2.3 配置/etc/hosts

cat /etc/hosts

10.10.237.11 pr-obsrv01
10.10.237.12 pr-obsrv02
10.10.237.13 pr-obsrv03

2.2.4 配置pg用户ssh免密
su - pg
ssh-keygen -t rsa

ssh-copy-id -i /pg/.ssh/id_rsa pr-obsrv01
ssh-copy-id -i /pg/.ssh/id_rsa pr-obsrv02
ssh-copy-id -i /pg/.ssh/id_rsa pr-obsrv03

节点1执行:
ssh pr-obsrv02
ssh pr-obsrv03
节点2执行:
ssh pr-obsrv01
ssh pr-obsrv03
节点3执行:
ssh pr-obsrv01
ssh pr-obsrv02
2.2.5 创建目录
su - pg
mkdir data
mkdir log
mkdir archive_wals
2.2.6 安装依赖包
yum -y install libselinux-devel
yum -y install libxml2-devel
yum -y install libxslt-devel
yum -y install openssl-devel
yum -y install pam-devel
yum -y install readline-devel

2.3 安装repmgr(三个节点都安装)

su - pg
tar -xvf repmgr-5.4.1.tar.gz
mv repmgr-5.4.1 repmgr
cd repmgr
./configure
make install
repmgr -V

安装后会在/pg/bin下生成repmgr和repmgrd两个可执行文件;在/pg/share/postgresql/extension/下生成repmgr文件;在/pg/lib/postgresql下生成repmgr.so

2.4 配置repmgr.conf

注意:不要将repmgr.conf放在PGDATA目录下
 

cat repmgr.conf
node_id=1
node_name=obsrv01
conninfo='host=10.10.237.11 port=5434 user=repmgr password=repmgr dbname=repmgr connect_timeout=5'
data_directory='/pg/data'
pg_bindir='/pg/bin'

location='default'
failover='automatic'
promote_command='/pg/bin/repmgr standby promote -f /pg/repmgr.conf --log-to-file'
follow_command='/pg/bin/repmgr standby follow -f /pg/repmgr.conf --log-to-file --upstream-node-id=%n'
log_file='/pg/log/repmgrd.log'
monitoring_history=true
monitor_interval_secs=5
reconnect_attempts=6
reconnect_interval=5

注:其他两个节点除了 node_id、node_name和conninfo不同,其他配置均相同

 2.5 安装PG13(三个节点都安装)

su - pg
tar -xvf postgresql-13.11.tar.gz
cd postgresql-13.11
./configure --prefix=/pg
make -j 8
make install

 2.6 初始化pg(节点1)

initdb -D /pg/data

2.7 配置postgres.conf(节点1)

listen_addresses = '*'          # what IP address(es) to listen on;
port = 5434                             # (change requires restart)
max_connections = 100                   # (change requires restart)
shared_buffers = 128MB                  # min 128kB
wal_level = replica                     # minimal, replica, or logical
max_wal_size = 1GB
min_wal_size = 80MB
archive_mode = on               # enables archiving; off, on, or always
archive_command = 'test ! -f /pg/archive_wals/%f && cp %p /pg/archive_wals/%f'  # command to use to archive a logfile segment
max_wal_senders = 10            # max number of walsender processes
hot_standby = on                        # "off" disallows queries during recovery
logging_collector = on          # Enable capturing of stderr and csvlog
log_directory = '/pg/log'                       # directory where log files are written,
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
log_file_mode = 0600                    # creation mode for log files,
log_rotation_age = 1d                   # Automatic rotation of logfiles will
log_rotation_size = 10MB                # Automatic rotation of logfiles will
log_timezone = 'Asia/Shanghai'
shared_preload_libraries = 'repmgr'     # (change requires restart)
wal_log_hints = 'on'                    # pg_rewind需要开启wal_log_hints,否则无法修复failover的旧主节点只能重建

2.8 追加以下到pg_hba.conf

local   replication     repmgr                              trust
host    replication     repmgr      127.0.0.1/32            trust
host    replication     repmgr      10.10.237.11/25             trust
host    replication     repmgr      10.10.237.12/25             trust
host    replication     repmgr      10.10.237.13/25             trust
local   repmgr          repmgr                              trust
host    repmgr          repmgr      127.0.0.1/32            trust
host    repmgr          repmgr      10.10.237.11/25            trust
host    repmgr          repmgr      10.10.237.12/25            trust
host    repmgr          repmgr      10.10.237.13/25            trust

2.9 启动节点1并创建repmgr相关用户和数据库

su - pg
pg_ctl start
psql -Upostgres -p5434
create user repmgr superuser  password 'repmgr';
ALTER USER repmgr SET search_path TO repmgr, "$user", public;
create database repmgr owner repmgr;

2.10 注册主节点到repmgr

repmgr -f /pg/repmgr.conf primary register
repmgr -f /pg/repmgr.conf cluster show

或者在元数据库中查询

psql -Urepmgr -drepmgr -p5434
select * from nodes;

2.11 clone两个从节点并注册(节点2和3依次运行)

首先--dry-run检查extension和必要参数

repmgr -h 10.10.237.11 -U repmgr -p 5434   -d repmgr -f /pg/repmgr.conf standby clone --dry-run

没问题再进行clone

repmgr -h 10.10.237.11 -U repmgr -p 5434   -d repmgr -f /pg/repmgr.conf standby clone

最后HINT提示需要起postgres服务个register从节点

pg_ctl start
repmgr -f /pg/repmgr.conf standby register
repmgr -f /pg/repmgr.conf cluster show

2.12 启动repmgrd守护进程(三个节点都执行,可以实现自动failover)

su - pg
touch /pg/log/repmgrd.log
repmgrd -f /pg/repmgr.conf start

测试switchover

某从节点执行

repmgr -f /pg/repmgr.conf  standby switchover --siblings-follow

测试failover

将主节点的postgres进程kill掉看能否实现自动故障转移

恢复原主节点可以使用以下命令

repmgr -f /pg/repmgr.conf  node rejoin -d 'host=10.10.237.11 dbname=repmgr user=repmgr password=repmgr port=5434' --force-rewind

思考

  • repmgr 本身不提供虚拟 ip 服务,如果需要虚拟 ip 服务,可使用 keepalived 或其它工具
  • 可以设置优先级高的节点为 sync 模式, sync 模式保证了数据的强一致性,将sync模式的从库的priority设高

参考文档:

PG 复制管理工具之 REPMGR - 墨天轮

高可用 | repmgr 构建 PostgreSQL 高可用集群部署文档【建议收藏】 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stream流处理快速上手最佳实践 | 京东物流技术团队

一 引言 JAVA1.8得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工处理。Stream可以看作是流水线上的一个工…

深度解析NLP文本摘要技术:定义、应用与PyTorch实战

目录 1. 概述1.1 什么是文本摘要?1.2 为什么需要文本摘要? 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 多文档摘要3.3 信息性摘要 vs. 背景摘要3.4 实时摘要 4. 主要类型4.1 抽取…

【Linux进行时】进程状态

进程状态: ❓假设我们在上课,在B站上上课,请问我们的B站是不是一直运行呢?💡不是的! ❓假设我们同时打开了B站和PDF阅读器时,是怎么运行的呢? 💡每一个进程在CPU跑一会&a…

Layui快速入门之第十三节 日期与时间选择器

目录 一:基本用法 API 渲染 属性 弹出提示 2.8 获取实例 2.8 解除实例绑定 2.8 关闭日期面板 2.7 获取某月的最后一天 二:常规用法 三:多类型选择器 四:范围选择 五:直接静态显示 六:更多功能…

Vue入门--vue的生命周期

一.什么是Vue 二.Vue的简介 官方网址 特点 三. 前后端的分离 重大问题 优势 4.Vue入门 定义一个管理边界 ​编辑 测试结果 vue的优势 ​编辑 测试结果 5.Vue的生命周期 vue的生命周期图 ​编辑建立一个html 测试结果 一.什么是Vue Vue是一种流行的JavaScript前端框…

华为云云耀云服务器L实例评测|使用宝塔10分钟部署一个围猫猫小游戏

目录 前言一、选择华为云云耀云服务器L实例的原因二、华为云云耀云服务器的优势三、快速部署一个小游戏(1)终端部署1、使用Termius工具连接终端2、安装Nginx3、上传打包文件 (2)宝塔可视化面板部署1、进入宝塔2、宝塔菜单3、上传代…

【实训项目】你好,教练-校园私教平台的设计与开发

1.设计摘要 随着社会的进步,人们的健康意识逐渐提高,越来越多的人选择在闲暇时间健身,在大学生群体中,这一现象犹为明显。在大学城内,有多家健身房供同学选择,也有许多同学选择在操场或者宿舍内自己健身&a…

使用Seata实现分布式事务

Seata 一:故事背景二:使用方法2.1 下载安装Seata2.4 修改对应配置文件。2.4.1 配置中心2.4.1 注册中心2.4.2 日志保存模式 2.3 启动Seata2.4 项目中集成2.5 数据库内新建undo_log 表进行日志记录2.6 编写代码测试Seata提供的分布式事务功能 三&#xff1…

带你熟练使用list

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…

EdgeX Foundry MQTT设备服务

一、部署edgex 1.运行命令行,进入放置docker-compose-fuji-no-secty.yml文件的路径下 下载到本地的docker-compose文件 执行: docker-compose -f docker-compose-fuji-no-secty.yml pull 拉取相关镜像,这里默认将文件中没有注释的服务镜像全部…

企业注册版 :ag-Grid Enterprise 30.1.0

Ag-Grid 被描述为一种商业产品,已根据 EULA 进行分发,并受到我们提供的技术团队的鼓励。它非常高级,具有与行分组一样的性能以及范围选择、主数据和案例、行的服务器端模型等等。Ag-Grid Enterprise 通常附带集成图表,允许用户和开…

无涯教程-JavaScript - IFS函数

描述 IFS函数检查是否满足一个或多个条件,并返回与第一个TRUE条件相对应的值。此功能已在Excel 2016中添加。 语法 IFS (logical_test1, value_if_true1, [logical_test2, value_if_true2], [logical_test3, value_if_true3]…) 争论 Argument描述Required/Optionallogical…

无涯教程-JavaScript - ATAN函数

描述 The ATAN function returns the arctangent, or inverse tangent, of a number. The returned angle is given in radians between -π/2 and π/2. The arctangent is the angle whose tangent is number. 语法 ATAN (number)争论 Argument描述Required/OptionalNumb…

springboot配置注入增强(二)属性注入的原理

一 原理 1 配置的存储 springboot在启动的时候会后构建一个org.springframework.core.env.Environment类型的对象,这个对象就是用于存储配置,如图springboot会在启动的最开始创建一个Environment对象 这个webApplicationType的枚举是在new SpringAppli…

Learn Prompt-Midjourney 图片生成

简介 随着 ChatGPT 的爆火,越来越多的人开始关注并尝试 AI 相关的应用。而图片生成就是其中一个备受瞩目的领域。目前已经有许多图像生成工具,如 Midjourney,Stable Diffusion,DALL-E,Firefly等。本课程主要是以 Midj…

Python 变量的类型注解

视频版教程 Python3零基础7天入门实战视频教程 类型注解 前面有个示例,我们函数参数是字符串类型,但是pycharm工具不知道,所以不会给我们提示s的方法,我们只能人工手写,效率大大降低。 类型注解: 在代码中…

心法利器[101] | 从大模型到大模型系统

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里&…

使用ElementPlus实现内嵌表格和内嵌分页

前言 有时遇到这样的需求,就是在表格里面嵌入一个表格,以及要求带有分页,这样在ElementPlus中很好实现。以下使用Vue2语法实现一个简单例子,毕竟Vue3兼容Vue2语法,若想要Vue3版本例子,简单改改就OK了。 一…

数据结构——图的应用

文章目录 前言一、图的应用1. 最小生成树普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法 2. 最短路径Dijkstra算法求单源最短路径 3. 拓扑结构4. 关键路径 总结 前言 图的应用 1.1 最小生成树 1.2 最短路径 1.3 拓扑结构 1.4 关键路径…

【网络教程】揭秘Windows SSH服务端免密登录:告别繁琐,享受安全连接

文章目录 开启Windows下的SSH服务端图形界面安装手动下载安装Windows如何查看系统用户名Windows如何查看本机IP开启免密登录Window生成秘钥Linux下生成秘钥配置公钥视频讲解开启Windows下的SSH服务端 这篇文章演示的环境是Windows11Windows的SSH服务端默认情况下是没有安装的,…