目录标题
pg_hba.conf
文件是 PostgreSQL 控制客户端连接的核心配置文件,而在使用 Patroni 的高可用集群中,该文件的管理通常是由 Patroni 自动控制和生成 的,基于 postgres-ha-bootstrap.yaml
中的 pg_hba
配置项。
你问的是:
修改了
/tmp/postgres-ha-bootstrap.yaml
中的pg_hba
配置,/pgdata/data/vastbase-0cd7b32e/pg_hba.conf
文件什么时候会被 Patroni 修改?
回答如下:
✅ 正常情况下,Patroni 修改 pg_hba.conf
的时机有:
-
首次启动集群初始化(bootstrap)时
- 如果是新的数据目录(即
--D /pgdata/data/vastbase-0cd7b32e
还没有初始化),Patroni 会根据 YAML 配置生成pg_hba.conf
。 - 这时会使用你在
postgres-ha-bootstrap.yaml
中配置的pg_hba:
。
- 如果是新的数据目录(即
-
每次 Patroni 启动时
- Patroni 启动后会检查配置中的
pg_hba
和当前的pg_hba.conf
文件是否一致。 - 如果不一致,它会自动重写
pg_hba.conf
文件。 - 所以,只要你修改了
yaml
文件,然后 重启 Patroni,就会触发覆盖。
- Patroni 启动后会检查配置中的
-
在运行时动态变更 Patroni 配置(通过 etcd/consul/DCS)
- 如果你是通过分布式配置系统(如 etcd/consul)运行 Patroni 并在运行时更新了
pg_hba
,它也会同步更新目标节点的pg_hba.conf
。
- 如果你是通过分布式配置系统(如 etcd/consul)运行 Patroni 并在运行时更新了
💡你的场景建议
你修改了:
/tmp/postgres-ha-bootstrap.yaml
但当前 Patroni 是运行中的:
/usr/local/bin/patroni /tmp/postgres-ha-bootstrap.yaml
如果你只修改了 YAML 文件但 没有重启 Patroni,那么:
❌
pg_hba.conf
不会立刻更新,因为 Patroni 并不会实时检测 YAML 文件的变更。
✅ 解决办法:
要让 Patroni 重新读取并写入 pg_hba.conf
,你有两个选择:
方法一:**reload **
patronictl reload <cluster-name>
重载后它会重新读取 YAML 并重写
pg_hba.conf
方法二:手动修改 pg_hba.conf
并 reload PostgreSQL(不推荐)
如果你紧急需要生效,可以修改 pg_hba.conf
后运行:
pg_ctl reload -D /pgdata/data/vastbase-0cd7b32e
但这方式 会在下次 Patroni 重启时被覆盖。
🔍 如何验证 Patroni 是否写入 pg_hba.conf
?
查看 pg_hba.conf
的注释部分,通常会有如下一段:
# Managed by Patroni