### **配置类型及优先级**
1.  **全局动态配置**:存储在DCS(如etcd、ZooKeeper)中,应用于所有集群节点。可通过`patronictl edit-config`或REST API修改。
2.  **本地配置文件 (`patroni.yml`)**:优先级高于动态配置。可运行时重载(发送SIGHUP、POST /reload或`patronictl reload`)。
3.  **环境变量配置**:可覆盖部分本地配置参数,适用于动态环境(如Docker)。

### **PostgreSQL参数管理规则**
- **必须主从一致的参数**(只能通过DCS动态配置修改):
  - `max_connections` (默认100,最小25)
  - `max_locks_per_transaction` (默认64,最小32)
  - `max_worker_processes` (默认8,最小2)
  - `max_prepared_transactions` (默认0,最小0)
  - `wal_level` (默认`hot_standby`)
  - `track_commit_timestamp` (默认`off`)

- **建议主从一致的参数**(也应通过动态配置设置):
  - `max_wal_senders` (默认10,最小3)
  - `max_replication_slots` (默认10,最小4)
  - `wal_keep_segments` (默认8,最小1) / `wal_keep_size` (默认128MB,最小16MB)
  - `wal_log_hints`: `on`

- **Patroni强制设置的参数**(覆盖其他配置):
  - `listen_addresses`, `port`, `cluster_name`, `hot_standby: on`

### **配置应用顺序(优先级从低到高)**
1.  `postgresql.base.conf` 或 `custom_conf` 指定的文件
2.  `postgresql.conf`(包含动态配置)
3.  `postgresql.auto.conf`(ALTER SYSTEM设置)
4.  命令行参数(-o --name=value,最高优先级)

### **涉及共享内存的参数重启注意事项**
影响共享内存的参数(如`max_connections`、`max_wal_senders`等):
- **增加参数值**:先重启所有备节点,再重启主节点。
- **减少参数值**:先重启主节点,再重启所有备节点。
- **重要警告**:必须通过`patronictl restart`或REST API `/restart`端点重启PostgreSQL。**直接重启Patroni服务(如`systemctl restart patroni`)可能导致主节点故障转移。**

### **仅支持动态修改的Patroni配置参数**
- `ttl` (默认30)
- `loop_wait` (默认10)
- `retry_timeout` (默认10)
- `maximum_lag_on_failover` (默认1048576)
- `max_timelines_history` (默认0)
- `check_timeline` (默认false)
- `postgresql.use_slots` (默认true)

### **关键机制**
- **待重启标志**:若需重启PostgreSQL才能应用的配置更改,节点会设置`pending_restart`标志,状态显示`"restart_pending": true`。
- **配置持久化**:节点将DCS中的动态配置状态转储到PostgreSQL数据目录下的`patroni.dynamic.json`文件中。仅领导者允许在DCS中缺少或配置无效时从磁盘恢复这些配置。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