Anasayfa » PgBackRest Kurulumu ve Yapılandırması

PgBackRest Kurulumu ve Yapılandırması

PgBackRest Kurulumu ve Yapılandırması

Bu yazımızda PgBackRest Kurulumu , Yapılandırması ve cron ile otomatik yedekleme planlamasının nasıl yapılacağını adım adım anlatmaya çalışacağım. Bilindiği üzere Postgresql de default olarak pg_basebackup aracı ile basic olarak backup alma yöntemi mevcut fakat PITR seviyesinde restore işlemini garanti etmemektedir. pgBackRest PostgreSQL veri tabanımız için güçlü, güvenilir ve esnek bir yedekleme çözümü sunmaktadır. Kullanımı sayesinde PITR(Point-in-time recovery) yani belirli bir noktaya kadar veri tabanımızı restore etmeyi sağlayan açık kaynaklı bir servistir. Yüksek hacimli veritabanları için optimize edilmiş bu araç, paralel işlem desteği, sıkıştırma, uzaktan yedekleme ve çok daha fazlasını sunmaktadır.

WAL Log Nedir?

Kurulum adımlarına geçmeden önce “Wal Log Nedir?” kavramını anlamakta fayda var. WAL (Write-Ahead Logging), PostgreSQL’in veri güvenliğini sağlayan bir sistemidir. Bir işlem (INSERT, UPDATE, DELETE) yapılmadan önce, bu işlemin logu WAL dosyasına yazar. Bu sayede:

  • Veri kaybı riski azalır
  • Ani çöküşlerde veri kurtarma
  • Replikasyon
  • WAL Dosyalarının pgBackRest ile İlişkisi

pgBackRest sadece tam (full), fark (diff) veya artımlı (incr) yedekleri değil, aynı zamanda WAL loglarını da arşivler. Bu da şu anlama gelir:

Point-in-Time Recovery (PITR) : WAL dosyaları sayesinde, herhangi bir yedekten sonra geçen tüm işlemleri geri yükleyebilirsiniz.Yani: “Salı günü saat 15:37’ye geri dönmek istiyorum!” demek mümkün.

Yedekler Arası Köprü Görevi Görür:

Örneğin:

  • Pazartesi günü tam yedek alındı
  • Salı günü fark yedeği alındı
  • Çarşamba günü veritabanı çöktü

Yalnızca bu yedekleri geri yüklemek yeterli değildir! Aradaki tüm WAL logları da yükelemek gerekir, çünkü onlar arada gerçekleşen işlemleri içerir.

Incrimental Yedeklemeler İçin Gerekli:pgBackRest, artımlı (incr) yedek alırken sadece değişen verileri ve ilgili WAL dosyalarını kaydeder. Bu sayede yedekleme süresi kısalır ve disk alanı tasarrufu sağlanır.

  • Archive Mode’un açılması

PostgreSQL tarafında wal logları alabilmesi için archive_mode parametresinin açılması gerekmektedir. Aksi takdirde pgbackrest backup alma işlemleri yapılmayacaktır. Çünkü bir çok işlem wal loglar üzerinden yapılmaktadır. Single instance için postgresql.conf dosyasına patroni cluster da ise edit-config ile aşağıdaki gibi ekliyoruz.

patronictl -c /etc/patroni/patroni.yml edit-config
archive_mode : 'on'
archive_command : pgbackrest --stanza=prod_backup archive-push %p

Bu ayarlar sayesinde, WAL dosyaları her oluştuğunda pgBackRest’e iletilir ve arşivlenir.

Kurulumlarımız 3 node lu patroni cluster ve management(backup sunucusu) makinemizde yapılacaktır. Bu sebeple öncelikle 4 sunucumuzda da aşağıdaki gibi /etc/hosts dosyalarını düzenliyoruz.

sudo vi /etc/hosts
192.168.26.101 postgres1
192.168.26.102 postgres2
192.168.26.103 postgres3
192.168.26.104 management

pgBackRest Kurulumu

Pgbackrest servisini ayrı bir backup sunucusu oluşturup kurabileceğiniz gibi database sunucusuna da kurup backup almayı sağlayabiliriz. Kurumsal çözümlerde database sunucusuna yük bindirmemek adına ayrı bir sunucuda backup sunucusu oluşturulup kurulması tavsiye edilmektedir. Benim kurulumumda da ayrı bir backup sunucu oluşturulup database sunucusundan backup alma adımlarını anlatacağım.

Pgbackrest Kurulumu için ilk adım olarak sunularımızın ssh bağlantılarını yapıyoruz. Ssh bağlantısı işlemlerini yapmazsak backup alma ve diğer süreçlerde hata verecektir. Postgres kullanıcısı ile ssh-keygen oluşturulup ssh-copy-id ile diğer sunuculara gönderiyoruz. Postgres1 sunucumuz için adımlar aşağıda verilmiştir. Aynı adımlarla diğer sunuculardan da ssh-keygen üretip ssh-copy-id ile birbirine atmanız veya manuel kopyalamanız gerekmektedir. İşlem sonrası sunucuların birbiri arasında ssh ile geçip geçmediği kontrol edilir.

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub postgres@192.168.26.102
ssh-copy-id -i ~/.ssh/id_rsa.pub postgres@192.168.26.103
ssh-copy-id -i ~/.ssh/id_rsa.pub postgres@192.168.26.104
[postgres@postgres1.ssh]# ssh postgres2
  • PgBackRest servisinin kurulması: pgBackRest paketinin aşağıdaki komut ile RPM dosyasını indirip kuruyoruz:
sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/redhat/rhel-8.5-x86_64/pgbackrest-2.49-1PGDG.rhel8.x86_64.rpm

