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

Patroni配置文件1-动态配置

动态配置存储在DCS(分布式配置存储)中,并应用于所有集群节点。

要更改动态配置,您可以使用patronictl edit-config工具或Patroni REST API。

  • loop_wait:循环将休眠的秒数。默认值:10,最小值:1

  • ttl:获取领导者锁(Leader Lock)的生存时间(TTL,以秒为单位)。可以将其视为自动故障转移过程启动前的时长。默认值:30,最小值:20

  • retry_timeout:DCS和PostgreSQL操作重试的超时时间(以秒为单位)。如果DCS或网络问题的时间短于这个值,则不会导致Patroni降级领导者。默认值:10,最小值:3

注意

当修改loop_wait, ttl,retry_timeout值时 ,必须遵循以下原则:

loop_wait + 2 * retry_timeout <= ttl
  • maximum_lag_on_failover:在领导者选举中,跟随者可以落后的最大字节数,以使其有资格参与选举。

  • maximum_lag_on_syncnode:同步跟随者可以落后的最大字节数,超过此值则它将被视为不健康的候选者,并被健康的异步跟随者替换。如果有多个跟随者,Patroni会使用最大的副本LSN(日志序列号),否则它将使用领导者的当前WAL(写前日志)LSN。默认值为-1,当此值设置为0或以下时,Patroni不会采取行动来替换不健康的同步跟随者。请将此值设置得足够高,以避免在高交易量期间Patroni频繁地替换同步跟随者。

  • max_timelines_history:DCS中保留的时间线历史记录项目的最大数量。默认值为0,当设置为0时,它会在DCS中保留完整的历史记录。

  • primary_start_timeout:在触发故障转移之前,主节点允许从故障中恢复的时间量(以秒为单位)。默认值为300秒。当设置为0时,如果检测到崩溃,则尽可能立即进行故障转移。在使用异步复制时,故障转移可能会导致事务丢失。主节点故障的最坏情况故障转移时间为:loop_wait + primary_start_timeout + loop_wait,除非primary_start_timeout为0,此时仅为loop_wait。请根据持久性和可用性之间的权衡来设置此值。

  • primary_stop_timeout:当停止Postgres时,Patroni允许等待的秒数,此设置仅在启用同步模式时有效。当设置为大于0且同步模式启用时,如果停止操作运行的时间超过由primary_stop_timeout设置的值,Patroni将向postgres主进程发送SIGKILL信号。请根据持久性和可用性之间的权衡来设置此值。如果未设置此参数或设置的值小于等于0,则primary_stop_timeout不适用。

  • synchronous_mode:启用同步复制模式。可能的值:off(关闭)、on(开启)、quorum(仲裁)。在此模式下,领导者负责同步备用名称的管理,并且只有最后一个已知的领导者或同步副本之一被允许参与领导者竞争。同步模式确保成功提交的事务在故障转移时不会丢失,但代价是当Patroni无法确保事务持久性时,写操作的可用性会丢失。有关详细信息,请参阅复制模式文档。

  • synchronous_mode_strict:如果没有可用的同步副本,则阻止禁用同步复制,并阻止所有客户端向主节点写入。有关详细信息,请参阅复制模式文档。

  • synchronous_node_count:如果启用了同步模式,Patroni将使用此参数来管理同步备用实例的确切数量,并在成员加入和离开时调整DCS中的状态和PostgreSQL中的synchronous_standby_names参数。如果将此参数设置为高于合格节点的数量,它将自动调整。默认值为1。

  • failsafe_mode:启用DCS故障安全模式。默认为false。

  • postgresql:

  • use_pg_rewind:是否使用pg_rewind。默认值为false。请注意,集群必须使用数据页校验和(通过initdb的--data-checksums选项)进行初始化,或者必须将wal_log_hints设置为on,否则pg_rewind将无法工作。

  • use_slots:是否使用复制槽。在PostgreSQL 9.4及以上版本中,默认值为true。

  • recovery_conf:在配置跟随者时写入recovery.conf的附加配置设置。在PostgreSQL 12中已不存在recovery.conf,但您仍可以继续使用此部分,因为Patroni会透明地处理它。

  • parameters:Postgres的配置参数(GUCs),格式为{max_connections: 100, wal_level: "replica", max_wal_senders: 10, wal_log_hints: "on"}。其中许多参数是复制工作所必需的。

  • pg_hba:Patroni将用于生成pg_hba.conf的行列表。如果hba_file PostgreSQL参数设置为非默认值,Patroni将忽略此参数。

  • host all all 0.0.0.0/0 md5:允许所有用户从任意地址通过md5加密方式连接。

  • host replication replicator 127.0.0.1/32 md5:复制连接所需的行,允许名为replicator的用户从本地主机通过md5加密方式进行复制连接。

  • pg_ident:Patroni将用于生成pg_ident.conf的行列表。如果ident_file PostgreSQL参数设置为非默认值,Patroni将忽略此参数。

  • mapname1 systemname1 pguser1:将系统名systemname1映射到pguser1用户。

  • mapname1 systemname2 pguser2:将系统名systemname2映射到pguser2用户。

  • standby_cluster:如果定义了此部分,我们希望引导一个备用集群。

  • host:远程节点的地址。

  • port:远程节点的端口。

  • primary_slot_name:在远程节点上用于复制的槽名称。此参数是可选的,默认值是从实例名称派生(参见函数slot_name_from_member_name)。

  • create_replica_methods:用于从远程主节点引导备用领导者的方法的有序列表,可能与PostgreSQL中定义的列表不同。

  • restore_command:将从远程主节点恢复WAL记录到备用集群中节点的命令,可能与PostgreSQL中定义的列表不同。

  • archive_cleanup_command:备用领导者的清理命令。

  • recovery_min_apply_delay:在备用领导者上实际应用WAL记录之前的等待时间。

  • member_slots_ttl:当副本关闭时,物理复制槽的保留时间。默认值:30分钟。如果您想保留旧行为(当成员密钥从DCS过期时,立即删除槽),请将其设置为0。此功能仅在PostgreSQL 11及更高版本中有效。

  • standby_cluster:如果定义了此部分,我们希望引导(bootstrap)一个备用集群。

  • host:远程节点的地址。

  • port:远程节点的端口。

  • primary_slot_name:在远程节点上用于复制的槽位。此参数是可选的,默认值从实例名称派生(参见函数slot_name_from_member_name)。

  • create_replica_methods:用于从远程主节点引导备用领导者的方法的有序列表,可能与PostgreSQL中定义的列表不同。

  • restore_command:从远程主节点恢复WAL记录到备用集群节点的命令,可能与PostgreSQL中定义的命令不同。

  • archive_cleanup_command:备用领导者的清理命令。

  • recovery_min_apply_delay:在备用领导者上实际应用WAL记录之前要等待的时间。

  • member_slots_ttl:当副本关闭时,物理复制槽的保留时间。默认值:30分钟。如果您想保持旧行为(当成员密钥从DCS过期时,槽位立即被删除),请将其设置为0。此功能仅从PostgreSQL 11开始有效。

  • slots:定义永久复制槽。这些槽位在切换/故障转移期间将被保留。不存在的永久槽将由Patroni创建。从PostgreSQL 11开始,在所有节点上创建永久物理槽,并且其位置每loop_wait秒更新一次。对于PostgreSQL 11之前的版本,永久物理复制槽仅在当前主节点上维护。逻辑槽从主节点复制到备用节点并重启,之后其位置每loop_wait秒(如果需要)更新一次。逻辑槽文件的复制通过libpq连接进行,并使用rewind或超级用户凭据(参见postgresql.authentication部分)。逻辑槽在副本上的位置可能会稍微落后于之前的主节点,因此应用程序应做好准备,在故障转移后可能会再次接收到一些消息。最简单的方法是跟踪confirmed_flush_lsn。启用永久复制槽需要将postgresql.use_slots设置为true。如果定义了永久逻辑复制槽,Patroni将自动启用hot_standby_feedback。由于逻辑复制槽在PostgreSQL 9.6及更早版本上的故障转移不安全,并且PostgreSQL 10缺少一些重要功能,因此此功能仅适用于PostgreSQL 11及以上版本。

  • my_slot_name:永久复制槽的名称。如果永久槽的名称与当前节点的名称匹配,则不会在此节点上创建它。如果您添加了一个名称与Patroni成员名称匹配的永久物理复制槽,Patroni将确保即使对应的成员变得无响应,创建的槽也不会被删除,这通常会导致Patroni删除该槽。虽然这在某些情况下可能很有用,例如当您希望成员使用的复制槽在临时故障期间持续存在或将现有成员导入新的Patroni集群时(请参阅“将独立数据库转换为Patroni集群”以获取详细信息),但操作员应谨慎行事,确保这些名称冲突不会持久保存在DCS中,当槽不再需要时,由于其对Patroni正常功能的影响。

  • type:槽的类型。可以是物理或逻辑。如果槽是逻辑的,您还需要定义数据库和插件。

  • database:应创建逻辑槽的数据库名称。

  • plugin:逻辑槽的插件名称。

  • ignore_slots:这是一个包含复制槽属性集合的列表,Patroni会忽略与这些属性匹配的复制槽。当一些复制槽是在Patroni外部管理时,这个配置/功能等是非常有用的。任何匹配的属性子集都会导致一个复制槽被忽略。

  • name:复制槽的名称。

  • type:槽的类型。可以是物理(physical)或逻辑(logical)。如果槽是逻辑的,你还可以额外定义database(数据库)和/或plugin(插件)。

  • database:数据库名称(在匹配逻辑槽时使用)。

  • plugin:逻辑解码插件(在匹配逻辑槽时使用)。

