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

相关文章:

  • 读书充电,温暖你的冬日。不可错过的10本架构师必读书籍
  • CCF编程能力等级认证GESP—C++4级—样题1
  • 【KCC@南京】KCC南京数字经济-开源行
  • C++实现高频设计模式
  • Docker(1)
  • 高教社杯数模竞赛特辑论文篇-2023年A题:基于机理分析法的定日镜场优化设计模型(附获奖论文及MATLAB代码实现)
  • 足跟痛筋膜炎最佳的治疗
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • Vue3+TS+Node打造个人博客(前端架构)
  • centOs 6.10 编译 qt 5.15.11
  • MobileSAM论文笔记
  • React Virtual DOM及Diff算法
  • 人工智能基础_机器学习033_多项式回归升维_多项式回归代码实现_非线性数据预测_升维后的数据对非线性数据预测---人工智能工作笔记0073
  • 池化层是有什么作用
  • Redis - 订阅发布替换 Etcd 解决方案
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • android 一些 utils
  • AngularJS指令开发(1)——参数详解
  • Centos6.8 使用rpm安装mysql5.7
  • JavaScript-Array类型
  • JAVA多线程机制解析-volatilesynchronized
  • Map集合、散列表、红黑树介绍
  • node入门
  • React 快速上手 - 07 前端路由 react-router
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 当SetTimeout遇到了字符串
  • 对象引论
  • 排序(1):冒泡排序
  • 前言-如何学习区块链
  • 区块链共识机制优缺点对比都是什么
  • 深入浅出Node.js
  • 【云吞铺子】性能抖动剖析(二)
  • MPAndroidChart 教程:Y轴 YAxis
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 整理一些计算机基础知识!
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​queue --- 一个同步的队列类​
  • ​业务双活的数据切换思路设计(下)
  • (27)4.8 习题课
  • (Java)【深基9.例1】选举学生会
  • (多级缓存)缓存同步
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (一)插入排序
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)linux下的时间函数使用
  • (转)winform之ListView
  • (转载)利用webkit抓取动态网页和链接
  • ****Linux下Mysql的安装和配置
  • .aanva
  • .net Stream篇(六)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题