【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…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