注意:slots是一个哈希映射(hashmap),而ignore_slots是一个数组。例如:

slots:
  permanent_logical_slot_name:
    type: logical
    database: my_db
    plugin: test_decoding
  permanent_physical_slot_name:
    type: physical
  ...
ignore_slots:
  - name: ignored_logical_slot_name
    type: logical
    database: my_db
    plugin: test_decoding
  - name: ignored_physical_slot_name
    type: physical
  ...

注意:当运行PostgreSQL v11或更高版本时,Patroni会在所有可能成为领导者的节点上维护物理复制槽,以便在其他节点可能需要时,副本节点保留WAL(Write-Ahead Logging,预写日志)段。如果某个节点缺失,并且其在分布式配置存储(DCS)中的成员密钥已过期,那么在该成员密钥的槽生存时间(member_slots_ttl,默认值为30分钟)之后,将删除相应的复制槽。您可以根据需要增加或减少保留时间。另外,如果您的集群拓扑是静态的(节点数量固定且名称永不更改),您可以配置名称与节点名称相对应的永久物理复制槽,以避免在副本暂时关闭时删除复制槽和回收WAL文件:

slots:
  node_name1:
    type: physical
  node_name2:
    type: physical
  node_name3:
    type: physical
  ...

警告

永久复制槽仅从主节点/备用领导节点同步到副本节点。这意味着,应用程序应该仅从领导节点使用它们。如果在副本节点上使用它们,将导致集群中所有其他节点的pg_wal目录无限增长。该规则的一个例外是与Patroni成员名称匹配的物理槽(由Patroni创建和维护)。这些物理槽将在所有节点之间同步,因为它们用于节点之间的复制。

