使用 Patroni 重建损坏的副本(reinit)
PostgreSQLPatroni命令
# Wipe the replica's PGDATA and rebuild it (create_replica_methods: pgbackrest/basebackup):
patronictl -c /etc/patroni/patroni.yml reinit <cluster> <member> --wait --force
# Take the basebackup directly from the leader instead of the backup repository:
patronictl -c /etc/patroni/patroni.yml reinit <cluster> <member> --from-leader --wait --force作用
删除指定副本的数据目录,并按照 Patroni 的 create_replica_methods(pgBackRest restore 或 pg_basebackup)从头重建。
适用场景
当副本因 timeline 不匹配、pg_rewind 失败、WAL 缺失或数据损坏而无法重新加入复制时。
注意
该成员上的所有本地数据都会被删除;请再次确认命令针对的是正确的成员(Patroni 拒绝在 leader 上执行 reinit)。在大型数据库上这可能耗时数小时,并给 leader 增加 I/O/网络负载;期间集群会少一个副本。--from-leader 仅存在于较新的 Patroni 4.x 版本中(用 patronictl reinit --help 检查);它会跳过 create_replica_methods,直接从 leader 执行 pg_basebackup。