我正在尝试创建PostgreSQL - Etcd - Patroni(PEP)集群。互联网上有很多例子,我创造了一个,它运行得很完美。然而,这种架构应该符合我公司的备份解决方案,即NetApp。我们使用“选择pg_start_backup('test_ backup ',true)”将数据库放入备份模式,然后将所有数据文件复制到备份目录中。
PEP集群在这个解决方案中有一个小问题。备份运行良好,但恢复点不是很好。为了恢复PEP集群的领导者,我需要停止数据库,然后将备份文件移动到数据目录,最后启动恢复。此时Patroni说恢复节点是一个新的集群。以下是错误:
raise PatroniFatalException('Failed to bootstrap cluster')
patroni.exceptions.PatroniFatalException: 'Failed to bootstrap cluster'
2022-04-11 12:49:29,930 INFO: No PostgreSQL configuration items changed, nothing to reload.
2022-04-11 12:49:29,942 INFO: Lock owner: None; I am pgsql_node1
2022-04-11 12:49:29,962 INFO: trying to bootstrap a new cluster
The files belonging to this database system will be owned by user "postgres".
另外,当我检查赞助人集群状态时,我看到了以下内容:
root@4cddca032454:/data/backup# patronictl -c /etc/patroni/config.yml list
+ Cluster: pgsql (7085327534197401486) --------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+-------------+------------+---------+---------+----+-----------+
| pgsql_node1 | 172.17.0.6 | Replica | stopped | | unknown |
| pgsql_node2 | 172.17.0.7 | Replica | running | 11 | 0 |
| pgsql_node3 | 172.17.0.8 | Replica | running | 11 | 0 |
+-------------+------------+---------+---------+----+-----------+
在这一点上,我有一个PEP集群没有领导者。那么,我该如何解决这个问题呢?
(注意:恢复节点试图加入右集群,因为在启动恢复之前,我检查群集状态并得到以下结果:
root@4cddca032454:/data/backup# patronictl -c /etc/patroni/config.yml list
+ Cluster: pgsql (7085327534197401486) --------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+-------------+------------+---------+---------+----+-----------+
| pgsql_node2 | 172.17.0.7 | Replica | running | 11 | 0 |
| pgsql_node3 | 172.17.0.8 | Replica | running | 11 | 0 |
+-------------+------------+---------+---------+----+-----------+
pgsql_node1不在那里。
)
正如这里所解释的,"https://patroni.readthedocs.io/en/latest/existing_data.html#existing-data“我可以在恢复之后创建一个新的集群,但是我的优先级可以保存这个集群。还是我想错了,所有这些步骤在将独立的PostgreSQL数据库转换为PEP集群时都是一样的?
如果您需要任何数据或其他不清楚的信息,请告诉我。
以下是我的领导节点赞助人配置文件:
scope: "cluster"
namespace: "/cluster/"
name: 8d454a228d251
restapi:
listen: 172.17.0.2:8008
connect_address: 172.17.0.2:8008
etcd:
host: 172.17.0.2:2379
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
check_timeline: true
postgresql:
use_pg_rewind: true
remove_data_directory_on_rewind_failure: true
remove_data_directory_on_diverged_timelines: true
use_slots: true
postgresql:
listen: 0.0.0.0:5433
connect_address: 172.17.0.2:5432
use_unix_socket: true
data_dir: /data/postgresql/
bin_dir: /usr/lib/postgresql/14/bin
config_dir: /etc/postgresql/14/main
authentication:
replication:
username: "patroni_replication"
password: "123123"
superuser:
username: "patroni_superuser"
password: "123123"
parameters:
unix_socket_directories: '/var/run/postgresql/'
logging_collector: 'on'
log_directory: '/var/log/postgresql'
log_filename: 'postgresql-14-8d454a228d25.log'
restore_command: 'cp /data/backup/%f %p'
recovery_target_timeline: 'latest'
promote_trigger_file: '/tmp/promote'
谢谢!
发布于 2022-04-14 10:27:48
如果我完全理解,您想要还原主服务器(领导者),用一组新的备份文件恢复数据目录。
在完成领导者数据目录中的还原之后,您需要使用patronictl选项重新创建赞助人集群(删除DCS中的键)。
示例:
停止pgsql_node2
停止pgsql_node3
停止pgsql_node1
在pgsql_node1上:
-c /etc/ remove /config.yml移除
启动pgsql_node1
启动pgsql_node2
启动pgsql_node3
https://stackoverflow.com/questions/71869481
复制相似问题