当前位置: 首页 > news >正文

【PG】PostgreSQL高可用方案repmgr管理之配置文件

1 配置文件

1.1 配置文件格式

repmgr.conf是一个纯文本文件,每行包含一个参数/值组合。

空格是无关紧要的(除了在带引号的参数值内),并且空行将被忽略。#将该行的其余部分指定为注释。不是简单标识符或数字的参数值应该用单引号引起来。

要在参数值中嵌入单引号,请写入两个引号(首选)或反斜杠引号。

有效文件示例repmgr.conf

# repmgr.confnode_id=1
node_name= node1
conninfo ='host=node1 dbname=repmgr user=repmgr connect_timeout=2'
data_directory = '/var/lib/pgsql/12/data'

 1.2 配置文件的包含指令

从repmgr 5.2 开始,配置文件可以包含以下 include 指令:

  • include:包含指定的文件,可以是绝对路径,也可以是相对于当前文件的路径
  • include_if_exists: 包含指定的文件。该文件被指定为绝对路径或相对于当前文件的路径。但是,如果不存在,则不会引发错误。
  • include_dir:包含指定目录中后缀为.conf. 目录指定为绝对路径或相对于当前文件的路径

它们的行为方式与 PostgreSQL 配置文件处理完全相同;有关更多详细信息,请参阅PostgreSQL 文档 。

1.3 配置文件位置

将在以下位置搜索配置文件:

  • -f/--config-file由命令行选项指定的配置文件

  • 由软件包维护者指定的位置(如果 从软件包安装 repmgr并且软件包维护者已指定配置文件位置)

  • repmgr.conf在本地目录中

  • /etc/repmgr.conf

  • pg_config --sysconfdir报告的目录

请注意,如果使用 显式指定文件-f/--config-file,则如果未找到该文件或该文件不可读,则会引发错误,并且不会尝试检查默认位置;这是为了防止repmgr意外读取错误的配置文件

1.4 配置文件项

以下部分记录了配置文件的一些部分:

1.4 .1 必须的配置文件

每个repmgr.conf文件必须包含以下参数:

node_idint)

标识节点的大于零的唯一整数。

node_namestring)

任意(但唯一)字符串;我们建议使用服务器的主机名或与服务器明确关联的其他标识符以避免混淆。避免选择反映节点当前角色的名称,例如,primary或者standby1 因为角色可以更改,并且如果您最终得到调用当前主节点的解决方案standby1(例如),至少可以说事情会很混乱。

该字符串的最大长度为 63 个字符,并且应仅包含可打印的 ASCII 字符。

conninfostring)

作为 conninfo 字符串的数据库连接信息。集群中的所有服务器都必须能够使用此字符串连接到本地节点。

有关 conninfo 字符串的详细信息,请参阅 PosgreSQL 文档中的 连接字符串部分。

如果正在使用repmgrd,请考虑 connect_timeoutconninfo 字符串中显式设置以确定放弃网络连接尝试之前经过的时间长度;有关详细信息,请参阅 PostgreSQL 文档。

data_directorystring)

节点的数据目录。当 PostgreSQL 实例未运行且没有其他方法确定数据目录时,repmgr 需要执行此操作。

1.4 .2 可选的配置文件

config_directorystring)

postgresql.conf如果 PostgreSQL 配置文件位于数据目录之外,请指定主文件所在 目录 。

这允许显式提供外部配置文件目录,如果设置该目录,则该目录将pg_ctl作为 -D参数传递。否则pg_ctl将默认使用数据目录,如果配置文件不存在,这将导致某些操作失败。

replication_userstring)

与之建立复制连接的 PostgreSQL 用户。如果为设置默认值,则为conninfo中定义的用户

replication_typestring)

必须是physical(默认)。

locationstring)

定义节点位置的任意字符串;这在故障转移期间用于检查当前主节点的可见性。

use_replication_slotsboolean)

是否使用物理复制槽。

ssh_optionsstring)

由repmgrssh执行时 附加到命令的选项。

我们建议添加-q以抑制任何多余的 SSH 聊天(例如登录横幅)以及显式 ConnectTimeout值,例如:

ssh_options='-q -o ConnectTimeout=10'
pg_bindirstring)