NOT: Pgbackrest servisini hem database sunucusuna hemde backup sunucusuna kuruyoruz.

  • Dizinleri Oluşturma ve Yetkilendirme

Aşağıdaki adımları backup sunucumuzda yapıyoruz.

mkdir -p /data/pgbackrest/repo
mkdir -p /data/pgbackrest/log
sudo chown postgres:postgres /data/

Aşağıdaki yetki işlemini db+backup sunucumuzda yapıyoruz.

sudo chown postgres:postgres /etc/pgbackrest.conf
  • pgBackRest Konfigürasyonu(Backup Sunucusu)

/etc/pgbackrest.conf dosyasını açarak aşağıdaki yapılandırmayı uygulayın(backup sunucusunda):

vi /etc/pgbackrest.conf
[global]
repo1-path=/data/pgbackrest/repo
repo1-retention-full=2
repo1-retention-diff=3
process-max=4
start-fast=y
stop-auto=y
log-path=/data/pgbackrest/log
log-level-file=info
log-level-console=detail
backup-standby=n
resume=n

[prod_backup]
pg1-path=/data
pg1-host=postgres1
pg1-host-user=postgres
pg2-path=/data
pg2-host=postgres2
pg2-host-user=postgres
pg3-path=/data
pg3-host=postgres3
pg3-host-user=postgres

Buradaki örnek yapılandırma, 3 node’lu bir Patroni Cluster sistemine göre hazırlanmıştır.

Yukarıda girmiş olduğumuz parametrelerin açıklamaları aşağıda verilmiştir:

  • pgBackRest Konfigürasyonu(Database Sunucusu)

Benim ortamımda patroni cluster da 3 adet veri tabanı sunucum var. Bu sunuculara da aşağıdaki konfigürasyonları giriyoruz.

sudo chown postgres:postgres /etc/pgbackrest.conf 
sudo vi /etc/pgbackrest.conf
[global]
repo1-host=management
repo1-host-user=postgres
log-level-console=warn
archive-async=y
		
[global:archive-get]
process-max=4
		
[global:archive-push]
process-max=4
		
[prod_backup]
pg1-path=/data
pg1-socket-path=/var/run/postgresql
  • Stanza Oluşturma ve İlk Yedekleme

Stanza, PostgreSQL veritabanı(ları) için tanımlanmış bir yedekleme grubudur. Bu yapı sayesinde farklı PostgreSQL örnekleri için ayrı ayrı yapılandırma yapabilir, yedekleme stratejilerini özelleştirebilirsiniz. Aşağıdaki komutlarla stanza’yı oluşturup ilk yedeği alabilirsiniz(Backup Sunucusunda çalıştırılır):

pgbackrest stanza-create --stanza=prod_backup

pgbackrest --stanza=prod_backup --type=full backup
  • pgBackRest stanza Yönetme

Gerekli durumlarda pgBackRest de stanzayı başlatabilir veya durdurabilirsiniz:

pgbackrest --stanza=prod_backup stop

pgbackrest --stanza=prod_backup start

Yedekleme durumunu görmek için:

pgbackrest --stanza=prod_backup info

Çıktı:

stanza: prod_backup
    status: ok
    cipher: none

    db (current)
        wal archive min/max (15): 0000002100000020000000D5/000000250000002100000088

        full backup: 20250326-141802F
            timestamp start/stop: 2025-03-26 14:18:02+03 / 2025-03-26 14:20:30+03
            wal start/stop: 0000002100000020000000D5 / 0000002100000020000000D5
            database size: 6.3GB, database backup size: 6.3GB
            repo1: backup set size: 1.7GB, backup size: 1.7GB

        incr backup: 20250326-141802F_20250326-143130I
            timestamp start/stop: 2025-03-26 14:31:30+03 / 2025-03-26 14:31:33+03
            wal start/stop: 0000002100000020000000D9 / 0000002100000020000000D9
            database size: 6.3GB, database backup size: 924.8KB
            repo1: backup set size: 1.7GB, backup size: 111.1KB
            backup reference total: 1 full

        full backup: 20250326-143140F
            timestamp start/stop: 2025-03-26 14:31:40+03 / 2025-03-26 14:34:07+03
            wal start/stop: 0000002100000020000000DB / 0000002100000020000000DB
            database size: 6.3GB, database backup size: 6.3GB
            repo1: backup set size: 1.7GB, backup size: 1.7GB
  • Crontab ile Otomatik Yedekleme Planlaması

pgBackRest yedeklemelerini otomatik hale getirmek için crontab ile zamanlayıcı tanımlayabilirsiniz. Postgres kullanıcısı için örnek bir crontab yapılandırması şu şekildedir:

crontab -e
00 22 * * 0 /usr/bin/pgbackrest --stanza=prod_backup --type=full backup
00 23 * * * /usr/bin/pgbackrest --stanza=prod_backup --type=diff backup
00 * * * * /usr/bin/pgbackrest --stanza=prod_backup --type=incr backup

Bu yapılandırma ile:

  • Her Pazar tam (full) yedek,
  • Her gün saat 22:00’de fark (diff) yedeği,
  • Her saat başı artımlı (incr) yedek alınır.

Bu yazımızda PgBackRest Kurulumu ve Yapılandırması, Wal kavramı ve uygulama adımlarını detaylı olarak görmüş olduk. Bir sonraki yazımızda Pgbackrest ile almış olduğumuz backup ile felaket anında restore işlemlerinin nasıl yapılacağını anlatıyor olacağım.

Pgbackrest hakkında resmi dokümantasyon için tıklayınız.

Diğer Postgresql yazılarımız için tıklayınız.

More Reading

Post navigation

Leave a Comment

Bir yanıt yazın

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