警告

在备用节点上设置nostream标签将禁用该节点本身以及它可能拥有的所有级联副本上永久逻辑复制槽的复制和同步。


http://www.kler.cn/news/341559.html

相关文章:

  • 使用Python实现系统时间跳变检测与日志记录
  • 【斯坦福CS144】Lab7
  • 基于floor函数报错注入sqli-labs less-5和less-6
  • Ajax面试题:(第二天)
  • 毕设分享 基于协同过滤的电影推荐系统
  • 自动化测试框架(全)
  • 2024双十一究竟买什么比较好?为您精选五款双十一必购好物清单!
  • 汽车主机厂主数据管理中一物多码或多码一物问题的具体表现有哪些?
  • 游戏盾是如何解决游戏行业攻击问题
  • LangChain使用few shot template
  • RK3568驱动指南|第十六篇 SPI-第190章 配置模式下寄存器的配置
  • 《Spring Microservices in Action, 2nd Edition》读后总结
  • vue 权限分组
  • 实景三维赋能矿山安全风险监测预警
  • “万万没想到”,“人工智能”获得2024年诺贝尔物理学奖
  • 比较三组迭代次数的变化
  • ElasticSearch之网络配置
  • 独享动态IP是什么?它有什么独特优势吗?
  • 低级语言和高级语言、大小写敏感、静态语言和动态语言、链接
  • ArgoWorkflow教程(六)---无缝实现步骤间参数传递