PostgreSql – PgBackRest ile Standby Server’dan Backup alma

Selamlar arkadaşlar yazıma hoşgeldiniz. Bu yazımda sizlere Streaming Replication kurulumu yapılmış iki PostgreSql13 kurulu sunucumuzda Standby’da bekleyen Replica sunucusundan PGBackRest yardımıyla Backup aldırma işlemini anlatacağım.

Bu Backup’lama işleminde Primary sunucusundan WAL dosyalarını yedeklerken diğer Dataları ise Replica sunucusundan alacağımız bir ortamı Lab ortamında tasarlayıp Full Backup aldıracağız.

Bunun için sunucularınızda gerekli olan ayarlamaları ilk kısımda yazacağım ve sonrasında ise teker teker diğer adımları anlatacağım.

İlk olarak bu işlemleri Ubuntu 20.04 üzerinde yapacağız.

1 – İlk olarak bu kurulu Ubuntu sunucularımızın Host, Hostname ve Manual Ip Adresi ayarlamalarını yapmalısınız.

Ben Primary sunucuma psql-primary olarak Host ve Hostname olarak ayarladım ve IP Adresini ise 192.168.1.150 olarak, Replica sunucuma psql-replica olarak Host ve Hostname olarak ayarladım ve IP Adresini ise 192.168.1.151 olarak ayarladım.

2 – (Her iki cihazınıza yapmalısınız.) PostgreSql13 kurulumu sağladım. Bu kurulumu yapmak için Buraya tıklayarak gidebilirsiniz ya da Buraya tıklayarak PostgreSql resmi sayfasından Ubuntunuza yükleme yapabilirsiniz.

Bu yüklemelerin ardından Database oluşturmalı, oluşturduğunuz DB’ye girmeli ve Table oluşturmalı ve bu Table içerisine Data girmeniz gerekmektedir. Bu işlemleri Primary’de yapmalısınız çünkü bu Lab’da Streaming Replication yapacağımız için Replica’ya zaten atılacak.

3 – (Her iki cihazınıza yapmalısınız.) Bu adımda ise PostgreSql’lerimizi çalıştırmaya başladıktan sonra dediğim Streamin Replication kısmına geliyoruz. Bunu tek Slot ile yapmanız ve yazımdaki bütün alanları yapacak şekilde oluşturmalısınız. Streaming Replication yazıma ulaşmak için ise buraya tıklayabilirsiniz.

4 – (Her iki cihazınıza yapmalısınız.) Her sunucuma OpenSSH-Server kurulumu yaptım ve Postgres kullanıcısından Passwordless-SSH bağlantısını sağladım. Buraya tıklayarak yazımı okuyabilir ve ayarlamaları sağlayabilirsiniz.

5 – (Her iki cihazınıza yapmalısınız.) Şimdi ise sırada Backup işlerinde kullanacağımız PGBackRest kurulumlarına geldi. Sadece kurmalı ve conf ayarlamalarını yazımda yazacaklarımla yapmalısınız. Kurulumu bulabileceğiniz linke ise buraya tıklayarak gidebilirsiniz.

6 – (Her iki cihazınıza yapmalısınız.) 192.168.1.50 ip adresine sahip NFS serverdan paylaştırmış olduğum nfspgbackrest klasörüne iki cihazdan da mount işlemi ile bağlandım.

Ubuntu 20.04 üzerinde NFS Serverdan klasörü share ettim. Buraya tıklayarak sizde NFS server kurabilirsiniz. Ubuntu cihazlarımda da Mount kodunu kullanarak gerekli bağlantıları sağladım. Buraya tıklayarakda Ubuntu NFS Mount işlemlerine ulaşabilirsiniz.

NOT : PostgreSql sunucularında NFS klasörlerinizin izinlerini ayarlamayı unutmayın. Ben aşağıdakiler gibi yaptım.

> sudo chmod -R 777 /mnt/nfs
> sudo chown -R postgres:postgres /mnt/nfs

