PGBackRest Backup Server
(Yedekleme Sunucusu-Dedicated Repository Host)

Dedike bir pgbackrest backup server ile backup yönetimi tek bir noktadan yönetilebilir.
Backup ve arşivlenmiş WAL dosyaları başka bir sunucuda olacağı için veritabanı
sunucusundaki sorunlardan daha az etkilenecektir.
Veritabanı boyutları, network hızı, işlemci kapasitesi, veritabanlarının yoğun olduğu
zaman dilimleri göz önünde bulundurularak planlama yapılmalıdır.
Kurulum
| ROLE | HOSTNAME | IP | DB |
| PGBackRest Backup Server | pgbr | 192.168.56.60 | - |
| Database Server | srvr1 | 192.168.56.61 | mxdb |
| Database Server | srvr2 | 192.168.56.62 | dmdb |
gerçekleştirecek. Üzerinde veritabanı koşmayacak.
srv1, mxdb’nin koştuğu veritabanı sunucusu.
srv2, dmdb’nin koştuğu başka bir veritabanı sunucusu.
Her 3 makinenin ;
-
/etc/hostsdosyasına aşağıdaki satırlar girilir.
192.168.56.60 pgbr 192.168.56.61 srv1 192.168.56.62 srv2
- /etc/sudoers dosyasına aşağıdaki satırlar girilir.
postgres ALL=(ALL) NOPASSWD:ALL
Not: sudo hakkı her şirketin BT güvenlik politikalarına uymayabilir. Kurulumlardan
sonra geri alınabilir.
ADIM 1
pgbr makinesinde
root@pgbr:~# apt install postgresql-client libxml2 root@pgbr:~# useradd postgres root@pgbr:~# mkdir /home/postgres root@pgbr:~# chown -R postgres:postgres /home/postgres root@pgbr:~# su - postgres postgres@pgbr:~$ pwd /home/postgres postgres@pgbr:~$ cp /etc/skel/.* .
Bu sunucuya, önceki sayfalarda anlatılan pgbackrest kurulum adımları izlenerek
pgbackrest kurulumu yapılır.
pgbr makinesinde postgresql server kurulu olmadığı için postgresql client
paketi de kurulur.
Backup işlemlerini postgres kullanıcısı ile yapacağımız için pgbr makinesinde postgres
kullanıcısı oluşturulur.
ADIM 2
# 3 makinede de postgres kullanıcısı ile # Sorulan sorular enterla geçilir. Herhangi bir şey girilmez. ssh-keygen -t rsa # pgbr makinesinde ssh-copy-id srv1 ssh-copy-id srv2 # srv1 makinesinde ssh-copy-id pgbr # srv2 makinesinde ssh-copy-id pgbr
postgres kullanıcısı ile pgbr ile veritabanı sunucuları arasında ssh üzerinden şifresiz
erişim ayarları yapıldıktan sonra bağlantı tek tek test edilmelidir.
ADIM 3
# srv1 ve srv2 makinelerinde 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 # pgbr makinesinde sudo scp /usr/bin/pgbackrest srv1:/usr/bin/ sudo scp /usr/bin/pgbackrest srv2:/usr/bin/
srv1 ve srv2 veritabanı sunucularında postgres kullanıcısı ile
pgbackrest version
çalıştırılarak kontrol edilmelidir.
Not: Dedike pgbackrest sunucu ile veritabanı sunucularında aynı versiyon
pgbackrest kurulu olmalıdır.
ADIM 4 (Disk ekleme- pgbr makinesinde)
postgres@pgbr:~$ sudo pvcreate /dev/sdb postgres@pgbr:~$ sudo pvdisplay postgres@pgbr:~$ sudo vgcreate ra /dev/sdb # Tüm disk alanını kullanmak için postgres@pgbr:~$ sudo lvcreate -l 100%FREE -n RA-LV ra postgres@pgbr:~$ sudo lvdisplay /dev/ra/RA-LV postgres@pgbr:~$ sudo mkfs.xfs /dev/ra/RA-LV postgres@pgbr:~$ sudo mount /dev/ra/RA-LV /RA postgres@pgbr:~$ df -h # ile kontrol edilir. # Restarttan sonra otomatik olarak diskin /RA’ ya mount olabilmesi için # fstab dosyasına aşağıdaki satır eklenir. sudo vim /etc/fstab /dev/ra/RA-LV /RA xfs nofail,defaults 0 0 postgres@pgbr:~$ sudo umount /RA postgres@pgbr:~$ sudo mount -a # test edilmeli postgres@pgbr:~$ sudo mkdir -p /RA/pgbackrest postgres@pgbr:~$ sudo chown -R postgres:postgres /RA/
pgbr makinesinde işletim sistemi /dev/sda diskinde yer almaktadır. Yedekler için
ikinci bir disk takılır/verilir. fdisk -l ile kontrol edilerek yeni diskin ID’si öğrenilir.
Burada yapılan örnekte 2. disk /dev/sdb olarak görülmektedir.
ADIM 5 (pgbr’ da pgbackrest ayarları)
[global] repo1-path=/RA/pgbackrest repo1-retention-full=2 process-max=4 log-level-console=info start-fast=y [global:archive-push] compress-level=3 [mx] pg1-path=/pg/data/13.6 pg1-host=srv1 pg1-host-user=postgres [dm] pg1-path=/var/lib/postgresql/13/main pg1-host=srv2 pg1-host-user=postgres
Önceki bölümlerde anlatıldığı üzere srv1 postgresql veritabanı sunucusuna kaynak
kodlardan PGDATA=/pg/data/13.6 dizinine kurulum yapılmıştı.
srv2 veritabanı sunucusuna ise apt ile hazır paketlerde kurulum yapıldı. Bu yüzdenPGDATA=/var/lib/postgresql/13/main dizinlerine default olarak
kurulmuştur.
ADIM 6 (srv1’de pgbackrest ayarları)
vim /etc/pgbackrest/pgbackrest.conf #aşağıdaki satırlar eklenir [mx] pg1-path=/pg/data/13.6 pg1-port=5434 pg1-socket-path=/tmp [global] repo1-host=pgbr repo1-host-user=postgres process-max=4 log-level-console=info log-level-file=debug [global:archive-push] compress-level=3
ADIM 7 (srv2’de pgbackrest ayarları)
vim /etc/pgbackrest/pgbackrest.conf #aşağıdaki satırlar eklenir [dm] pg1-path=/var/lib/postgresql/13/main pg1-port=5432 [global] repo1-host=pgbr repo1-host-user=postgres process-max=4 log-level-console=info log-level-file=debug [global:archive-push] compress-level=3
ADIM 8 (srv1 ve srv2 makinelerinde)
# srv1’de postgres@srv1:~$ psql postgres# alter system set archive_mode = 'on' ; postgres# alter system set archive_command = 'pgbackrest --stanza=mx archive-push %p' postgres# select pg_reload_conf(); postgres@srv1:~$ pgbackrest stop postgres@srv1:~$ pgbackrest start # srv2’de postgres@srv2:~$ psql postgres# alter system set archive_mode = 'on' ; alter system set archive_command = 'pgbackrest --stanza=dm archive-push %p' postgres# select pg_reload_conf(); postgres@srv2:~$ pgbackrest stop postgres@srv2:~$ pgbackrest start
ADIM 9 (pgbr makinesinde)
postgres@pgbr:~$ pgbackrest --stanza=mx stanza-create postgres@pgbr:~$ pgbackrest --stanza=dm stanza-create postgres@pgbr:~$ pgbackrest --stanza=mx check postgres@pgbr:~$ pgbackrest --stanza=dm check INFO: check command begin 2.40: --exec-id=5984-90166d79 --loglevel- console=info --pg1-host=srv2 --pg1-host-user=postgres --pg1-path=/var/lib/postgresql/13/main --repo1-path=/RA/ pgbackrest --stanza=dm P00 INFO: check repo1 configuration (primary) P00 INFO: check repo1 archive for WAL (primary) P00 INFO: WAL segment 000000010000000000000007 successfully archived to ‘/RA/pgbackrest/archive/dm/13- 1/0000000100000000/000000010000000000000007-23bcdb5a5765d40ca93 d09dcadbed85706a8a7d4.gz’ on repo1 P00 INFO: check command end: completed successfully (1271ms)
/RA/pgbackrest/archive/dm/13-1 ve/RA/pgbackrest/archive/mx/13-1 dizinlerde arşivlenen WAL dosyaları
görülür.
Backup (pgbr makinesinde)
pgbackrest --stanza=dm backup pgbackrest --stanza=mx backup pgbackrest --stanza=dm info pgbackrest --stanza=mx info
Backup, backup (pgbr) sunucu üzerinden alınır.
Restore işlemi ise veritabanının geri yükleneceği (restore) makine üzerinde yapılır.
Örneğin srv2’nin veritabanının geri yüklemesi srv2 üzerinden yapılır.
Restore (Geri yükleme, srv1 veya srv2 makinesinde)
postgres@srv2:~$ sudo systemctl stop postgresql.service postgres@srv2:~$ pgbackrest --stanza=demo --delta restore postgres@srv2:~$ sudo systemctl start postgresql.service
Not: “pgbackrest stop“ Bazı durumlarda pgbackrest durdurmak gerekebilir.
Örneğin failover işlemi sırasında problemli primary makineden backup alınması
istenmeyebilir.
Aynı konfigurasyonlarda bir makine daha kurulup veritabanlarının kılonu bu makineye
hızlıca alınarak yazılım ekibine test ortamı hazırlanabilir. Böylece canlı ortam
etkilenmediği gibi tekrar yedek kopyalama vb. İşlemlerle vakit kaybedilmez. Stanby
kurulumu için de pgbackrest kullanılabilir. Detaylar için bölüm 12’ye ve pgbackrest.org
sayfasına bakabilirsiniz.
Monitoring
postgres@srv2:~$ psql postgres=# \i /pgbackrest-release-2.40/doc/example/pgsqlpgbackrest- info.sql postgres=# \i /pgbackrest-release-2.40/doc/example/pgsqlpgbackrest- query.sql name | last_successful_backup | last_archived_wal ------+------------------------+-------------------------- “dm” | 06:22:19+03 | 00000001000000000000000B “mx” | 14:53:15+03 | 0000000400000000000000B4
check ve info ile yedekler izlenebileceği gibi pgbackrest ile birlikte gelen SQL’ler
ile de sorgulanabilir. Bu sorgu eğer boş gelirse (yedek olmadığı anlamına gelir) alarm
tetiklenerek e-posta gönderilmesi sağlanabilir.
