PostgreSQL-Etcd-Patroni集群恢复问题



我正在尝试创建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".

此外,当我检查patroni集群状态时,我看到了这个:

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 |
+-------------+------------+---------+---------+----+-----------+

在这一点上,我有一个没有领导者的政治公众人物集群。那么,我该如何解决这个问题呢?

(注意:恢复节点试图加入右侧集群,因为在开始恢复之前,我检查集群状态,得到的结果是:

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 |
+-------------+------------+---------+---------+----+-----------+

pgsqlnode1不存在。

)

如这里所解释的;https://patroni.readthedocs.io/en/latest/existing_data.html#existing-数据";我可以在恢复后创建一个新的集群,但我的优先级是保存集群。或者我错了,所有这些步骤和将一个独立的PostgreSQL数据库转换为PEP集群是一样的?

如果您需要任何数据或有什么不清楚的地方,请告诉我。

这是我的领导节点patroni配置文件:

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'

谢谢!

如果我很清楚,您希望恢复主服务器(leader(,用一组新的备份文件恢复数据目录。

在leader的数据目录中进行恢复后,您需要使用patronictl remove选项重新创建patroni集群(删除DCS中的密钥(。

示例:

停止pgsql_node2
停止pgsqlnode3
在pgsql_node 1上停止pgsql_node1

patronictl-c/etc/patroni/config.yml remove<clustername>

启动pgsqlnode1
启动pgsql_node2
开始pgsql_node 3

最新更新