PostgreSQL 二进制目录的路径(pg_ctl、 pg_basebackup等的位置)。仅当系统中没有这些时才需要PATH

1.5 日志设置

默认情况下,repmgr和repmgrd将日志输出写入 STDERR. 可以指定替代日志目标(文件或syslog)。

log_levelstring)

日志输出的级别,默认为INFO. 可选值:

 DEBUGINFONOTICEWARNINGERRORALERTCRIT , EMERG.

请注意,这DEBUG将产生大量日志输出,在正常使用中不应启用。

log_facilitystring)

日志记录工具: 可选的值有 STDERR(默认),或对于syslog的话,可选的值有 : LOCAL0LOCAL1...LOCAL7USER.

log_filestring)

如果log_facility设置为STDERR,则可以将日志输出重定向到指定文件。

有关配置日志轮换的信息, 请参阅第 13.4 节。

log_status_intervalinteger)

此设置导致repmgrd以指定的时间间隔(以秒为单位,默认300)发出状态日志行,描述repmgrd的当前状态,例如:

[2018-07-12 00:47:32] [INFO] monitoring connection to upstream node "node1" (ID: 1)

log_level=info
log_facility=STDERR
log_file='/home/storage/repmgr/repmgr.log'
log_status_interval=600

1.6 服务器命令参数

在某些情况下,repmgr(和repmgrd)需要能够停止、启动或重新启动 PostgreSQL。repmgr的命令repmgr standby follow, repmgr standby switchover and repmgr node rejoin.需要用到上面的命令 

默认情况下,repmgr将使用 PostgreSQL 的pg_ctl程序来控制 PostgreSQL 服务器。然而,这可能会导致各种问题,特别是当从软件包安装 PostgreSQL 时,尤其是在使用 systemd时。

特别注意:
如果使用 systemd,请确保您已 RemoveIPC设置为 off。有关详细信息, 请参阅 PostgreSQL 文档部分  systemd RemoveIPC 以及 PostgreSQL wiki 中的 systemd条目。

相关参数

service_start_command='pg_ctl  -D /home/storage/pgsql/data -l /home/storage/pgsql/data/server.log start'
service_stop_command='pg_ctl  -D /home/storage/pgsql/data -l /home/storage/pgsql/data/server.log stop'
service_restart_command='pg_ctl  -D /home/storage/pgsql/data -l /home/storage/pgsql/data/server.log restart'
service_reload_command='pg_ctl  -D /home/storage/pgsql/data -l /home/storage/pgsql/data/server.log reload'

可以用以下命令查看真实的PG的命令

repmgr -f /etc/repmgr.conf node service --list-actions --action=stop
repmgr -f /etc/repmgr.conf node service --list-actions --action=start
repmgr -f /etc/repmgr.conf node service --list-actions --action=restart
repmgr -f /etc/repmgr.conf node service --list-actions --action=reload

1.7 用户权限

如果用户是superuser权限,则无需再授予其他权限

如果使用费superuser ,则需要以下权限:

1.7.1  Replication role

repmgr需要一个具有REPLICATION角色的用户来 创建复制连接以及管理复制slots

1.7.2. Database roles

非superuser的用户还需要是以下预定义觉角色的成员

  • pg_read_all_stats (查询pg_stat_replication以及执行 execute pg_database_size() 在所有的数据库上)
  • pg_read_all_settings (to access the data_directory setting)
1.7.3. Extension creation
1.7.4. Function permissions
1.7.5. repmgr actions requiring a superuser
1.7.6. repmgr commands with --superuser option

1.8 密码管理

PostgreSQL 提供三种提供密码的方式:

  • 在字符串conninfo中包含密码(例如“ host=node1 dbname=repmgr user=repmgr password=foo”)
  • 将密码导出为环境变量 ( PGPASSWORD)
  • 将密码存储在专用密码文件中

我们强烈建议不要在字符串conninfo中包含密码,因为这将导致数据库密码在各个地方暴露,包括文件 repmgr.confrepmgr.nodes表、由repmgr生成的列出节点conninfo字符串的任何输出(例如 repmgr cluster show)和在repmgr日志文件中,特别是在log_level=DEBUG.

