【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_id( int)
标识节点的大于零的唯一整数。
node_name( string)
任意(但唯一)字符串;我们建议使用服务器的主机名或与服务器明确关联的其他标识符以避免混淆。避免选择反映节点当前角色的名称,例如,primary或者standby1 因为角色可以更改,并且如果您最终得到调用当前主节点的解决方案standby1(例如),至少可以说事情会很混乱。
该字符串的最大长度为 63 个字符,并且应仅包含可打印的 ASCII 字符。
conninfo( string)
作为 conninfo 字符串的数据库连接信息。集群中的所有服务器都必须能够使用此字符串连接到本地节点。
有关 conninfo 字符串的详细信息,请参阅 PosgreSQL 文档中的 连接字符串部分。
如果正在使用repmgrd,请考虑 connect_timeout在conninfo 字符串中显式设置以确定放弃网络连接尝试之前经过的时间长度;有关详细信息,请参阅 PostgreSQL 文档。
data_directory( string)
节点的数据目录。当 PostgreSQL 实例未运行且没有其他方法确定数据目录时,repmgr 需要执行此操作。
1.4 .2 可选的配置文件
config_directory( string)
postgresql.conf如果 PostgreSQL 配置文件位于数据目录之外,请指定主文件所在 目录 。
这允许显式提供外部配置文件目录,如果设置该目录,则该目录将pg_ctl作为 -D参数传递。否则pg_ctl将默认使用数据目录,如果配置文件不存在,这将导致某些操作失败。
replication_user( string)
与之建立复制连接的 PostgreSQL 用户。如果为设置默认值,则为conninfo中定义的用户
replication_type( string)
必须是physical(默认)。
location( string)
定义节点位置的任意字符串;这在故障转移期间用于检查当前主节点的可见性。
use_replication_slots( boolean)
是否使用物理复制槽。
ssh_options( string)
由repmgrssh执行时 附加到命令的选项。
我们建议添加-q以抑制任何多余的 SSH 聊天(例如登录横幅)以及显式 ConnectTimeout值,例如:
ssh_options='-q -o ConnectTimeout=10' pg_bindir( string)
PostgreSQL 二进制目录的路径(pg_ctl、 pg_basebackup等的位置)。仅当系统中没有这些时才需要PATH。
1.5 日志设置
默认情况下,repmgr和repmgrd将日志输出写入 STDERR. 可以指定替代日志目标(文件或syslog)。
log_level( string)
日志输出的级别,默认为INFO. 可选值:
DEBUG, INFO, NOTICE, WARNING, ERROR, ALERT, CRIT , EMERG.
请注意,这DEBUG将产生大量日志输出,在正常使用中不应启用。
log_facility( string)
日志记录工具: 可选的值有 STDERR(默认),或对于syslog的话,可选的值有 : LOCAL0, LOCAL1, ..., LOCAL7, USER.
log_file( string)
如果log_facility设置为STDERR,则可以将日志输出重定向到指定文件。
有关配置日志轮换的信息, 请参阅第 13.4 节。
log_status_interval( integer)
此设置导致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时。
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以及执行executepg_database_size()在所有的数据库上)pg_read_all_settings(to access thedata_directorysetting)
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.conf、repmgr.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.调用常量引用类型的函数,因为…...
Quest 3期间Sui上游戏处理了数百万笔交易
Sui固有的可扩展性和低且可预测的gas费使其成为Web3游戏的理想平台。在Quest 3中,参与的游戏项目处理了数百万笔交易,这毫无疑问地展示了Sui卓越的能力。 Quest 3的主题是游戏,让开发者有机会向潜在玩家介绍他们激动人心的创作。鼓励这些玩家…...
Python中如何定义类、基类、函数和变量?
在Python中,定义类、基类、函数和变量是非常常见的操作。以下是简单的示例: 定义类: class Animal:def __init__(self, name):self.name namedef make_sound(self):passclass Dog(Animal):def make_sound(self):return "Woof!"上…...
打开文件 和 文件系统的文件产生关联
补充1:硬件级别磁盘和内存之间数据交互的基本单位 OS的内存管理 内存的本质是对数据临时存/取,把内存看成很大的缓冲区 物理内存和磁盘交互的单位是4KB,磁盘中未被打开的文件数据块也是4KB,所以磁盘中页帧也是4KB,内存…...
【Rust】快速教程——模块mod与跨文件
前言 道尊:没有办法,你的法力已经消失,我的法力所剩无几,除非咱们重新修行,在这个世界里取得更多法力之后,或许有办法下降。——《拔魔》 \;\\\;\\\; 目录 前言跨文件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 相互调用时,经常会设置一些业务自定义 header 如时间戳、trace信息等,gRPC使用 HTTP/2 协议自然也是支持的,gRPC 通过 google.golang.org/grpc/metadata 包内的 MD 类型提供相关的功能接口。 1.1 类型定义 /…...
【OpenCV实现图像:OpenCV进行OCR字符分割】
文章目录 概要基本概念读入图像图像二值化小结 概要 在处理OCR(Optical Character Recognition,光学字符识别)时,利用传统的图像处理方法进行字符切分仍然是一种有效的途径。即便当前计算机视觉领域主导的是卷积神经网络…...
景联文科技入选量子位智库《中国AIGC数据标注产业全景报告》数据标注行业代表机构
量子位智库《中国AIGC数据标注产业全景报告》中指出,数据标注处于重新洗牌时期,更高质量、专业化的数据标注成为刚需。未来五年,国内AI基础数据服务将达到百亿规模,年复合增长率在27%左右。 基于数据基础设施建设、大模型/AI技术理…...
ClickHouse SQL操作
基本上来说传统关系型数据库(以MySQL为例)的SQL语句,ClickHouse基本都支持,这里不会从头讲解SQL语法只介绍ClickHouse与标准SQL(MySQL)不一致的地方。 1 Insert 基本与标准SQL(MySQL)…...
Ubuntu安装Python环境(使用VSCode)
想在Ubuntu上安装Python环境,选择了VSCode,而不想多装Anaconda等环境,最后参考了这篇博客: python入门开发:ubuntu下搭建python开发环境(vscode)...
QTcpSocket发送结构体的做法
作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> QTcpSocket发送结构体其实很简单:使用QByteArray类对象进行封装发送,示例代码如下: /* 消息结构体 */ struct stMsg {int m_A…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
