首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PostgreSQL - Etcd - Patroni簇恢复问题

PostgreSQL - Etcd - Patroni簇恢复问题
EN

Stack Overflow用户
提问于 2022-04-14 09:37:38
回答 1查看 1.1K关注 0票数 0

我正在尝试创建PostgreSQL - Etcd - Patroni(PEP)集群。互联网上有很多例子,我创造了一个,它运行得很完美。然而,这种架构应该符合我公司的备份解决方案,即NetApp。我们使用“选择pg_start_backup('test_ backup ',true)”将数据库放入备份模式,然后将所有数据文件复制到备份目录中。

PEP集群在这个解决方案中有一个小问题。备份运行良好,但恢复点不是很好。为了恢复PEP集群的领导者,我需要停止数据库,然后将备份文件移动到数据目录,最后启动恢复。此时Patroni说恢复节点是一个新的集群。以下是错误:

代码语言:javascript
运行
复制
    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".

另外,当我检查赞助人集群状态时,我看到了以下内容:

代码语言:javascript
运行
复制
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集群没有领导者。那么,我该如何解决这个问题呢?

(注意:恢复节点试图加入右集群,因为在启动恢复之前,我检查群集状态并得到以下结果:

代码语言:javascript
运行
复制
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集群时都是一样的?

如果您需要任何数据或其他不清楚的信息,请告诉我。

以下是我的领导节点赞助人配置文件:

代码语言:javascript
运行
复制
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'

谢谢!

EN

回答 1

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71869481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档