Genel olarak diğer makalelerden de yardım alarak öğreneceğiniz kısımlar bu şekilde arkadaşlar. Şimdi konumuza göre gerekli ayarlamaları yapacağımız kısma geldik.

Adım 1 : (Her iki cihazınıza yapmalısınız.) İlk olarak Conf. dosyalarımızı koyacağımız klasörü oluşturuyoruz ve izinlerini veriyoruz.

> sudo mkdir -p /etc/pgbackrest
> sudo chown postgres:postgres -R /etc/pgbackrest
> sudo chmod -R 755 /etc/pgbackrest

Adım 2 : (Her iki cihazınıza yapmalısınız.) pgbackrest_primary.conf dosyamızı oluşturarak başlayabiliriz.

> nano /etc/pgbackrest/pgbackrest_primary.conf

[global]
repo1-path=/mnt/nfs
repo1-retention-full=4
log-level-console=info
log-level-file=info
process-max=8
archive-async=y
spool-path=/var/spool/pgbackrest
repo1-host-user=postgres

[backupstanza]
pg1-path=/var/lib/postgresql/13/main/
pg1-port=5432

Ayarlama dosyamızı biraz açıklamamız gerekirse:

‘repo1-path=/mnt/nfs’ ile Backup dosyalarımızı koyacağımız NFS dosyasımızı belirtiyoruz.
‘repo1-retention-full=4’ ile Full Backup aldığımızda en fazla 4 adet saklayacağınız belirtiyoruz.
‘process-max=8’ Sıkıştırma ya da Transfer yaparken kullanacağı Max Process sayısı.
‘archive-async=y’ Paralel arşivleme aktifleştirmek için kullanılır.
‘spool-path=/var/spool/pgbackrest’ Bu özellik sayesinde belirtilen alana arşivlenecek dosya listesinin bir listesi oluşturulur.
‘repo1-host-user=postgres’ Depo sunucusuna bağlanırken kullandığı kullanıcıyı belirtir.
‘pg1-path=/var/lib/postgresql/13/main/’ PostgreSql’inizin kullandığı data klasörünü belirtir. Bu yolu aşağıdaki kodu kullanarakda bulabilirsiniz.

> sudo -iu postgres psql -U postgres -c 'SHOW config_file'

Bu kod Data yolunu verirken,

> sudo -iu postgres psql -U postgres -c 'SHOW hba_file'

Bu kod ile de hba yani PostgreSql bağlantı izinlerinin verildiği dosyayı bulabilirsiniz.

‘pg1-port=5432’ PostgreSql’in kullandığı portu belirtiyoruz.

Oluşturduğumuz bu dosya ile Primary Server’dan arşivleme işlemi için kullanılacak olan conf. dosyasıdır.

Adım 3 : (Her iki cihazınıza yapmalısınız.) Restore Command alanı tarafından kullanılacak olan dosyayı oluşturuyoruz şimdide.

> nano /etc/pgbackrest/pgstandby_restore_command.conf

[global]
repo1-path=/mnt/nfs
log-level-console=info
log-level-file=info
spool-path=/var/spool/pgBackrest
repo1-host-user=postgres

[backupstanza]
pg1-path=/var/lib/postgresql/13/main/
pg1-port=5432

Oluşturduğumuz bu dosya Replica sunucusunda PostgreSql.conf dosyasındaki Restore_Command alanını çalıştırıyoruz.

Adım 4 : (Her iki cihazınıza yapmalısınız.) Primary ve Replica sunucularının archive_command ve restore_command düzenleme. Bunun için postgresql.conf dosyasına gidiyoruz.

> nano /etc/postgresql/13/main/postgresql.conf

archive_mode = off kısmını bulmanız ve on olarak değiştirmelisiniz.

archive_command alanına aşağıdaki kodu yazıyoruz.

> pgbackrest --config=/etc/pgbackrest/pgbackrest_primary.conf --stanza=backupstanza archive-push %p

restore_command alanına ise aşağıdaki kodu yazıyoruz.

