这是本节的多页打印视图。 .
Patroni 配置
原始页面: https://patroni.readthedocs.io/en/latest/patroni_configuration.html
全局 动态配置。 这些选项存储在 DCS(分布式配置存储)中,并应用于集群的所有节点。动态配置可以随时通过
patronictl edit-config工具或 Patroni REST API 进行设置。如果更改的选项不属于启动配置,它们将异步地(在下一个唤醒周期时)应用到每个节点,随后触发重载。如果节点需要重启才能应用配置(对于上下文为 postmaster 且值已更改的 PostgreSQL 参数),则会在成员数据 JSON 中设置一个特殊标志pending_restart,同时节点状态也会通过"restart_pending": true来体现这一情况。本地 YAML 配置文件(patroni.yml)。 这些选项定义在配置文件中,优先级高于动态配置。
patroni.yml可以在运行时通过向 Patroni 进程发送 SIGHUP 信号、执行POST /reloadREST API 请求或运行patronictl reload来更改和重载(无需重启 Patroni)。本地配置可以是单个 YAML 文件,也可以是一个目录。当配置为目录时,该目录下的所有 YAML 文件会按排序顺序逐个加载。如果某个键在多个文件中定义,以最后一个文件中的值为准。环境变量配置。 可以通过环境变量设置/覆盖部分"本地"配置参数。环境配置在动态环境中非常有用——当某些参数事先无法确定时(例如在
docker容器内运行时无法预知外部 IP 地址)。
重要规则
由 Patroni 控制的 PostgreSQL 参数
某些 PostgreSQL 参数 必须在主库和从库上保持相同的值。对于这些参数,在本地 Patroni 配置文件或通过环境变量设置的值不会生效。要修改或设置这些参数的值,必须通过 DCS 修改共享配置。以下是这类参数的列表,包含默认值和最小值:
max_connections:默认值 100,最小值 25max_locks_per_transaction:默认值 64,最小值 32max_worker_processes:默认值 8,最小值 2max_prepared_transactions:默认值 0,最小值 0wal_level:默认值 hot_standby,可接受值:hot_standby、replica、logicaltrack_commit_timestamp:默认值 off
对于下列参数,PostgreSQL 不要求主库和所有从库的值相同。但考虑到从库随时可能成为主库,将它们设置为不同值实际上没有意义;因此,Patroni 限制只能通过 动态配置 来设置这些参数的值。
max_wal_senders:默认值 10,最小值 3max_replication_slots:默认值 10,最小值 4wal_keep_segments:默认值 8,最小值 1wal_keep_size:默认值 128MB,最小值 16MBwal_log_hints:on
这些参数会经过校验,以确保其合理性或满足最小值要求。
还有一些其他由 Patroni 控制的 Postgres 参数:
listen_addresses- 从postgresql.listen或PATRONI_POSTGRESQL_LISTEN环境变量中设置port- 从postgresql.listen或PATRONI_POSTGRESQL_LISTEN环境变量中设置cluster_name- 从scope或PATRONI_SCOPE环境变量中设置hot_standby: on
为安全起见,上述列表中的参数会被写入 postgresql.conf,并作为参数列表传递给 postgres,赋予其最高优先级(wal_keep_segments 和 wal_keep_size 除外),甚至高于 ALTER SYSTEM。
还有一些参数如 postgresql.listen、postgresql.data_dir,只能在本地设置,即在 Patroni YAML 配置文件 中或通过 环境变量配置 环境变量设置。在大多数情况下,本地配置会覆盖动态配置。
应用本地或动态配置选项时,会执行以下操作:
- 节点首先检查是否存在
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中设置 include 指向基础配置(postgresql.base.conf或custom_conf指定的文件)。这样就能在不重新读取配置文件来检查 include 是否存在的情况下,直接应用新选项。 - 对于 Patroni 管理集群所必需的某些参数,会通过命令行进行覆盖。
- 如果某个需要重启的选项被更改(需查看
pg_settings中的上下文以及这些选项的实际值),则会在该节点上设置pending_restart标志。该标志在任何重启时都会被清除。
参数按以下顺序应用(运行时参数优先级最高):
- 从
postgresql.base.conf文件(或custom_conf文件,如已设置)中加载参数 - 从
postgresql.conf文件中加载参数 - 从
postgresql.auto.conf文件中加载参数 - 使用
-o --name=value传入运行时参数
这种设计允许为所有节点统一配置(2),通过 ALTER SYSTEM 为特定节点配置(3),确保 Patroni 运行所必需的参数得到执行(4),同时为直接管理 postgresql.conf 而不涉及 Patroni 的配置工具预留空间(1)。
影响共享内存的 PostgreSQL 参数
PostgreSQL 有一些参数决定了其使用的共享内存大小:
max_connectionsmax_prepared_transactionsmax_locks_per_transactionmax_wal_sendersmax_worker_processes
更改这些参数需要重启 PostgreSQL 才能生效,且从库上的共享内存结构不能小于主库上的对应结构。
如前所述,Patroni 限制只能通过 动态配置 修改这些参数的值,通常操作流程为:
- 通过
patronictl edit-config(或通过 REST API 的/config端点)应用更改 - 通过
patronictl restart(或通过 REST API 的/restart端点)重启节点
注意: 请记住,应通过 patronictl restart 命令或 REST API 的 /restart 端点来重启 PostgreSQL 节点。尝试通过重启 Patroni 守护进程来重启 PostgreSQL(例如执行 systemctl restart patroni),如果重启的是主库,可能会导致集群发生故障转移。
由于这些设置管理共享内存,重启节点时需要格外注意:
若要 增大 上述任一设置的值:
- 先重启所有从库
- 之后再重启主库
若要 减小 上述任一设置的值:
- 先重启主库
- 之后再重启所有从库
注意: 如果在 减小 上述任一设置值后尝试一次性重启所有节点,Patroni 将忽略该变更并用原始设置值重启从库,从而需要之后再次重启从库。Patroni 这样处理是为了防止从库进入无限崩溃循环,因为如果尝试将上述任一参数设置为低于从库的 pg_controldata 中可见值的值,PostgreSQL 会以 FATAL 消息退出。换句话说,只有当从库的 pg_controldata 与主库关于这些更改保持一致后,才能在从库上减小该设置。
更多信息请参阅 PostgreSQL 管理员概述。
Patroni 配置参数
以下 Patroni 配置选项 只能通过动态配置方式修改:
ttl:30loop_wait:10retry_timeouts:10maximum_lag_on_failover:1048576max_timelines_history:0check_timeline:falsepostgresql.use_slots:true
修改这些选项后,Patroni 会读取存储在 DCS 中的配置相关部分,并更新其运行时值。
Patroni 节点会在每次配置变更时,将 DCS 选项的状态以文件形式写入 Postgres 数据目录中名为 patroni.dynamic.json 的文件。只有主库才被允许在 DCS 中这些选项完全缺失或无效时,从磁盘上的文件恢复这些选项。
配置生成与验证
Patroni 提供了用于生成和验证 Patroni 本地配置文件 的命令行工具。使用 patroni 可执行文件,你可以:
- 生成示例本地 Patroni 配置;
- 为本地运行的 PostgreSQL 实例生成 Patroni 配置文件(例如作为 Patroni 集成 的准备步骤);
- 验证给定的 Patroni 配置文件。
示例 Patroni 配置
说明
以 yaml 格式生成示例 Patroni 配置文件。参数值通过 环境变量配置 定义,如果未设置,则使用 Patroni 的默认值,或对用户需要自行定义的值使用 #FIXME 字符串。
部分默认值根据本地环境确定:
postgresql.listen:当前机器主机名通过gethostname调用返回的 IP 地址,以及标准的5432端口。postgresql.connect_address:当前机器主机名通过gethostname调用返回的 IP 地址,以及标准的5432端口。postgresql.authentication.rewind:仅当能够从二进制文件中确定 PostgreSQL 版本且版本为 11 或更高时才定义。restapi.listen:当前机器主机名通过gethostname调用返回的 IP 地址,以及标准的8008端口。restapi.connect_address:当前机器主机名通过gethostname调用返回的 IP 地址,以及标准的8008端口。
参数
configfile - 用于存储结果的配置文件完整路径。如果不提供,结果将输出到 stdout。
为运行中实例生成 Patroni 配置
说明
为本地运行的 PostgreSQL 实例以 yaml 格式生成 Patroni 配置。将使用提供的 DSN(优先)或 PostgreSQL 环境变量 建立 PostgreSQL 连接。如果未提供密码,则通过提示符输入。
源 Postgres 实例中定义的所有非内部 GUC,无论是通过配置文件、postmaster 命令行还是环境变量设置,都将作为以下 Patroni 配置参数的来源:
scope:cluster_nameGUC 的值;postgresql.listen:listen_addresses和portGUC 的值;postgresql.datadir:data_directoryGUC 的值;postgresql.parameters:archive_command、restore_command、archive_cleanup_command、recovery_end_command、ssl_passphrase_command、hba_file、ident_file、config_fileGUC 的值;bootstrap.dcs:所有其他收集到的 PostgreSQL GUC。
如果 scope、postgresql.listen 或 postgresql.datadir 未能从 Postgres GUC 中设置,则使用相应的 环境变量配置 值。
其他值定义规则:
name:若设置了PATRONI_NAME环境变量则使用该值,否则使用当前机器的主机名。postgresql.bin_dir:从运行中实例收集到的 Postgres 二进制文件路径。postgresql.connect_address:当前机器主机名通过gethostname调用返回的 IP 地址,以及用于实例连接的端口或portGUC 的值。postgresql.authentication.superuser:用于实例连接的配置;postgresql.pg_hba:从源实例的hba_file收集的内容。postgresql.pg_ident:从源实例的ident_file收集的内容。restapi.listen:当前机器主机名通过gethostname调用返回的 IP 地址,以及标准的8008端口。restapi.connect_address:当前机器主机名通过gethostname调用返回的 IP 地址,以及标准的8008端口。
通过 环境变量配置 定义的其他参数也会包含在配置中。
参数
configfile
用于存储结果的配置文件完整路径。如果不提供,结果将输出到 stdout。
dsn
用于从本地 PostgreSQL 实例获取 GUC 值的可选 DSN 字符串。
验证 Patroni 配置
说明
验证给定的 Patroni 配置,并打印失败检查项的相关信息。
参数
configfile
待检查配置文件的完整路径。如果未提供或文件不存在,将尝试从 PATRONI_CONFIG_VARIABLE 环境变量中读取,如果也未设置,则从 Patroni 环境变量 中读取。
--ignore-listen-port | -i
可选标志,在验证 configfile 时忽略已在使用中的 listen 端口的绑定失败。
--print | -p
可选标志,在成功验证后打印本地配置(包含环境配置覆盖项)。
1 - 动态配置
原始页面: https://patroni.readthedocs.io/en/latest/dynamic_configuration.html
动态配置存储在 DCS(分布式配置存储)中,并应用于集群的所有节点。
如需修改动态配置,可使用 patronictl edit-config 工具或 Patroni REST API。
loop_wait:主循环每轮的休眠秒数。默认值:10,最小值:1。ttl:获取领导者锁的 TTL(秒)。可以理解为触发自动故障转移前的等待时长。默认值:30,最小值:20。retry_timeout:DCS 和 PostgreSQL 操作的重试超时时间(秒)。若 DCS 或网络故障时长短于此值,Patroni 不会对主库执行降级。默认值:10,最小值:3。
修改 loop_wait、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 时,保留完整历史记录。primary_start_timeout:主库在触发故障转移之前,允许从故障中恢复的时间(秒)。默认值为 300 秒。设置为 0 时,一旦检测到崩溃就立即执行故障转移(如果可能)。使用异步复制时,故障转移可能导致事务丢失。主库故障时的最长故障转移时间为loop_wait + primary_start_timeout + loop_wait;若primary_start_timeout为零,则仅为loop_wait。请根据持久性与可用性的取舍来设置该值。primary_stop_timeout:Patroni 停止 PostgreSQL 时允许等待的秒数,仅在启用synchronous_mode时生效。当该值大于 0 且启用了同步模式时,若停止操作运行时间超过primary_stop_timeout所设定的值,Patroni 会向 postmaster 发送 SIGKILL 信号。请根据持久性与可用性的取舍来设置该值。若该参数未设置或设置为 <= 0,则不生效。synchronous_mode:启用同步复制模式。可选值:off、on、quorum。在此模式下,主库负责管理synchronous_standby_names,且只有最后已知的领导者或同步从库之一才被允许参与主库竞选。同步模式确保已成功提交的事务在故障转移时不会丢失,代价是当 Patroni 无法保证事务持久性时,写入操作将不可用。详见 复制模式文档。synchronous_mode_strict:当没有可用的同步从库时,禁止关闭同步复制,阻塞所有客户端对主库的写入。详见 复制模式文档。synchronous_node_count:启用synchronous_mode时,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:PostgreSQL 配置参数(GUC),格式为{max_connections: 100, wal_level: "replica", max_wal_senders: 10, wal_log_hints: "on"}。其中许多参数是复制正常工作的必要条件。pg_hba:Patroni 用于生成pg_hba.conf的规则列表。若 PostgreSQL 参数hba_file被设置为非默认值,Patroni 将忽略此参数。- host all all 0.0.0.0/0 md5- host replication replicator 127.0.0.1/32 md5:复制所必需的一行配置。
pg_ident:Patroni 用于生成pg_ident.conf的规则列表。若 PostgreSQL 参数ident_file被设置为非默认值,Patroni 将忽略此参数。- mapname1 systemname1 pguser1- mapname1 systemname2 pguser2
standby_cluster:若定义了此节,表示要引导一个备用集群。host:远端节点的地址。port:远端节点的端口。primary_slot_name:用于复制的远端节点槽名。此参数可选,默认值由实例名称派生(参见函数slot_name_from_member_name)。create_replica_methods:从远端主库引导备用领导者所用方法的有序列表,可与postgresql_settings中定义的列表不同。restore_command:将 WAL 记录从远端主库恢复到备用集群节点的命令,可与postgresql_settings中定义的不同。archive_cleanup_command:备用领导者的归档清理命令。recovery_min_apply_delay:备用领导者实际应用 WAL 记录前的等待时长。
member_slots_ttl:从库关闭后,其物理复制槽的保留时间。默认值:30min。若希望保留旧行为(成员键从 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:槽类型,可为physical或logical。逻辑槽需额外定义database和plugin;物理槽可选择定义cluster_type。database:逻辑槽应创建所在的数据库名称。plugin:逻辑槽使用的插件名称。cluster_type:槽仅应创建于其上的集群类型(primary或standby),否则该槽不会被创建,或已存在的槽将被删除。
ignore_slots:需要 Patroni 忽略的复制槽属性集合列表。当某些复制槽由 Patroni 以外的工具管理时,此配置非常有用。任何属性子集匹配都会导致该槽被忽略。name:复制槽的名称。type:槽类型,可为physical或logical。逻辑槽可额外定义database和/或plugin。database:数据库名称(匹配logical槽时使用)。plugin:逻辑解码插件(匹配logical槽时使用)。
注意:slots 是哈希映射,而 ignore_slots 是数组。示例如下:
注意:当运行 PostgreSQL v11 或更新版本时,Patroni 在所有可能成为领导者的节点上维护物理复制槽,以便从库在其他节点可能需要时保留 WAL 段。若节点缺席且其在 DCS 中的成员键过期,对应的复制槽将在 member_slots_ttl(默认值为 30min)后被删除。可按需调整保留时间。另外,若集群拓扑固定(节点数量和名称不变),可为每个节点配置与节点名对应的永久物理复制槽,避免从库临时下线时槽被删除、WAL 文件被回收:
永久复制槽仅从 primary/standby_leader 同步到从库,因此应用程序应仅在领导者节点上使用它们。在从库上使用永久复制槽会导致集群中所有其他节点的 pg_wal 无限增长。例外情况是与 Patroni 成员名称匹配的物理槽(由 Patroni 创建和维护),这些槽会在所有节点间同步,因为它们用于节点间的复制。
在备库上设置 nostream 标签会禁用该节点自身及其所有级联从库上永久逻辑复制槽的复制和同步。
2 - YAML 配置参数
原始页面: https://patroni.readthedocs.io/en/latest/yaml_configuration.html
全局/通用
name:主机名称,在集群中必须唯一。namespace:Patroni 在配置存储中保存集群信息的路径,默认值为/service。scope:集群名称。
日志
type:设置日志格式,可选plain或json。使用json格式时,必须安装jsonlogger。默认值为plain。level:设置通用日志级别,默认值为INFO(参见 Python logging 文档)。traceback_level:设置显示调用栈跟踪的日志级别,默认值为ERROR。若希望仅在log.level=DEBUG时才输出调用栈,可将其设为DEBUG。format:设置日志格式化字符串。若日志类型为plain,格式应为字符串,可用属性参见 LogRecord 属性。若日志类型为json,格式可以是字符串,也可以是列表——列表中每项对应一个 LogRecord 属性名,只需填写字段名,无需加%(和)。若希望以不同键名输出某个日志字段,可使用字典:键为日志字段名,值为期望在日志中显示的名称。默认值为 %(asctime)s %(levelname)s: %(message)s。dateformat:设置日期时间格式化字符串(参见 formatTime() 文档)。static_fields:向日志中添加额外字段,仅在日志类型设为json时可用。max_queue_size:Patroni 采用两阶段日志记录——日志记录先写入内存队列,由独立线程从队列取出后写入 stderr 或文件。内部队列默认最多保存1000条记录,足以覆盖过去约 1 小时 20 分钟的日志。dir:应用日志的写入目录,该目录必须存在且对运行 Patroni 的用户可写。设置此值后,默认保留 4 个 25MB 的日志文件,可通过file_num和file_size(见下文)调整保留策略。mode:日志文件的权限(例如0644)。若未指定,权限将根据当前 umask 值设置。file_num:保留的应用日志文件数量。file_size:触发日志滚动的 patroni.log 文件大小(单位:字节)。loggers:本节允许按 Python 模块重新定义日志级别:- patroni.postmaster: WARNING
- urllib3: DEBUG
deduplicate_heartbeat_logs:若设为true,连续相同的心跳日志将不再重复输出,默认值为false。
HA 循环的执行时间是诊断因资源耗尽等问题导致故障转移的重要信息。当 deduplicate_heartbeat_logs 设为 true 时,HA 循环的执行日志将不再生成(除非主库发生变更),因此这部分潜在有用的信息将无法从日志中获取。
以下是将 Patroni 配置为 JSON 格式日志的配置示例:
引导配置
一旦 Patroni 完成集群的首次初始化并将配置写入 DCS,此后对 YAML 配置文件中 bootstrap.dcs 节所做的任何修改将不再生效!如需更改,请使用 patronictl edit-config 或 Patroni REST API。
bootstrap:dcs:本节内容将在新集群初始化完成后写入配置存储的 /<namespace>/<scope>/config,作为集群的全局动态配置。可将 动态配置参数 中描述的任意参数放在bootstrap.dcs下,Patroni 完成集群引导后会将本节写入该路径。method:用于引导本集群的自定义脚本。详见 自定义引导方法文档。指定
initdb时将回退到默认的initdb命令;配置文件中不存在method参数时同样触发initdb。initdb:(可选)传递给 initdb 的选项列表。- data-checksums:在 PostgreSQL 9.3 上使用 pg_rewind 时必须启用。- encoding: UTF8:新数据库的默认编码。- locale: UTF8:新数据库的默认区域设置。
post_bootstrap或post_init:集群初始化完成后执行的附加脚本。脚本接收一个以集群超级用户为用户名的连接字符串 URL,pgpass 文件路径通过 PGPASSFILE 环境变量传入。
Citus
启用 Patroni 与 Citus 的集成。配置后,Patroni 将负责在协调节点上注册 Citus 工作节点。关于 Citus 支持的更多信息,参见 此处。
group:Citus 组 ID,整数类型。协调节点使用0,工作节点使用1、2等。database:应创建citus扩展的数据库,协调节点和所有工作节点必须相同,目前仅支持一个数据库。
Consul
大多数参数为可选,但必须指定 host 或 url 之一。
host:Consul 本地代理的 host:port。url:Consul 本地代理的 URL,格式为 http(s)://host:port。port:(可选)Consul 端口。scheme:(可选)http或https,默认为http。token:(可选)ACL 令牌。verify:(可选)是否验证 HTTPS 请求的 SSL 证书。cacert:(可选)CA 证书文件,设置后将启用验证。cert:(可选)客户端证书文件。key:(可选)客户端密钥文件,若密钥已包含在cert中则可为空。dc:(可选)通信的数据中心,默认使用当前主机所在的数据中心。consistency:(可选)选择 Consul 一致性模式,可选值为default、consistent或stale(详见 Consul API 参考)。checks:(可选)用于会话的 Consul 健康检查列表,默认为空列表。register_service:(可选)是否注册以 scope 参数命名的服务,并根据节点角色标记为 master、primary、replica 或 standby-leader,默认为false。service_tags:(可选)除角色标签(primary/replica/standby-leader)外,要添加到 Consul 服务的额外静态标签,默认为空列表。service_check_interval:(可选)对已注册 URL 执行健康检查的频率,默认为5s。service_check_tls_server_name:(可选)通过 TLS 连接时覆盖 SNI 主机名,参见 Consul agent check API 参考。
token 需要具备以下 ACL 权限:
service_prefix "${scope}" {
policy = "write"
}
key_prefix "${namespace}/${scope}" {
policy = "write"
}
session_prefix "" {
policy = "write"
}
Etcd
大多数参数为可选,但必须指定 host、hosts、url、proxy 或 srv 之一。
host:etcd 端点的 host:port。hosts:etcd 端点列表,格式为 host1:port1,host2:port2 等,可以是逗号分隔的字符串,也可以是 YAML 列表。use_proxies:若设为 true,Patroni 将把hosts视为代理列表,不再对 etcd 集群进行拓扑发现。url:etcd 的 URL。proxy:etcd 的代理 URL,若通过代理连接 etcd,请使用此参数而非url。srv:用于集群自动发现的 SRV 记录搜索域。Patroni 将按以下顺序查询指定域的 SRV 服务名,找到第一个有效结果即止:_etcd-client-ssl、_etcd-client、_etcd-ssl、_etcd、_etcd-server-ssl、_etcd-server。若查到_etcd-server-ssl或_etcd-server的 SRV 记录,将通过 ETCD peer 协议查询可用成员;否则直接使用 SRV 记录中的主机。srv_suffix:配置用于自动发现时 SRV 查询名称的后缀,可在同一域下区分多个 etcd 集群,仅与srv联用。例如,设置srv_suffix: foo且srv: example.org时,将发起_etcd-client-ssl-foo._tcp.example.com等 DNS SRV 查询(所有可能的 ETCD SRV 服务名均以相同方式处理)。protocol:(可选)http 或 https,未指定时默认使用 http。若已指定url或proxy,则从中获取协议。username:(可选)etcd 认证的用户名。password:(可选)etcd 认证的密码。cacert:(可选)CA 证书文件,设置后将启用验证。cert:(可选)客户端证书文件。key:(可选)客户端密钥文件,若密钥已包含在cert中则可为空。
Etcdv3
若要让 Patroni 通过协议版本 3 与 Etcd 集群通信,在 Patroni 配置文件中使用 etcd3 节即可,所有配置参数与 etcd 相同。
使用协议版本 2 创建的键在版本 3 中不可见,反之亦然,因此不能仅通过更新 Patroni 配置文件来从 etcd 切换到 etcd3。此外,Patroni 使用 Etcd 的 gRPC-gateway(代理)与 V3 API 通信,这意味着不支持 TLS 通用名称认证。
ZooKeeper
hosts:ZooKeeper 集群成员列表,格式为 。use_ssl:(可选)是否使用 SSL,默认为false。若为false,所有 SSL 相关参数将被忽略。cacert:(可选)CA 证书文件,设置后将启用验证。cert:(可选)客户端证书文件。key:(可选)客户端密钥文件。key_password:(可选)客户端密钥密码。verify:(可选)是否验证证书,默认为true。set_acls:(可选)若设置,Kazoo 将对其创建的每个 ZNode 应用默认 ACL。ACL 以字典形式指定,键为完整主体(可选带模式前缀),值为权限列表。支持x509模式(默认)或其他 ZooKeeper 支持的模式(如digest)。权限可以是CREATE、READ、WRITE、DELETE、ADMIN或ALL之一或多个。示例:set_acls: {CN=principal1: [CREATE, READ], digest:principal2:+pjROuBuuwNNSujKyH8dGcEnFPQ=: [ALL]}。auth_data:(可选)连接使用的认证凭据,应以字典形式指定,键为scheme,值为credential,默认为空字典。
需要安装 kazoo>=2.6.0 以支持 SSL。
Exhibitor
hosts:Exhibitor(ZooKeeper)节点的初始列表,格式为 ‘host1,host2,etc…’,当 Exhibitor(ZooKeeper)集群拓扑变化时自动更新。poll_interval:从 Exhibitor 更新 ZooKeeper 和 Exhibitor 节点列表的频率。port:Exhibitor 端口。
Kubernetes
bypass_api_service:(可选)与 Kubernetes API 通信时,Patroni 通常依赖kubernetes服务——该服务地址通过KUBERNETES_SERVICE_HOST环境变量暴露给 Pod。若将bypass_api_service设为true,Patroni 将解析该服务背后的 API 节点列表并直接连接。namespace:(可选)Patroni Pod 运行所在的 Kubernetes namespace,默认值为default。labels:格式为{label1: value1, label2: value2}的标签,用于查找与当前集群关联的已有对象(Pod 及 Endpoints 或 ConfigMaps),Patroni 也会将这些标签设置到其创建的每个对象(Endpoint 或 ConfigMap)上。scope_label:(可选)包含集群名称的标签名,默认值为cluster-name。bootstrap_labels:(可选)格式为{label1: value1, label2: value2}的标签,当 Patroni Pod 处于initializing new cluster、running custom bootstrap script、starting after custom bootstrap或creating replica状态时,这些标签将被分配给该 Pod。role_label:(可选)包含角色(primary、replica或其他自定义值)的标签名,Patroni 会在其运行的 Pod 上设置此标签,默认值为role。leader_label_value:(可选)Postgres 角色为primary时 Pod 标签的值,默认值为primary。follower_label_value:(可选)Postgres 角色为replica时 Pod 标签的值,默认值为replica。standby_leader_label_value:(可选)Postgres 角色为standby_leader时 Pod 标签的值,默认值为primary。tmp_role_label:(可选)包含临时角色(primary或replica)的标签名,此标签的值始终使用对应角色的默认值,仅在必要时设置。use_endpoints:(可选)若设为 true,Patroni 将使用 Endpoints 而非 ConfigMaps 进行主库选举和集群状态保存。pod_ip:(可选)运行 Patroni 的 Pod 的 IP 地址。启用use_endpoints时必须提供,用于在该 Pod 上的 PostgreSQL 被提升时填充领导者 Endpoint 的子集。ports:(可选)若 Service 对象为端口指定了名称,Endpoint 对象中也必须出现相同名称,否则服务将无法工作。例如,若服务定义为{Kind: Service, spec: {ports: [{name: postgresql, port: 5432, targetPort: 5432}]}},则须设置kubernetes.ports: [{"name": "postgresql", "port": 5432}],Patroni 将用它更新领导者 Endpoint 的子集。此参数仅在kubernetes.use_endpoints已设置时生效。cacert:(可选)用于验证 Kubernetes API SSL 证书的受信任 CA 证书包文件,若未提供,Patroni 将使用 ServiceAccount secret 中的值。retriable_http_codes:(可选)需要重试的 K8s API HTTP 状态码列表。默认情况下,Patroni 在收到500、503、504响应,或 K8s API 响应包含retry-afterHTTP 头时自动重试。
Raft(已弃用)
self_addr:用于 Raft 连接监听的ip:port,self_addr必须可从集群其他节点访问。若未设置,该节点将不参与共识。bind_addr:(可选)用于 Raft 连接监听的ip:port,若未指定则使用self_addr。partner_addrs:集群中其他 Patroni 节点的列表,格式为。
data_dir:存储 Raft 日志和快照的目录,若未指定则使用当前工作目录。password:(可选)使用指定密码加密 Raft 流量,需要cryptographyPython 模块。关于 Raft 实现的简短 FAQ:
问:如何列出所有参与共识的节点?
答:
syncobj_admin -conn host:port -status,其中 host:port 为集群某个节点的地址。问:某个参与共识的节点已下线,且我无法为其他节点复用相同 IP,如何将其从共识中移除?
答:
syncobj_admin -conn host:port -remove host2:port2,其中host2:port2为要移除的节点地址。问:从哪里获取
syncobj_admin工具?答:它随
pysyncobj模块(Python RAFT 实现,Patroni 的依赖项)一同安装。问:是否可以在不加入共识的情况下运行 Patroni 节点?
答:可以,只需在 Patroni 配置中注释掉或删除
raft.self_addr。问:是否可以只在两个节点上运行 Patroni 和 PostgreSQL?
答:可以,在第三个节点上运行
patroni_raft_controller(不含 Patroni 和 PostgreSQL)。这种部署方式下,临时失去一个节点不会影响主库。
PostgreSQL
postgresql:authentication:superuser:username:超级用户名,在初始化(initdb)时设置,后续由 Patroni 用于连接 PostgreSQL。password:超级用户密码,在初始化(initdb)时设置。sslmode:(可选)映射到 sslmode 连接参数,允许客户端指定与服务器的 TLS 协商模式,默认模式为prefer。sslkey:(可选)映射到 sslkey 连接参数,指定与客户端证书配套的私钥位置。sslpassword:(可选)映射到 sslpassword 连接参数,指定sslkey中私钥的密码。sslcert:(可选)映射到 sslcert 连接参数,指定客户端证书的位置。sslrootcert:(可选)映射到 sslrootcert 连接参数,指定包含一个或多个受信任 CA 证书的文件位置,客户端将用其验证服务器证书。sslcrl:(可选)映射到 sslcrl 连接参数,指定证书吊销列表文件的位置,客户端将拒绝连接证书出现在该列表中的服务器。sslcrldir:(可选)映射到 sslcrldir 连接参数,指定包含证书吊销列表文件的目录位置,客户端将拒绝连接证书出现在该列表中的服务器。sslnegotiation:(可选)映射到 sslnegotiation 连接参数,控制在使用 SSL 时与服务器协商 SSL 加密的方式。gssencmode:(可选)映射到 gssencmode 连接参数,决定是否以及以何种优先级与服务器建立安全的 GSS TCP/IP 连接。channel_binding:(可选)映射到 channel_binding 连接参数,控制客户端对通道绑定的使用。
replication:username:复制用户名,在初始化时创建,从库通过流复制连接复制源时使用该用户。password:复制用户密码,在初始化时创建。sslmode:(可选)映射到 sslmode 连接参数,默认模式为prefer。sslkey:(可选)映射到 sslkey 连接参数,指定与客户端证书配套的私钥位置。sslpassword:(可选)映射到 sslpassword 连接参数,指定sslkey中私钥的密码。sslcert:(可选)映射到 sslcert 连接参数,指定客户端证书的位置。sslrootcert:(可选)映射到 sslrootcert 连接参数,指定包含一个或多个受信任 CA 证书的文件位置。sslcrl:(可选)映射到 sslcrl 连接参数,指定证书吊销列表文件的位置。sslcrldir:(可选)映射到 sslcrldir 连接参数,指定包含证书吊销列表文件的目录位置。sslnegotiation:(可选)映射到 sslnegotiation 连接参数,控制在使用 SSL 时协商 SSL 加密的方式。gssencmode:(可选)映射到 gssencmode 连接参数,决定是否以及以何种优先级建立安全的 GSS TCP/IP 连接。channel_binding:(可选)映射到 channel_binding 连接参数,控制客户端对通道绑定的使用。
rewind:username:(可选)用于pg_rewind的用户名,在初始化 PostgreSQL 11+ 时创建,并授予所有必要的 权限。password:(可选)用于pg_rewind的用户密码,在初始化时创建。sslmode:(可选)映射到 sslmode 连接参数,默认模式为prefer。sslkey:(可选)映射到 sslkey 连接参数,指定与客户端证书配套的私钥位置。sslpassword:(可选)映射到 sslpassword 连接参数,指定sslkey中私钥的密码。sslcert:(可选)映射到 sslcert 连接参数,指定客户端证书的位置。sslrootcert:(可选)映射到 sslrootcert 连接参数,指定包含一个或多个受信任 CA 证书的文件位置。sslcrl:(可选)映射到 sslcrl 连接参数,指定证书吊销列表文件的位置。sslcrldir:(可选)映射到 sslcrldir 连接参数,指定包含证书吊销列表文件的目录位置。sslnegotiation:(可选)映射到 sslnegotiation 连接参数,控制在使用 SSL 时协商 SSL 加密的方式。gssencmode:(可选)映射到 gssencmode 连接参数,决定是否以及以何种优先级建立安全的 GSS TCP/IP 连接。channel_binding:(可选)映射到 channel_binding 连接参数,控制客户端对通道绑定的使用。
callbacks:在特定操作时运行的回调脚本,Patroni 会将操作名称、角色和集群名称作为参数传入(可参考 scripts/aws.py 作为示例)。on_reload:触发配置重载时运行此脚本。on_restart:Postgres 重启时(不改变角色)运行此脚本。on_role_change:Postgres 被提升或降级时运行此脚本。on_start:Postgres 启动时运行此脚本。on_stop:Postgres 停止时运行此脚本。
connect_address:其他节点和应用程序访问 Postgres 所用的 IP 地址和端口。proxy_address:与 PostgreSQL 并行运行的连接池(如 pgbouncer)的可访问 IP 地址和端口,该值以proxy_url的形式写入 DCS 成员键,可用于服务发现。create_replica_methods:创建新从库所用方法的有序列表,basebackup为默认方法,其余方法视为脚本,每个脚本需作为独立配置节进行配置。详见 自定义从库创建方法文档。data_dir:Postgres 数据目录的位置,可以是 已有目录 或由 Patroni 初始化的目录。config_dir:Postgres 配置目录的位置,默认为数据目录,必须对 Patroni 可写。bin_dir:(可选)PostgreSQL 可执行文件(pg_ctl、initdb、pg_controldata、pg_basebackup、postgres、pg_isready、pg_rewind)的路径。若未提供或为空字符串,将使用 PATH 环境变量查找可执行文件。bin_name:(可选)若使用自定义 Postgres 发行版,可用此选项覆盖 Postgres 二进制文件名:pg_ctl:(可选)pg_ctl的自定义名称。initdb:(可选)initdb的自定义名称。pgcontroldata:(可选)pg_controldata的自定义名称。pg_basebackup:(可选)pg_basebackup的自定义名称。postgres:(可选)postgres的自定义名称。pg_isready:(可选)pg_isready的自定义名称。pg_rewind:(可选)pg_rewind的自定义名称。
listen:PostgreSQL 监听的 IP 地址和端口,使用流复制时必须可从集群其他节点访问。支持多个逗号分隔的地址,端口附加在最后一个地址之后,例如listen: 127.0.0.1,127.0.0.2:5432。Patroni 将使用列表中的第一个地址建立到 PostgreSQL 节点的本地连接。use_unix_socket:指定 Patroni 优先使用 Unix 套接字连接 PostgreSQL,默认值为false。若已定义unix_socket_directories,Patroni 将从中选取第一个合适的路径用于连接,无合适值时回退到 TCP。若postgresql.parameters中未指定unix_socket_directories,Patroni 将假设使用默认值并在连接参数中省略host。use_unix_socket_repl:指定 Patroni 优先使用 Unix 套接字建立复制用户连接,默认值为false,行为与use_unix_socket相同。pgpass:.pgpass 密码文件的路径。Patroni 在执行 pg_basebackup、post_init 脚本及其他某些情况下会创建此文件,该路径必须对 Patroni 可写。recovery_conf:配置从库时写入 recovery.conf 的附加配置项。custom_conf:可选的自定义postgresql.conf文件路径,将代替postgresql.base.conf使用。该文件必须存在于所有集群节点上且对 PostgreSQL 可读,实际的postgresql.conf将从其所在位置包含该文件。注意 Patroni 不会监控此文件的变更,也不会备份它,但其中的设置仍可被 Patroni 自身的配置机制覆盖,详见 动态配置。parameters:Postgres 的配置参数(GUC),格式为{ssl: "on", ssl_cert_file: "cert_file"}。pg_hba:Patroni 用于生成pg_hba.conf的行列表。若 PostgreSQL 的hba_file参数设为非默认值,Patroni 将忽略此参数。与 动态配置 配合使用,可简化pg_hba.conf的管理。- host all all 0.0.0.0/0 md5- host replication replicator 127.0.0.1/32 md5:复制所需的规则行。
pg_ident:Patroni 用于生成pg_ident.conf的行列表。若 PostgreSQL 的ident_file参数设为非默认值,Patroni 将忽略此参数。与 动态配置 配合使用,可简化pg_ident.conf的管理。- mapname1 systemname1 pguser1- mapname1 systemname2 pguser2
pg_ctl_timeout:pg_ctl 执行start、stop或restart时的等待时长,默认值为 60 秒。use_pg_rewind:当旧主库以从库身份重新加入集群时,尝试对其执行 pg_rewind。需要集群在初始化时启用了data page checksums(initdb的--data-checksums选项)或将wal_log_hints设为on,否则 pg_rewind 无法正常工作。rewind:(可选)传递给pg_rewind的自定义选项,可以是字符串列表和/或单键值字典。以下选项不允许使用:target-pgdata、source-pgdata、source-server、write-recovery-conf、dry-run、restore-target-wal、config-file、no-ensure-shutdown、version和help。使用示例:YAMLremove_data_directory_on_rewind_failure:启用后,若 pg_rewind 失败,Patroni 将删除 PostgreSQL 数据目录并重新创建从库;否则将尝试跟随新主库,默认值为false。remove_data_directory_on_diverged_timelines:若 Patroni 检测到时间线出现分歧,且旧主库无法从新主库开始流复制,则删除 PostgreSQL 数据目录并重新创建从库。此选项在无法使用pg_rewind时很有用。在 PostgreSQL v10 及更早版本上进行时间线分歧检查时,Patroni 将尝试使用复制凭据连接 “postgres” 数据库,因此 pg_hba.conf 中必须允许此类访问。默认值为false。replica_method:对于create_replica_methods中除basebackup外的每种方法,需添加同名配置节。该节至少须包含command字段,指向实际执行脚本的完整路径,其余配置参数将以parameter=value的形式传递给脚本。pre_promote:故障转移期间在获取领导者锁之后、提升从库之前执行的隔离脚本。若脚本以非零退出码退出,Patroni 将放弃提升并从 DCS 中移除领导者键。before_stop:在停止 PostgreSQL 之前立即执行的脚本。与回调不同,此脚本同步运行,会阻塞关闭流程直到脚本完成。脚本的返回码不影响后续关闭操作的执行。
REST API
restapi:connect_address:访问 Patroni REST API 所用的 IP 地址(或主机名)和端口。集群中所有成员必须能够访问此地址,因此除非 Patroni 仅用于本地演示,否则不能使用回环地址(如 “localhost” 或 “127.0.0.1”)。该地址可作为 HTTP 健康检查端点(详见下文 REST API 的 “listen” 参数),也用于用户查询(直接访问或通过 REST API)以及集群成员在主库选举期间的健康检查(例如,判断当前主库是否仍在运行,或是否存在 WAL 位置超前于查询节点的节点)。connect_address写入 DCS 的成员键,从而可通过成员名称解析出其 REST API 连接地址。listen:Patroni 监听 REST API 请求的 IP 地址(或主机名)和端口,同样提供上述健康检查与集群节点间通信功能,也可为 HAProxy 等支持 HTTPOPTIONS或GET检查的负载均衡器提供健康检查端点。authentication:(可选)username:用于保护不安全 REST API 端点的 Basic-auth 用户名。password:用于保护不安全 REST API 端点的 Basic-auth 密码。
certfile:(可选)PEM 格式的证书文件,若未指定或留空,API 服务器将在无 SSL 的情况下工作。keyfile:(可选)PEM 格式的私钥文件。keyfile_password:(可选)用于解密 keyfile 的密码。cafile:(可选)包含受信任 CA 证书的 CA_BUNDLE 文件,用于验证客户端证书。ciphers:(可选)允许的密码套件(例如 “ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1”)。verify_client:(可选)none(默认)、optional或required。none时不检查客户端证书;required时所有 REST API 调用均需提供客户端证书;optional时仅对不安全的 REST API 端点要求客户端证书。使用required时,证书签名验证通过即视为认证成功;使用optional时,仅对PUT、POST、PATCH和DELETE请求检查客户端证书。allowlist:(可选)允许调用不安全 REST API 端点的主机列表,每个元素可以是主机名、IP 地址或 CIDR 格式的网络地址,默认允许所有来源。一旦设置了allowlist或allowlist_include_members,不在列表中的请求将被拒绝。allowlist_include_members:(可选)若设为true,DCS 中已注册的其他集群成员(IP 地址或主机名取自成员的api_url)也被允许访问不安全 REST API 端点。注意操作系统可能为出站连接使用不同的 IP 地址。http_extra_headers:(可选)允许 REST API 服务器在 HTTP 响应中传递额外信息的 HTTP 头。https_extra_headers:(可选)启用 TLS 时,允许 REST API 服务器在 HTTP 响应中传递额外信息的 HTTPS 头,同时也会传递http_extra_headers中设置的额外信息。request_queue_size:(可选)Patroni REST API 使用的 TCP 套接字请求队列大小,队列满后新请求将收到 “Connection denied” 错误,默认值为 5。server_tokens:(可选)配置ServerHTTP 头的值:Minimal:头部仅包含 Patroni 版本,例如Patroni/4.0.0。ProductOnly:头部仅包含产品名称,例如Patroni。Original(默认):头部显示原始行为,包含 BaseHTTP 和 Python 版本,例如BaseHTTP/0.6 Python/3.12.3。
以下是 http_extra_headers 和 https_extra_headers 的配置示例:
Warning
restapi.connect_address必须可从该 Patroni 集群的所有节点访问。Patroni 在主库竞选期间会在内部使用它来查找复制延迟最小的节点。- 若启用了客户端证书验证(
restapi.verify_client设为required),还 必须 在ctl.certfile、ctl.keyfile、ctl.keyfile_password中提供有效的客户端证书,否则 Patroni 将无法正常工作。
CTL
ctl:(可选)authentication:username:访问受保护 REST API 端点的 Basic-auth 用户名。若未提供,patronictl将使用 REST API 的 “username” 参数值。password:访问受保护 REST API 端点的 Basic-auth 密码。若未提供,patronictl将使用 REST API 的 “password” 参数值。
insecure:允许在不验证 SSL 证书的情况下连接 REST API。cacert:用于验证 REST API SSL 证书的 CA_BUNDLE 文件或受信任 CA 证书目录,若未提供,patronictl将使用 REST API 的 “cafile” 参数值。certfile:PEM 格式的客户端证书文件。keyfile:PEM 格式的客户端私钥文件。keyfile_password:用于解密客户端 keyfile 的密码。
Watchdog
mode:off、automatic或required。off时禁用 watchdog;automatic时如有可用的 watchdog 则启用,否则忽略;required时节点必须在 watchdog 成功启用后才能成为主库。device:watchdog 设备路径,默认为/dev/watchdog。safety_margin:watchdog 触发与领导者键过期之间的安全边距(秒)。
标签(Tags)
clonefrom:true或false。若设为true,其他节点在引导时可能优先从此节点克隆(pg_basebackup)。若多个节点的clonefrom均为true,将随机选择引导源节点,默认值为false。noloadbalance:true或false。若设为true,该节点在GET /replicaREST API 健康检查时将返回 HTTP 503,从而被排除在负载均衡之外,默认为false。replicatefrom:另一个从库的名称,用于支持级联复制。nosync:true或false。若设为true,该节点永远不会被选为同步从库。sync_priority:整数,控制synchronous_mode设为on时此节点在同步从库选择中的优先级,数值越高越优先。若sync_priority为 0 或负数,该节点不会被写入synchronous_standby_names参数(效果类似于nosync: true)。注意此参数的含义与pg_stat_replication视图中报告的sync_priority值相反。nofailover:true或false,控制此节点是否允许参与主库竞选,默认为false,即此节点 可以 参与主库竞选。failover_priority:整数,控制此节点在故障转移时的优先级。在接收/回放相同 WAL 量的前提下,优先级高的节点优先被选为新主库;但无论优先级高低,接收/回放 LSN 更大的节点始终优先。若failover_priority为 0 或负数,该节点不允许参与主库竞选(效果类似于nofailover: true)。已知限制:failover_priority目前不支持 基于法定人数的同步复制。nostream:true或false。若设为true,该节点将不使用复制协议流式传输 WAL,而依赖归档恢复(需配置restore_command)和pg_wal/pg_xlog轮询。同时将禁用该节点本身及其所有级联从库上永久逻辑复制槽的复制与同步,在主库上设置此标签无效。
nofailover 和 failover_priority 只能提供其中一个。nofailover: true 等同于 failover_priority: 0,而 nofailover: false 将给予节点优先级 1。
除这些预定义标签外,还可以添加自定义标签:
key1:truekey2:falsekey3:1.4key4:"RandomString"
标签在 REST API 和 patronictl list 中均可查看。也可通过这些标签检查实例的健康状态——若某个实例未定义该标签,或对应值与查询值不匹配,将返回 HTTP 503。
3 - 环境变量
原始页面: https://patroni.readthedocs.io/en/latest/ENVIRONMENT.html
可以使用系统环境变量覆盖 Patroni 配置文件中定义的部分配置参数。本文档列出了 Patroni 处理的所有环境变量。通过环境变量设置的值始终优先于配置文件中的值。
全局/通用
PATRONI_CONFIGURATION:可通过PATRONI_CONFIGURATION环境变量为 Patroni 提供完整配置。设置此变量后,其他所有环境变量将被忽略!PATRONI_NAME:运行当前 Patroni 实例的节点名称,在集群内必须唯一。PATRONI_NAMESPACE:Patroni 在配置存储中保存集群信息的路径。默认值:"/service"。PATRONI_SCOPE:集群名称。
日志
PATRONI_LOG_TYPE:日志格式,可为plain或json。使用json格式需要安装jsonlogger。默认值为plain。PATRONI_LOG_LEVEL:全局日志级别。默认值为INFO(参见 Python logging 文档)。PATRONI_LOG_TRACEBACK_LEVEL:显示 traceback 的日志级别。默认值为ERROR。若希望仅在PATRONI_LOG_LEVEL=DEBUG时才显示 traceback,可将其设置为DEBUG。PATRONI_LOG_FORMAT:日志格式化字符串。若日志类型为plain,格式应为字符串,可用属性参见 LogRecord 属性文档。若日志类型为json,格式除字符串外还可以是列表,每个列表项对应一个 LogRecord 属性,只需填写字段名,省略%(和)。若希望以不同键名输出某个字段,可使用字典,键为日志字段名,值为希望在日志中显示的字段名。默认值为 %(asctime)s %(levelname)s: %(message)s。PATRONI_LOG_DATEFORMAT:日期时间格式化字符串(参见 formatTime() 文档)。PATRONI_LOG_STATIC_FIELDS:为日志添加额外字段,仅在日志类型为json时可用。示例:PATRONI_LOG_STATIC_FIELDS="{app: patroni}"。PATRONI_LOG_MAX_QUEUE_SIZE:Patroni 采用两步日志记录机制。日志记录先写入内存队列,由独立线程从队列中取出后写入 stderr 或文件。内存队列容量默认限制为1000条,足以保留过去约 1 小时 20 分钟的日志。PATRONI_LOG_DIR:应用程序日志的写入目录。该目录必须已存在且对运行 Patroni 的用户可写。设置此变量后,默认保留 4 个 25MB 的日志文件,可通过PATRONI_LOG_FILE_NUM和PATRONI_LOG_FILE_SIZE调整(见下文)。PATRONI_LOG_MODE:日志文件权限(例如0644)。若未指定,将基于当前 umask 值设置。PATRONI_LOG_FILE_NUM:保留的应用程序日志文件数量。PATRONI_LOG_FILE_SIZE:触发日志滚动的 patroni.log 文件大小(字节)。PATRONI_LOG_LOGGERS:按 Python 模块重新定义日志级别。示例:PATRONI_LOG_LOGGERS="{patroni.postmaster: WARNING, urllib3: DEBUG}"。PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS:设置为true时,连续且内容相同的心跳日志不再重复输出。默认值为false。
HA 循环的执行时间是诊断资源耗尽等问题所致故障转移的重要信息。将 PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS 设置为 true 后,HA 循环执行将不产生日志(除非领导者发生变化),导致这些潜在有用的信息无法从日志中获取。
Citus
启用 Patroni 与 Citus 的集成。配置后,Patroni 将负责在协调器上注册 Citus 工作节点。更多关于 Citus 支持的信息请参阅 此处。
PATRONI_CITUS_GROUP:Citus 组 ID,整数类型。协调器使用0,工作节点使用1、2等。PATRONI_CITUS_DATABASE:应创建citus扩展的数据库,协调器和所有工作节点上必须相同。目前仅支持一个数据库。
Consul
PATRONI_CONSUL_HOST:Consul 本地代理的 host:port。PATRONI_CONSUL_URL:Consul 本地代理的 URL,格式为:http(s)://host:port。PATRONI_CONSUL_PORT:(可选)Consul 端口。PATRONI_CONSUL_SCHEME:(可选)http或https,默认为http。PATRONI_CONSUL_TOKEN:(可选)ACL 令牌。PATRONI_CONSUL_VERIFY:(可选)是否对 HTTPS 请求验证 SSL 证书。PATRONI_CONSUL_CACERT:(可选)CA 证书文件,存在时将启用验证。PATRONI_CONSUL_CERT:(可选)包含客户端证书的文件。PATRONI_CONSUL_KEY:(可选)包含客户端密钥的文件。若密钥已包含在证书中,可留空。PATRONI_CONSUL_DC:(可选)通信目标数据中心,默认使用主机所在的数据中心。PATRONI_CONSUL_CONSISTENCY:(可选)Consul 一致性模式,可选值为default、consistent或stale(详见 Consul API 参考)。PATRONI_CONSUL_CHECKS:(可选)用于会话的 Consul 健康检查列表,默认使用空列表。PATRONI_CONSUL_REGISTER_SERVICE:(可选)是否注册以 scope 参数命名的服务,并根据节点角色添加 master、primary、replica 或 standby-leader 标签。默认为false。PATRONI_CONSUL_SERVICE_TAGS:(可选)除角色标签(primary/replica/standby-leader)外,向 Consul 服务添加的额外静态标签,默认使用空列表。PATRONI_CONSUL_SERVICE_CHECK_INTERVAL:(可选)对已注册 URL 执行健康检查的频率。PATRONI_CONSUL_SERVICE_CHECK_TLS_SERVER_NAME:(可选)通过 TLS 连接时覆盖 SNI 主机名,另见 Consul agent check API 参考。
Etcd
PATRONI_ETCD_PROXY:etcd 的代理 URL。若通过代理连接 etcd,请使用此参数而非PATRONI_ETCD_URL。PATRONI_ETCD_URL:etcd 的 URL,格式为:http(s)://(username:password@)host:port。PATRONI_ETCD_HOSTS:etcd 端点列表,格式为 ‘host1:port1’,‘host2:port2’ 等。PATRONI_ETCD_USE_PROXIES:若设置为 true,Patroni 将把hosts视为代理列表,不执行 etcd 集群的拓扑发现,直接使用固定的hosts列表。PATRONI_ETCD_PROTOCOL:http 或 https,未指定时使用 http。若指定了url或proxy,将从中提取协议。PATRONI_ETCD_HOST:etcd 端点的 host:port。PATRONI_ETCD_SRV:用于集群自动发现的 SRV 记录搜索域。Patroni 将按以下顺序查询指定域的 SRV 服务名(直到第一次成功):_etcd-client-ssl、_etcd-client、_etcd-ssl、_etcd、_etcd-server-ssl、_etcd-server。若检索到_etcd-server-ssl或_etcd-server的 SRV 记录,则使用 ETCD peer 协议查询可用成员;否则使用 SRV 记录中的主机。PATRONI_ETCD_SRV_SUFFIX:发现期间查询的 SRV 名称后缀,用于区分同一域下的多个 etcd 集群,仅与PATRONI_ETCD_SRV联合使用时生效。例如,设置PATRONI_ETCD_SRV_SUFFIX=foo和PATRONI_ETCD_SRV=example.org后,将进行如下 DNS SRV 查询:_etcd-client-ssl-foo._tcp.example.com(以及所有其他可能的 ETCD SRV 服务名)。PATRONI_ETCD_USERNAME:etcd 认证用户名。PATRONI_ETCD_PASSWORD:etcd 认证密码。PATRONI_ETCD_CACERT:CA 证书文件,存在时将启用验证。PATRONI_ETCD_CERT:包含客户端证书的文件。PATRONI_ETCD_KEY:包含客户端密钥的文件。若密钥已包含在证书中,可留空。
Etcdv3
Etcdv3 的环境变量名与 Etcd 类似,只需将变量名中的 ETCD 替换为 ETCD3 即可。例如:PATRONI_ETCD3_HOST、PATRONI_ETCD3_CACERT 等。
使用协议版本 2 创建的键在协议版本 3 中不可见,反之亦然,因此无法仅通过更新 Patroni 配置来从 Etcd 切换到 Etcdv3。此外,Patroni 使用 Etcd 的 gRPC 网关(代理)与 V3 API 通信,这意味着不支持 TLS 通用名称认证。
ZooKeeper
PATRONI_ZOOKEEPER_HOSTS:ZooKeeper 集群成员的逗号分隔列表,格式为:'host1:port1','host2:port2','etc...'。每一项均须加引号!PATRONI_ZOOKEEPER_USE_SSL:(可选)是否启用 SSL,默认为false。设置为false时,所有 SSL 相关参数将被忽略。PATRONI_ZOOKEEPER_CACERT:(可选)CA 证书文件,存在时将启用验证。PATRONI_ZOOKEEPER_CERT:(可选)包含客户端证书的文件。PATRONI_ZOOKEEPER_KEY:(可选)包含客户端密钥的文件。PATRONI_ZOOKEEPER_KEY_PASSWORD:(可选)客户端密钥密码。PATRONI_ZOOKEEPER_VERIFY:(可选)是否验证证书,默认为true。PATRONI_ZOOKEEPER_SET_ACLS:(可选)若设置,将配置 Kazoo 为其创建的每个 ZNode 应用默认 ACL。ACL 可使用x509模式(默认)或其他受支持的 ZooKeeper 方案(如digest)。应以字典形式指定,键为完整主体名称(可选择性地添加方案前缀),值为权限列表。权限可为CREATE、READ、WRITE、DELETE、ADMIN或ALL中的一个或多个。示例:set_acls: {CN=principal1: [CREATE, READ], digest:principal2:+pjROuBuuwNNSujKyH8dGcEnFPQ=: [ALL]}。PATRONI_ZOOKEEPER_AUTH_DATA:(可选)连接认证凭据,应为字典形式,scheme为键,credential为值,默认为空字典。
需要安装 kazoo>=2.6.0 以支持 SSL。
Exhibitor
PATRONI_EXHIBITOR_HOSTS:Exhibitor(ZooKeeper)节点的初始列表,格式为:‘host1,host2,etc…’。每当 Exhibitor(ZooKeeper)集群拓扑变化时,该列表会自动更新。PATRONI_EXHIBITOR_PORT:Exhibitor 端口。
Kubernetes
PATRONI_KUBERNETES_BYPASS_API_SERVICE:(可选)与 Kubernetes API 通信时,Patroni 通常依赖kubernetes服务,该服务的地址通过KUBERNETES_SERVICE_HOST环境变量暴露给 Pod。若将此参数设置为true,Patroni 将解析该服务后端的 API 节点列表并直接与之连接。PATRONI_KUBERNETES_NAMESPACE:(可选)Patroni Pod 所在的 Kubernetes 命名空间,默认值为default。PATRONI_KUBERNETES_LABELS:格式为{label1: value1, label2: value2}的标签。用于查找与当前集群关联的现有对象(Pod 以及 Endpoint 或 ConfigMap),Patroni 也会将它们设置在所创建的每个对象(Endpoint 或 ConfigMap)上。PATRONI_KUBERNETES_SCOPE_LABEL:(可选)包含集群名称的标签名,默认值为cluster-name。PATRONI_KUBERNETES_BOOTSTRAP_LABELS:(可选)格式为{label1: value1, label2: value2}的标签。当 Patroni Pod 的状态为initializing new cluster、running custom bootstrap script、starting after custom bootstrap或creating replica时,这些标签将被分配给该 Pod。PATRONI_KUBERNETES_ROLE_LABEL:(可选)包含角色(primary、replica或其他自定义值)的标签名。Patroni 会在其运行的 Pod 上设置此标签,默认值为role。PATRONI_KUBERNETES_LEADER_LABEL_VALUE:(可选)Postgres 角色为primary时 Pod 标签的值,默认值为primary。PATRONI_KUBERNETES_FOLLOWER_LABEL_VALUE:(可选)Postgres 角色为replica时 Pod 标签的值,默认值为replica。PATRONI_KUBERNETES_STANDBY_LEADER_LABEL_VALUE:(可选)Postgres 角色为standby_leader时 Pod 标签的值,默认值为primary。PATRONI_KUBERNETES_TMP_ROLE_LABEL:(可选)包含临时角色(primary或replica)的标签名。该标签的值始终使用对应角色的默认值,仅在必要时设置。PATRONI_KUBERNETES_USE_ENDPOINTS:(可选)若设置为 true,Patroni 将使用 Endpoint 而非 ConfigMap 进行领导者选举和保存集群状态。PATRONI_KUBERNETES_POD_IP:(可选)Patroni 所在 Pod 的 IP 地址。启用PATRONI_KUBERNETES_USE_ENDPOINTS时必填,用于在 Pod 的 PostgreSQL 被提升时填充领导者 Endpoint 的子集。PATRONI_KUBERNETES_PORTS:(可选)若 Service 对象为端口命名,则 Endpoint 对象中也必须出现相同名称,否则服务将无法工作。例如,若 Service 定义为{Kind: Service, spec: {ports: [{name: postgresql, port: 5432, targetPort: 5432}]}},则必须设置PATRONI_KUBERNETES_PORTS='[{"name": "postgresql", "port": 5432}]',Patroni 将使用该值更新领导者 Endpoint 的子集。此参数仅在设置了PATRONI_KUBERNETES_USE_ENDPOINTS时生效。PATRONI_KUBERNETES_CACERT:(可选)指定包含受信任 CA 证书的 CA_BUNDLE 文件,用于验证 Kubernetes API SSL 证书。若未提供,Patroni 将使用 ServiceAccount Secret 中的值。PATRONI_RETRIABLE_HTTP_CODES:(可选)需要重试的 K8s API HTTP 状态码列表。默认情况下,Patroni 在收到500、503、504时重试,或在 K8s API 响应包含retry-afterHTTP 头时重试。
Raft(已弃用)
PATRONI_RAFT_SELF_ADDR:监听 Raft 连接的ip:port,必须可从集群的其他节点访问。若未设置,该节点将不参与共识。PATRONI_RAFT_BIND_ADDR:(可选)监听 Raft 连接的ip:port,若未指定,将使用self_addr。PATRONI_RAFT_PARTNER_ADDRS:集群中其他 Patroni 节点的列表,格式为"'ip1:port1','ip2:port2'"。每一项均须加引号!PATRONI_RAFT_DATA_DIR:存储 Raft 日志和快照的目录,若未指定,使用当前工作目录。PATRONI_RAFT_PASSWORD:(可选)使用指定密码加密 Raft 流量,需要安装 Python 的cryptography模块。
PostgreSQL
PATRONI_POSTGRESQL_LISTEN:PostgreSQL 监听的 IP 地址和端口。支持多个逗号分隔的地址,端口须附加在最后一个地址后并以冒号分隔,例如listen: 127.0.0.1,127.0.0.2:5432。Patroni 将使用列表中的第一个地址建立到 PostgreSQL 节点的本地连接。PATRONI_POSTGRESQL_CONNECT_ADDRESS:其他节点和应用程序访问 PostgreSQL 所用的 IP 地址和端口。PATRONI_POSTGRESQL_PROXY_ADDRESS:运行于 PostgreSQL 旁侧的连接池(如 pgbouncer)的可访问 IP 地址和端口。该值以proxy_url的形式写入 DCS 中的成员键,可用于服务发现。PATRONI_POSTGRESQL_DATA_DIR:PostgreSQL 数据目录的位置,可以是已有目录,也可以是由 Patroni 初始化的目录。PATRONI_POSTGRESQL_CONFIG_DIR:PostgreSQL 配置目录的位置,默认为数据目录,必须对 Patroni 可写。PATRONI_POSTGRESQL_BIN_DIR:PostgreSQL 可执行文件路径(pg_ctl、initdb、pg_controldata、pg_basebackup、postgres、pg_isready、pg_rewind)。默认值为空字符串,表示通过 PATH 环境变量查找可执行文件。PATRONI_POSTGRESQL_BIN_PG_CTL:(可选)pg_ctl可执行文件的自定义名称。PATRONI_POSTGRESQL_BIN_INITDB:(可选)initdb可执行文件的自定义名称。PATRONI_POSTGRESQL_BIN_PG_CONTROLDATA:(可选)pg_controldata可执行文件的自定义名称。PATRONI_POSTGRESQL_BIN_PG_BASEBACKUP:(可选)pg_basebackup可执行文件的自定义名称。PATRONI_POSTGRESQL_BIN_POSTGRES:(可选)postgres可执行文件的自定义名称。PATRONI_POSTGRESQL_BIN_IS_READY:(可选)pg_isready可执行文件的自定义名称。PATRONI_POSTGRESQL_BIN_PG_REWIND:(可选)pg_rewind可执行文件的自定义名称。PATRONI_POSTGRESQL_PGPASS:.pgpass 密码文件的路径。Patroni 在执行 pg_basebackup 及某些其他情况下会创建此文件,该位置必须对 Patroni 可写。PATRONI_REPLICATION_USERNAME:复制用户名,在初始化期间创建,从库将使用此用户通过流复制访问复制源。PATRONI_REPLICATION_PASSWORD:复制密码,在初始化期间创建。PATRONI_REPLICATION_SSLMODE:(可选)映射到 sslmode 连接参数,用于指定客户端与服务器的 TLS 协商模式。各模式详见 PostgreSQL 文档,默认模式为prefer。PATRONI_REPLICATION_SSLKEY:(可选)映射到 sslkey 连接参数,指定与客户端证书配套使用的私钥文件位置。PATRONI_REPLICATION_SSLPASSWORD:(可选)映射到 sslpassword 连接参数,指定PATRONI_REPLICATION_SSLKEY所指定私钥的密码。PATRONI_REPLICATION_SSLCERT:(可选)映射到 sslcert 连接参数,指定客户端证书的文件位置。PATRONI_REPLICATION_SSLROOTCERT:(可选)映射到 sslrootcert 连接参数,指定包含一个或多个 CA 证书的文件位置,客户端用于验证服务器证书。PATRONI_REPLICATION_SSLCRL:(可选)映射到 sslcrl 连接参数,指定包含证书吊销列表的文件位置。客户端将拒绝连接到证书出现在此列表中的任何服务器。PATRONI_REPLICATION_SSLCRLDIR:(可选)映射到 sslcrldir 连接参数,指定包含证书吊销列表文件的目录位置。客户端将拒绝连接到证书出现在此列表中的任何服务器。PATRONI_REPLICATION_SSLNEGOTIATION:(可选)映射到 sslnegotiation 连接参数,控制使用 SSL 时如何与服务器协商 SSL 加密。PATRONI_REPLICATION_GSSENCMODE:(可选)映射到 gssencmode 连接参数,决定是否以及以何种优先级与服务器协商安全的 GSS TCP/IP 连接。PATRONI_REPLICATION_CHANNEL_BINDING:(可选)映射到 channel_binding 连接参数,控制客户端对通道绑定的使用。PATRONI_SUPERUSER_USERNAME:超级用户名,在初始化(initdb)期间设置,之后由 Patroni 用于连接 PostgreSQL,pg_rewind 也使用此用户。PATRONI_SUPERUSER_PASSWORD:超级用户密码,在初始化(initdb)期间设置。PATRONI_SUPERUSER_SSLMODE:(可选)映射到 sslmode 连接参数,用于指定客户端与服务器的 TLS 协商模式。各模式详见 PostgreSQL 文档,默认模式为prefer。PATRONI_SUPERUSER_SSLKEY:(可选)映射到 sslkey 连接参数,指定与客户端证书配套使用的私钥文件位置。PATRONI_SUPERUSER_SSLPASSWORD:(可选)映射到 sslpassword 连接参数,指定PATRONI_SUPERUSER_SSLKEY所指定私钥的密码。PATRONI_SUPERUSER_SSLCERT:(可选)映射到 sslcert 连接参数,指定客户端证书的文件位置。PATRONI_SUPERUSER_SSLROOTCERT:(可选)映射到 sslrootcert 连接参数,指定包含一个或多个 CA 证书的文件位置,客户端用于验证服务器证书。PATRONI_SUPERUSER_SSLCRL:(可选)映射到 sslcrl 连接参数,指定包含证书吊销列表的文件位置。客户端将拒绝连接到证书出现在此列表中的任何服务器。PATRONI_SUPERUSER_SSLCRLDIR:(可选)映射到 sslcrldir 连接参数,指定包含证书吊销列表文件的目录位置。客户端将拒绝连接到证书出现在此列表中的任何服务器。PATRONI_SUPERUSER_SSLNEGOTIATION:(可选)映射到 sslnegotiation 连接参数,控制使用 SSL 时如何与服务器协商 SSL 加密。PATRONI_SUPERUSER_GSSENCMODE:(可选)映射到 gssencmode 连接参数,决定是否以及以何种优先级与服务器协商安全的 GSS TCP/IP 连接。PATRONI_SUPERUSER_CHANNEL_BINDING:(可选)映射到 channel_binding 连接参数,控制客户端对通道绑定的使用。PATRONI_REWIND_USERNAME:(可选)pg_rewind使用的用户名;在 PostgreSQL 11+ 的初始化期间创建,并授予所有必要的 权限。PATRONI_REWIND_PASSWORD:(可选)pg_rewind使用的用户密码,在初始化期间创建。PATRONI_REWIND_SSLMODE:(可选)映射到 sslmode 连接参数,用于指定客户端与服务器的 TLS 协商模式。各模式详见 PostgreSQL 文档,默认模式为prefer。PATRONI_REWIND_SSLKEY:(可选)映射到 sslkey 连接参数,指定与客户端证书配套使用的私钥文件位置。PATRONI_REWIND_SSLPASSWORD:(可选)映射到 sslpassword 连接参数,指定PATRONI_REWIND_SSLKEY所指定私钥的密码。PATRONI_REWIND_SSLCERT:(可选)映射到 sslcert 连接参数,指定客户端证书的文件位置。PATRONI_REWIND_SSLROOTCERT:(可选)映射到 sslrootcert 连接参数,指定包含一个或多个 CA 证书的文件位置,客户端用于验证服务器证书。PATRONI_REWIND_SSLCRL:(可选)映射到 sslcrl 连接参数,指定包含证书吊销列表的文件位置。客户端将拒绝连接到证书出现在此列表中的任何服务器。PATRONI_REWIND_SSLCRLDIR:(可选)映射到 sslcrldir 连接参数,指定包含证书吊销列表文件的目录位置。客户端将拒绝连接到证书出现在此列表中的任何服务器。PATRONI_REWIND_SSLNEGOTIATION:(可选)映射到 sslnegotiation 连接参数,控制使用 SSL 时如何与服务器协商 SSL 加密。PATRONI_REWIND_GSSENCMODE:(可选)映射到 gssencmode 连接参数,决定是否以及以何种优先级与服务器协商安全的 GSS TCP/IP 连接。PATRONI_REWIND_CHANNEL_BINDING:(可选)映射到 channel_binding 连接参数,控制客户端对通道绑定的使用。
REST API
PATRONI_RESTAPI_CONNECT_ADDRESS:访问 REST API 所用的 IP 地址和端口。PATRONI_RESTAPI_LISTEN:Patroni 监听的 IP 地址和端口,用于为 HAProxy 提供健康检查信息。PATRONI_RESTAPI_USERNAME:用于保护不安全 REST API 端点的 Basic-auth 用户名。PATRONI_RESTAPI_PASSWORD:用于保护不安全 REST API 端点的 Basic-auth 密码。PATRONI_RESTAPI_CERTFILE:PEM 格式证书文件。若未指定或留空,API 服务器将在无 SSL 的情况下运行。PATRONI_RESTAPI_KEYFILE:PEM 格式私钥文件。PATRONI_RESTAPI_KEYFILE_PASSWORD:解密 keyfile 的密码。PATRONI_RESTAPI_CAFILE:包含受信任 CA 证书的 CA_BUNDLE 文件,用于验证客户端证书。PATRONI_RESTAPI_CIPHERS:(可选)允许使用的密码套件(例如 “ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1”)。PATRONI_RESTAPI_VERIFY_CLIENT:none(默认)、optional或required。none:不检查客户端证书;required:所有 REST API 调用均须提供客户端证书,证书签名验证通过即认证成功;optional:仅不安全的 REST API 端点需要客户端证书,且只对PUT、POST、PATCH和DELETE请求检查。PATRONI_RESTAPI_ALLOWLIST:(可选)允许调用不安全 REST API 端点的主机集合。单个元素可为主机名、IP 地址或 CIDR 网络地址,默认允许所有来源。若设置了allowlist或allowlist_include_members,不在列表中的请求将被拒绝。PATRONI_RESTAPI_ALLOWLIST_INCLUDE_MEMBERS:(可选)设置为true时,允许从 DCS 中注册的其他集群成员(IP 地址或主机名取自成员的api_url)访问不安全的 REST API 端点。注意:操作系统可能为出站连接使用不同的 IP 地址。PATRONI_RESTAPI_HTTP_EXTRA_HEADERS:(可选)允许 REST API 服务器在 HTTP 响应中附加额外的 HTTP 头信息。PATRONI_RESTAPI_HTTPS_EXTRA_HEADERS:(可选)启用 TLS 时,允许 REST API 服务器在 HTTP 响应中附加额外的 HTTPS 头信息,同时也会附加http_extra_headers中设置的头信息。PATRONI_RESTAPI_REQUEST_QUEUE_SIZE:(可选)Patroni REST API 使用的 TCP 套接字请求队列大小,队列满后后续请求将收到"Connection denied"错误,默认值为 5。PATRONI_RESTAPI_SERVER_TOKENS:(可选)ServerHTTP 头的值。Original(默认)沿用原始行为,显示 BaseHTTP 和 Python 版本,例如BaseHTTP/0.6 Python/3.12.3;Minimal:仅包含 Patroni 版本,例如Patroni/4.0.0;ProductOnly:仅包含产品名称,例如Patroni。
Warning
PATRONI_RESTAPI_CONNECT_ADDRESS必须可从指定 Patroni 集群的所有节点访问。Patroni 在领导者竞选期间会使用该地址查找复制延迟最小的节点。- 若启用了客户端证书验证(
PATRONI_RESTAPI_VERIFY_CLIENT设置为required),还 必须 在PATRONI_CTL_CERTFILE、PATRONI_CTL_KEYFILE、PATRONI_CTL_KEYFILE_PASSWORD中提供 有效的客户端证书,否则 Patroni 将无法正常工作。
CTL
PATRONICTL_CONFIG_FILE:(可选)配置文件的位置。PATRONI_CTL_USERNAME:(可选)访问受保护 REST API 端点的 Basic-auth 用户名。若未提供,patronictl将使用 REST API “username” 参数中的值。PATRONI_CTL_PASSWORD:(可选)访问受保护 REST API 端点的 Basic-auth 密码。若未提供,patronictl将使用 REST API “password” 参数中的值。PATRONI_CTL_INSECURE:(可选)允许在不验证 SSL 证书的情况下连接 REST API。PATRONI_CTL_CACERT:(可选)包含受信任 CA 证书的 CA_BUNDLE 文件或目录,用于验证 REST API SSL 证书。若未提供,patronictl将使用 REST API “cafile” 参数中的值。PATRONI_CTL_CERTFILE:(可选)PEM 格式的客户端证书文件。PATRONI_CTL_KEYFILE:(可选)PEM 格式的客户端私钥文件。PATRONI_CTL_KEYFILE_PASSWORD:(可选)解密客户端 keyfile 的密码。