将密码导出为环境变量 ( PGPASSWORD) 被认为不太不安全,但 PostgreSQL 文档明确建议不要这样做:

管理密码最安全的选择是使用专用密码文件

存储密码的最安全方法是存储在密码文件中,默认情况下为~/.pgpass. 该文件只能由拥有该文件的系统用户读取,并且  PostgreSQL 将拒绝使用该文件,除非将读/写权限限制为文件所有者。文件中包含的密码将不会被 repmgr(或任何其他基于 libpq 的客户端软件,例如psql)直接访问。

有关完整详细信息,请参阅 PostgreSQL 密码文件文档。

为了与repmgr 一起使用,~/.pgpass复制集群中的每个节点必须有两个条目:一个用于访问repmgr元数据库的repmgr用户,另一个用于复制连接(无论是否使用专用复制用户)。该文件必须存在于复制集群中的每个节点上。

被repmgr管理的3节点的PG集群 文件示例 :

node1:5432:repmgr:repmgr:foo
node1:5432:replication:repmgr:foo
node2:5432:repmgr:repmgr:foo
node2:5432:replication:repmgr:foo
node3:5432:repmgr:repmgr:foo
node3:5432:replication:repmgr:foo

1.6 完整的配置文件

https://raw.githubusercontent.com/EnterpriseDB/repmgr/master/repmgr.conf.sample

相关文章:

【PG】PostgreSQL高可用方案repmgr管理之配置文件

1 配置文件 1.1 配置文件格式 repmgr.conf是一个纯文本文件,每行包含一个参数/值组合。 空格是无关紧要的(除了在带引号的参数值内),并且空行将被忽略。#将该行的其余部分指定为注释。不是简单标识符或数字的参数值应该用单引号…...

labelme自动标注工具

可以实现多图中相同目标的追踪,自动标注目标位置,速度极快,有需要评论...

【C++学习手札】模拟实现vector

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:くちなしの言葉—みゆな 0:37━━━━━━️💟──────── 5:28 🔄 ◀️ ⏸ ▶️ ☰…...

Python将图片按照表格形式排列

图片按照表格的形式排列,可以使用图像处理库Pillow来实现 事例代码 from PIL import Image, ImageDraw# 创建一个画布,用来存放排列后的图片 canvas Image.new(RGB, (800, 600), white)# 读取图片 im1 Image.open(image1.jpg) im2 Image.open(image…...

Linux 简要命令记录

1、设置时区: #设为上海: timedatectl set-timezone Asia/Shanghai #搜索特定时区 timedatectl list-timezone2、修改时间: #设定系统时间 date -s "2023-11-16 22:30:00" #同步写入BIOS hwclock -w3、fdisk分区 rootheihei:~# …...

深度学习与深度强化学习

1. 深度学习中卷积层的作用是什么?全连接层的作用是什么?二者有什么联系和区别? 在深度学习中,卷积层(Convolutional Layer)和全连接层(Fully Connected Layer)是神经网络中常见的两…...

C++函数重载中形参是引用类型和常量引用类型的调用方法

