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
pgbrvim /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
- Adım : Test veritabanı sunucusunda postgresql cluster durdurulur ve zaten mevcutsa
pg_data klasörü silinir. - 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
