Patroni ile Pgbackrest Entegrasyonu

Patroni ve pgbackrest’in beraber çalışabilmesi için öncelikli olarak pgbr’a pgbackrest
kurulmuş olmalı ve backup server olarak ayarlanmalı.
Tüm veritabanı sunucularına da pgbackrest kurulmalı ve pgbr aralarında postgres
kullanıcısı ile şifresiz erişim sağlanmış olmalı.

pgbackrest kurulum adımları için 11. bölümü inceleyebilirsiniz.
pgbr backup server’a pgbackrest ile primary sunucudan yani pgdb1’de yedek alınır.
Rol değişimi olursa (Failover/switchover) yani standby primary , primary server standby
olursa,
pgbackrest, yeni primary sunucuyu otomatik olarak algılar, yedeklemeyi ve WAL
dosyalarını arşivlemeyi yeni primary’den yapar.

Adım 1 (public keylerin oluşturulması)

Tüm sunucularda şifresiz ssh erişimi aktif edilmelidir.

# pgdb1 ve pgdb2 de tek tek çalıştırılır.
ssh-keygen -t rsa #ls ~/.ssh dizininde id_rsa.pub varsa bu adıma gerek yok
ssh-copy-id pgbr

pgbr’da

ssh-keygen -t rsa #ls ~/.ssh dizininde id_rsa.pub varsa bu adıma gerek yok
ssh-copy-id pgdb1
ssh-copy-id pgdb2

Adım 2

Daha önce yapılmadı ise aşağıdaki postgres parametereleri tüm nodelarda
ayarlanmalıdır. (erp ismi örnektir.)

patronictl -c /etc/patroni/config.yml edit-config
# Aşağıdaki satırlar eklenir.
archive_mode: ‘on’
archive_command: ‘pgbackrest --stanza=erp archive-push %p’
patronictl -c /etc/patroni/config.yml reload erp
patronictl -c /etc/patroni/config.yml restart erp

Adım 3

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Tüm sunucularda sudo kullanıcısı olarak ya da root ile aşağıdaki dosya ve dizinler
oluşturulur.

Adım 4

pgbr
vim /etc/pgbackrest/pgbackrest.conf

[erp]
pg1-path=/pg/data/13/main
pg1-host=pgdb1
pg1-host-user=postgres
pg2-path=/pg/data/13/main
pg2-host=pgdb2
pg2-host-user=postgres
[global] # Aşağıdaki parametreler için bölüm 11’e bakabilirsiniz.
repo1-path=/RA/pgbackrest
repo1-retention-full=2
process-max=4
log-level-console=info
start-fast=y
lock-path=/var/tmp/pgbackrest
[global:archive-push]
compress-level=3

Backup server (repository) yani pgbr’da /etc/pgbackrest/pgbackrest.conf
düzenlenir.

Adım 5

Tüm veritabanı sunucularında (pgdb1 ve pgdb2 …)

pgdb1
/etc/pgbackrest/pgbackrest.conf düzenlenir.

[erp]
pg1-path=/pg/data/13/main
pg1-socket-path=/var/run/postgresql
lock-path=/var/tmp/pgbackrest
[global]
log-level-file=detail
repo1-host=pgbr
repo1-host-user=postgres

pgdb2
/etc/pgbackrest/pgbackrest.conf düzenlenir.

[erp]
pg1-path=/pg/data/13/main
pg1-socket-path=/var/run/postgresql
lock-path=/var/tmp/pgbackrest
[global]
log-level-file=detail
repo1-host=pgbr
repo1-host-user=postgres

Adım 6

Pgbackrest backup repository sunucusunda (pgbr) aşağıdaki komutla pgbackrest stanza
oluşturulur.

pgbackrest --stanza=erp --log-level-console=info stanza-create

Postgres sunucularının her birinde pgbackrest konfigürasyonu kontrol edilir. Primary’de
çıktı, primary olduğu ve backup için kullanıldığından aşağıdakine benzer olacaktır.

pgbackrest --log-level-console=info --stanza=erp check
17:54:16.564 P00 INFO: check command begin 2.40: --exec-id=18778-
bb0c78d2 --log-level-console=info --log-level-file=detail --pg1-path=/
pg/data/13/main --pg1-socket-path=/var/run/postgresql --repo1-host=pgbr
--repo1-host-user=postgres --stanza=erp
17:54:17.183 P00 INFO: check repo1 configuration (primary)
17:54:17.688 P00 INFO: check repo1 archive for WAL (primary)
17:54:18.097 P00 INFO: WAL segment 000000060000000000000015
successfully archived to ‘/RA/pgbackrest/archive/erp/13-
1/0000000600000000/000000060000000000000015-aa86ba3d627b4f3c1e60fe82bd0
655363b0c76d4.gz’ on repo1
17:54:18.198 P00 INFO: check command end: completed successfully
(1637ms)

Standby sunucularda check komutu çıktısı aşağıdaki gibi olacaktır.

pgbackrest --log-level-console=info --stanza=erp check
INFO: check command begin 2.40: --exec-id=20770-49a7bd0b --loglevel-
console=info --log-level-file=detail --pg1-path=/pg/
data/13/main --pg1-socket-path=/var/run/postgresql --repo1-
host=pgbr --repo1-host-user=postgres --stanza=erp
19:27:10.363 P00 INFO: check repo1 (standby)
19:27:10.690 P00 INFO: switch wal not performed because this
is a standby
2022-09-02 19:27:10.793 P00 INFO: check command end:
completed successfully (1112ms)

Pgbackrest backup repository sunucusunda aşağıdaki komutla pgbackrest backup
oluşturulur.

pgbackrest --log-level-console=info --stanza=erp backup

Not: pgbackrest archive-timeout > Postgres archive_timeout and checkpoint_timeout olmalı.

Farklı Bir Sunucuya Pgbackrest ile Restore (kılon)

Canlı ortamdan test veritabanı sunucusuna kılon almak için

  1. Adım : Test veritabanı sunucusunda postgresql cluster durdurulur ve zaten mevcutsa
    pg_data klasörü silinir.
  2. Adım : Pgbackrest test veritabanı sunucusuna kurulur (kurulum adımları backup
    bölümünde mevcut).
    Test veritabanı sunucusunda aşağıdaki komutlar çalıştırılır.
pgbackrest --log-level-console=info --log-level-file=info
--archive-mode=off \
--repo1-path=/RA/pgbackrest --repo1-host=pgbr --repo1-hostuser=
postgres \
--stanza=erp --pg1-path=/var/lib/postgresql/13/main restore

Not: Mevcut veritabanının archive-mode’u kapalı (off) olmalıdır. Pgbackrest repository
sunucusu ile test sunucusu arasında şifresiz ssh erişimi aktif olmalıdır.

  • repo1-path: Pgbackrest backup dizini
  • repo1-host: Pgbackrest backup server (repository) IP veya hostname
  • repo-host-user: Login için postgres kullanıcısı
  • pg1-path: Yeni sunucu veya test sunucusunun restore edileceği PGDATA dizini

Point-in-time Recovery:
Aşağıda, test veritabanını belli bir zamana restor adımları verilmiştir.
1.Adım : Test veritabanının restore edileceği zaman belirlenir.
2.Adım : Pgbackrest kurulur ve aşağıdaki komutla restore yapılır.

pgbackrest --log-level-console=info --log-level-file=info
--archive-mode=off \
--repo1-path=/RA/pgbackrest --repo1-host=pgbr --repo1-hostuser=
postgres \
--stanza=erp --pg1-path=/var/lib/postgresql/13/main --type=time
--target=”2022 13:58:00” restore
Kategori seçin...