void fun(int &a) {cout<<"调用func(int &a)<<endl; }void fun(const int &a) {cout<<"调用func(const int &a)<<endl; }int main() {// 1.调用引用类型的函数int a10;func(a);// 2.调用常量引用类型的函数&#xff0c;因为…...

Quest 3期间Sui上游戏处理了数百万笔交易

Sui固有的可扩展性和低且可预测的gas费使其成为Web3游戏的理想平台。在Quest 3中&#xff0c;参与的游戏项目处理了数百万笔交易&#xff0c;这毫无疑问地展示了Sui卓越的能力。 Quest 3的主题是游戏&#xff0c;让开发者有机会向潜在玩家介绍他们激动人心的创作。鼓励这些玩家…...

Python中如何定义类、基类、函数和变量?

在Python中&#xff0c;定义类、基类、函数和变量是非常常见的操作。以下是简单的示例&#xff1a; 定义类&#xff1a; class Animal:def __init__(self, name):self.name namedef make_sound(self):passclass Dog(Animal):def make_sound(self):return "Woof!"上…...

打开文件 和 文件系统的文件产生关联

补充1&#xff1a;硬件级别磁盘和内存之间数据交互的基本单位 OS的内存管理 内存的本质是对数据临时存/取&#xff0c;把内存看成很大的缓冲区 物理内存和磁盘交互的单位是4KB&#xff0c;磁盘中未被打开的文件数据块也是4KB&#xff0c;所以磁盘中页帧也是4KB&#xff0c;内存…...

【Rust】快速教程——模块mod与跨文件

前言 道尊&#xff1a;没有办法&#xff0c;你的法力已经消失&#xff0c;我的法力所剩无几&#xff0c;除非咱们重新修行&#xff0c;在这个世界里取得更多法力之后&#xff0c;或许有办法下降。——《拔魔》 \;\\\;\\\; 目录 前言跨文件mod多文件mod 跨文件mod //my_mod.rs…...

crontab定时任务是否执行

centos查看 crontab 是否启动 systemctl status crond.service 查看cron服务的启动状态 systemctl start crond.service 启动cron服务[命令没有提示] systemctl stop crond.service 停止cron服务[命令没有提示] systemctl restart crond.service 重启cron服务[命令没有提示] s…...

MATLAB程序设计:牛顿迭代法

function xnewton(x0,e,N,fx) %输入x0,误差限e,迭代次数N和函数Fx k1; while k<Nif subs(diff(fx),x0)0disp("输出奇异标志");break;endx1x0-subs(fx,x0)/subs(diff(fx),x0);if abs(x1-x0)<ebreak;endx0x1;kk1; end if k<Ndisp(x1); elsedisp("迭代失败…...

B031-网络编程 Socket Http TomCat

目录 计算机网络网络编程相关术语IP地址ip的概念InerAdress的了解与测试 端口URLTCP、UDP和7层架构TCPUDPTCP与UDP的区别和联系TCP的3次握手七层架构 Socket编程服务端代码客户端代码 http协议概念Http报文 Tomcat模拟 计算机网络 见文档 网络编程相关术语 见文档 IP地址 …...

gRPC之metadata

1、metadata 服务间使用 Http 相互调用时&#xff0c;经常会设置一些业务自定义 header 如时间戳、trace信息等&#xff0c;gRPC使用 HTTP/2 协议自然也是支持的&#xff0c;gRPC 通过 google.golang.org/grpc/metadata 包内的 MD 类型提供相关的功能接口。 1.1 类型定义 /…...

【OpenCV实现图像:OpenCV进行OCR字符分割】

文章目录 概要基本概念读入图像图像二值化小结 概要 在处理OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;时&#xff0c;利用传统的图像处理方法进行字符切分仍然是一种有效的途径。即便当前计算机视觉领域主导的是卷积神经网络&#xf…...

景联文科技入选量子位智库《中国AIGC数据标注产业全景报告》数据标注行业代表机构

量子位智库《中国AIGC数据标注产业全景报告》中指出&#xff0c;数据标注处于重新洗牌时期&#xff0c;更高质量、专业化的数据标注成为刚需。未来五年&#xff0c;国内AI基础数据服务将达到百亿规模&#xff0c;年复合增长率在27%左右。 基于数据基础设施建设、大模型/AI技术理…...

ClickHouse SQL操作

基本上来说传统关系型数据库&#xff08;以MySQL为例&#xff09;的SQL语句&#xff0c;ClickHouse基本都支持&#xff0c;这里不会从头讲解SQL语法只介绍ClickHouse与标准SQL&#xff08;MySQL&#xff09;不一致的地方。 1 Insert 基本与标准SQL&#xff08;MySQL&#xff09…...

Ubuntu安装Python环境(使用VSCode)

想在Ubuntu上安装Python环境&#xff0c;选择了VSCode&#xff0c;而不想多装Anaconda等环境&#xff0c;最后参考了这篇博客&#xff1a; python入门开发:ubuntu下搭建python开发环境(vscode)...

QTcpSocket发送结构体的做法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> QTcpSocket发送结构体其实很简单:使用QByteArray类对象进行封装发送&#xff0c;示例代码如下&#xff1a; /* 消息结构体 */ struct stMsg {int m_A…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...