Створення stanza "db" та початкового повного резервного копіювання бази даних

1. Загальний опис

Якщо початковий повний backup бази даних не створився, через що WAL безперервно росте і швидко заповнює PVC бази даних, pgBackRest вимагає наявності stanza для кожного кластера Postgres. Якщо stanza «db» відсутня, резервні копії та архівація будуть недоступні. Правильне створення stanza й full-backup бази даних розв’язує проблему та перезапускає нормальне вилучення WAL з PVC.

У цій інструкції надано послідовність дій для розв’язання цієї проблеми на прикладі аналітичного інстансу PostgreSQL в реєстрі.

2. Виконання

2.1. Під’єднання до інстансу бази даних реєстру

Під’єднайтесь до аналітичного інстансу бази даних. Зробити це можна двома шляхами:

  1. Через інтерфейс OKD: Workloads (Project: <registry-name>) → Pods → analytical-instance-<hash>-0 → Terminal

  2. Через oc-cli в UNIX-подібній OC (необхідний попередній вхід):

    oc project <registry-namespace> && oc rsh $(oc get pods --no-headers | grep analytical-instance | awk '{print $1}')

2.2. Перевірка наявності та створення stanza "db"

  1. Перевірка наявності stanza "db"

    В терміналі бази даних виконайте наступну команду:

    pgbackrest --stanza=db check

    Якщо stanza "db" існує - команда завершиться успішно (код 0) без виведення відповіді.

    Якщо команда виведе наступну відповідь - необхідно створити stanza "db":

    ERROR: [055]: unable to load info file '/postgres-backup/<registry-namespace>/analytical/archive/db/archive.info' or '/postgres-backup/<registry-namespace>/analytical/archive/db/archive.info.copy':
           FileMissingError: unable to open missing file '/postgres-backup/<registry-namespace>/analytical/archive/db/archive.info' for read
           FileMissingError: unable to open missing file '/postgres-backup/<registry-namespace>/analytical/archive/db/archive.info.copy' for read
           HINT: archive.info cannot be opened but is required to push/get WAL segments.
           HINT: is archive_command configured correctly in postgresql.conf?
           HINT: has a stanza-create been performed?
           HINT: use --no-archive-check to disable archive checks during backup if you have an alternate archiving scheme.
  2. Створення stanza "db"

    В терміналі бази даних виконайте наступну команду - команда завершиться успішно (код 0) без виведення відповіді:

    pgbackrest --stanza=db stanza-create

    Через кілька хвилин повторіть команду з пункта 1. Якщо з’являється помилка:

    ERROR: [082]: WAL segment 0000000A00000002000000A3 was not archived before the 60000ms timeout
           HINT: check the archive_command to ensure that all options are correct (especially --stanza).
           HINT: check the PostgreSQL server log for errors.
           HINT: run the 'start' command if the stanza was previously stopped.

    Спробуйте виконати наступну команду та зачекайте ще кілька хвилин:

    pgbackrest --stanza=db start

2.3. Виконання повного резервного копіювання

Якщо команда з пункту 1 підрозділу 2.2 завершується успішно (код 0) без виведення відповіді, то виконайте наступну команду:

pgbackrest --stanza=db --type=full backup

Якщо з’являється наступна помилка - інший процес pgBackRest уже активний; зачекайте та повторіть спробу:

ERROR: [050]: unable to acquire lock on file '/tmp/pgbackrest/db-backup.lock': Resource temporarily unavailable
       HINT: is another pgBackRest process running?

Успішне виконання завершиться (код 0) без виведення відповіді.

2.4. Перевірка результату

Після успішного завершення переконайтесь, що розмір WAL зменшується у Grafana-панелі PostgreSQL Details → WAL size in MB. Це підтверджує, що архівація працює і PVC більше не переповнюється.