> pgbackrest --config=/etc/pgbackrest/pgstandby_restore_command.conf --stanza=backupstanza archive-get %f "%p"
> systemctl restart postgresql

Daha sonra aşağıdaki kod yardımıyla her iki sunucuda da PostgreSql DB’mizi Restart ediyoruz ve Conf. dosyası aktifleşiyoruz bu yeni değişikliklerle.

Adım 5 : Primary sunucusunda Stanza dosyamızı oluşturuyoruz. Ve bu sayede NFS Share içerisinde gerekli dosyalar oluşturuluyor. Stanzamın adı backupstanza.

> pgbackrest --config=/etc/pgbackrest/pgbackrest_primary.conf --stanza=backupstanza stanza-create

Adım 6 : Primary sunucusunda stanza’da herhangi bir sorun olup olmadığını kontrol edebilmek için Check komutunu çalıştırıyoruz.

> pgbackrest --config=/etc/pgbackrest/pgbackrest_primary.conf --stanza=backupstanza check

Adım 7 : Replica sunucusundan Full Backup alacağımız için aşağıdaki dosyayı burada oluşturuyoruz.

> nano /etc/pgbackrest/pgbackrest_standby.conf

[global]
repo1-path=/mnt/nfs
repo1-retention-full=4
log-level-console=info
log-level-file=info
backup-standby=y
start-fast=y
process-max=8
archive-copy=y
repo1-host-user=postgres

[backupstanza]
pg1-path=/var/lib/postgresql/13/main/
pg1-host=192.168.1.150
pg1-port=5432
pg1-user=postgres
pg2-path=/var/lib/postgresql/13/main/
pg2-host=192.168.1.151
pg2-port=5432
pg2-user=postgres

Adım 8 : Replica sunucusunda gerekli conf ayarlamarını yaptıktan sonra aşağıdaki kod ile Full Backup işlemlerini başlatmalısınız.

> pgbackrest --config=/etc/pgbackrest/pgbackrest_standby.conf --stanza=backupstanza --type=full --archive-timeout=2000 --compress backup

Artık Backup loglarında yazdığı gibi Archive dosyalarını Primary’e erişerek alıp, diğer data dosyalarını ise Replica’dan alıp Backup Full işlemini başarılı bir şekilde bitirecektir.

Adım 9 : Primary sunucusundan ise Stanza info ile alınan backupların bilgisini alacağız.

> pgbackrest --config=/etc/pgbackrest/pgbackrest_primary.conf --stanza=backupstanza info

Çalıştırdığımız bu kod sayesinde gerekli bilgileri alıyor olacaksınız. Ben çok fazla backup aldım çünkü Retention’ın doğru çalışıp çalışmadığını kontrol ettim ve sorunsuz çalıştı. Artık backup’lama işlemleri için PGBackRest yükü iki sunucuya bölerek gerekli işlemleri yapacak.

ÖNEMLİ NOT : Bu Lab’ı yaparken en çok uğraştığım konu NFS’de paylaşımda olan klasörlerde oldu. Sorun ise Primary tarafında Stanza oluşturduğunuz için sanıyorum ki kullanıcılardan dolayı Replica’dan bu dosyaya veri yazarken Permissin Denied hatası çok fazla aldım. Bunu düzeltebilmek için ise Stanza dosyamı oluşturduktan sonra Ubuntu NFS Server’ıma giderek dosya izinlerini 777 –R olarak ayarladım tekrar. Çünkü Primary bir veri yazdığında dosya izinlerinide değiştiriyor. Sonrasında ise sorun çözüldü.

Bir yazamında özellikle haftalarca uğraşıp anlamaya çalıştığım bu lab’ın bittiği ve sonucun iyi olduğu için çok mutluyum. Umarım burada paylaşmış olduğum bilgiler hepiniz için yararlı oluyordur. Desteklerinizi ve önerilerinizi belirtmek isterseniz ise lütfen bana yorumlar kısmından yazarak ulaşın. Herkese kolaylıklar diliyorum.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir