当前位置: 首页 > 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…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor

1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

起重机起升机构的安全装置有哪些?

起重机起升机构的安全装置是保障吊装作业安全的关键部件&#xff0c;主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理&#xff1a; 一、超载保护装置&#xff08;核心安全装置&#xff09; 1. 起重量限制器 功能&#xff1a;实时监测起升载荷&a…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

基于Python的气象数据分析及可视化研究

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...