暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 pgBackRest 重新创建一个 Patroni 副本

原创 小小亮 2022-12-15
456

在我的上一篇博客中,我们了解了如何从 pgBackRest 引导一个完整的 Patroni 集群但是也有可能使用 pgBackRest 只重新创建一个 Patroni 节点。在这篇博客中,我们将了解我们需要更改的所有内容,以便从备份成功地重新创建节点。

首先,假设我们有一个三节点的 Patroni 设置,使用 etcd 作为键值存储,pgBackRest 用于备份数据库。

 postgres@hero2:/home/postgres/ [PG1] patronictl list
+--------+----------------+---------+---------+----+-----------+
| Member | Host           | Role    | State   | TL | Lag in MB |
+ Cluster: PG1 (7166642010148587394) ---------+----+-----------+
| hero1  | 192.168.22.251 | Leader  | running |  1 |           |
| hero2  | 192.168.22.252 | Replica | running |  1 |         0 |
| hero3  | 192.168.22.253 | Replica | running |  1 |         0 |
+--------+----------------+---------+---------+----+-----------+

 postgres@hero2:/home/postgres/ [PG1] etcdctl member list
1c83efe87807cd7b, started, hero2, http://192.168.22.252:2380, http://192.168.22.252:2379, false
b059fedab560f470, started, hero3, http://192.168.22.253:2380, http://192.168.22.253:2379, false
ecee86d6079e2735, started, hero1, http://192.168.22.251:2380, http://192.168.22.251:2379, false

首先,我们检查我们的 pgBackRest 存储库中是否有可用的备份。

postgres@backup_hero:/home/postgres/ [pg14] pgbackrest info
stanza: hero2hero
    status: ok
    cipher: none

    db (current)
        wal archive min/max (14): 000000010000000000000001/00000001000000000000000C

        full backup: 20221116-165815F
            timestamp start/stop: 2022-11-16 16:58:15 / 2022-11-16 16:59:04
            wal start/stop: 00000001000000000000000A / 00000001000000000000000C
            database size: 105.0MB, database backup size: 105.0MB
            repo1: backup set size: 30.8MB, backup size: 30.8MB

因此,当一切看起来都很健康时,我们可以开始更改 Patroni 集群的配置。我们必须分两步进行此更改。

在第一步中使用 edit-conf 编辑配置。在 use_slots 和 retry_timeout 之间添加 recovery_conf 部分。保护您的更改。

postgres@hero2:/home/postgres/ [PG1] patronictl edit-config
  use_slots: true
recovery_conf:
  restore_command: pgbackrest --stanza=hero2hero archive-get %f %p
  restore_target_timeline: latest
retry_timeout: 10
ttl: 30

下一步,更改 patroni.yml。我们将 create_replica_methods 添加到文件中。当我们定义 pgbackrest 和 basebackup 时,它将首先尝试从 pgBackRest 重新创建副本,如果这不可能,它将从 master 的 basebackup 重新创建。

此更改至少应在您要使用 pgBackRest 重新创建的节点上完成,但最好在所有三个节点上执行此更改,以确保您在任何情况下都已做好准备。请注意此更改并确保在行的开头添加足够的空格。在参数部分下方添加部分 create_replica_methods。

postgresql:
  ..
  ..
  parameters:
    unix_socket_directories: '/tmp'
  create_replica_methods:
    - pgbackrest
    - basebackup
  pgbackrest:
    command: pgbackrest --stanza=hero2hero restore
    keep_data: True
    no_params: True
  basebackup:
    checkpoint: 'fast'

完成所有更改后,您需要重新加载赞助人

sudo systemctl reload patroni

现在我们可以销毁一个副本并重新创建它。

postgres@hero2:/home/postgres/ [pg14] sudo systemctl stop patroni
postgres@hero2:/home/postgres/ [pg14] rm -rf /u02/pgdata/14/PG1/*
postgres@hero2:/home/postgres/ [pg14] ls -al /u02/pgdata/14/PG1/
total 0
drwxr-x---. 2 postgres postgres  6 Nov 16 17:16 .
drwxr-x---. 3 postgres postgres 17 Sep  5 10:20 ..
postgres@hero2:/home/postgres/ [pg14] sudo systemctl start patroni

这并没有真正表明副本真的是从 pgBackRest 重新创建的,但是如果我们检查日志文件,我们会得到一条自我解释的消息,即使用了 pgBackRest(见最后一行)

postgres@hero2:/home/postgres/ [pg14] sudo journalctl -u patroni -f
-- Logs begin at Fri 2022-09-16 08:50:46 CEST. --
Nov 16 17:16:37 hero2 systemd[1]: Starting dbi services patroni service...
Nov 16 17:16:37 hero2 systemd[1]: Started dbi services patroni service.
Nov 16 17:16:38 hero2 patroni[38394]: 2022-11-16 17:16:38,085 INFO: Selected new etcd server http://192.168.22.253:2379
Nov 16 17:16:38 hero2 patroni[38394]: 2022-11-16 17:16:38,094 INFO: No PostgreSQL configuration items changed, nothing to reload.
Nov 16 17:16:38 hero2 patroni[38394]: 2022-11-16 17:16:38,116 INFO: Lock owner: hero1; I am hero2
Nov 16 17:16:38 hero2 patroni[38394]: 2022-11-16 17:16:38,120 INFO: trying to bootstrap from leader 'hero1'
Nov 16 17:16:42 hero2 patroni[38394]: 2022-11-16 17:16:42,532 INFO: replica has been created using pgbackrest
..
..
..


该行为的实现非常容易且设置起来很快。如前所述,请记住在 patroni.yml 中放置足够的空间,否则不会使用 pgBackRest 创建副本。所以如果你仍然在你的日志文件中看到这个条目

INFO: replica has been created using basebackup
INFO: bootstrapped from leader 'hero1'

再次查看您的 patroni.yml!


原文标题:Recreate a Patroni replica using pgBackRest

原文作者:Julia Gugel
原文链接:https://www.dbi-services.com/blog/recreate-a-patroni-replica-using-pgbackrest/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论