上一篇介绍 Patroni 三种类型的配置,今天继续将配置讲完。
本地配置可以是单个 YAML 文件或目录。当它是一个目录时,该目录下的所有 YAML 文件都是按照排序的顺序依次加载。如果在多个文件中定义了一个键,则最后一个文件中的出现优先。
某些 PostgreSQL 参数必须在 master 和 replica 上保持参数值一致。对于这些参数, 在本地 Patroni 配置文件中或通过环境变量设置的值不起作用。要更改或设置这些参数值,必须更改 DCS 中的共享配置。
以下是此类参数的实际列表以及默认值:
max_connections: 100
max_locks_per_transaction: 64
max_worker_processes: 8
max_prepared_transactions: 0
wal_level: hot_standby
wal_log_hints: on
track_commit_timestamp: off
对于下面的参数,PostgreSQL 不要求 master 和所有 replica 之间的值相等。但是,考虑到 replica 随时可能成为 master,将它们设置为不同的值意义不大;因此,Patroni 将其值设置为动态配置。
max_wal_senders: 5
max_replication_slots: 5
wal_keep_segments: 8
wal_keep_size: 128MB
以下是 postgres0.yml 参数所在位置:
这些参数经过验证以确保它们正常或满足最小值,除非特殊保持默认值即可。
还有一些其他 Postgres 参数由 Patroni 控制:
listen_addresses:postgresql.listen 或 PATRONI_POSTGRESQL_LISTEN 环境变量设置
port:postgresql.listen 或 PATRONI_POSTGRESQL_LISTEN 环境变量设置
cluster_name:scope 或 PATRONI_SCOPE 环境变量设置
hot_standby: on
为了安全起见,上述列表中的参数未写入 postgresql.conf 中,而是作为参数列表传递给 pg_ctl start, 它们具有最高优先级,甚至在 ALTER SYSTEM 以上。
应用本地或动态配置选项时,将执行以下操作:
该节点首先检查是否存在 postgresql.base.conf 或是否设置了 custom_conf 参数。
如果设置了 custom_conf 参数,它会将其上指定的文件作为基本配置,忽略 postgresql.base.conf 和 postgresql.conf。
如果 custom_conf 参数未设置且 postgresql.base.conf 存在,则它包含重命名的“原始”配置,并将用作基本配置。
如果没有custom_conf 和postgresql.base.conf,则采用原来的postgresql.conf 并重命名为postgresql.base.conf。
动态选项被转储到 postgresql.conf 中,并且在 postgresql.conf 中将包含设置为使用的基本配置(postgresql.base.conf 或 custom_conf 上的内容)。因此,我们将能够应用新选项而无需重新读取配置文件以检查包含是否存在。
使用命令行覆盖对 Patroni 管理集群必不可少的一些参数。
如果某些需要重新启动的选项发生更改(我们应该查看 pg_settings 中的上下文以及这些选项的实际值),则设置给定节点的 pending_restart 标志。此标志在任何重新启动时都会重置。
执行一下 SQL:
SELECT
name,
setting,
pending_restart
FROM
pg_settings
WHERE
NAME IN (
'max_connections',
'max_locks_per_transaction',
'max_worker_processes',
'max_prepared_transactions',
'wal_level',
'wal_log_hints',
'track_commit_timestamp',
'max_wal_senders',
'max_replication_slots',
'wal_keep_segments',
'listen_addresses',
'port',
'cluster_name',
'hot_standby'
);
结果:
参数将按以下顺序应用(运行时具有最高优先级):
从文件 postgresql.base.conf (或从 custom_conf 文件,如果设置)加载参数
从文件 postgresql.conf 加载参数
从文件 postgresql.auto.conf 加载参数
使用 -o –name=value 设置运行时参数
这允许配置所有节点 (2),使用 ALTER SYSTEM 配置特定节点 (3) 并确保强制执行 Patroni 运行所必需的参数 (4),并为管理 postgresql.conf 的配置工具留出空间。无需 patroni(1) 即可直接配置。
此外,以下 Patroni 配置选项只能动态更改:
ttl: 30
loop_wait: 10
retry_timeouts: 10
maximum_lag_on_failover: 1048576
max_timelines_history: 0
check_timeline: false
postgresql.use_slots: true
更改这些选项后,Patroni 将读取存储在 DCS 中的配置的相关部分并更改其运行时值。