Postgresql Barman Streaming Backup

Postgresql Barman Streaming Backup,Pgbarman açık kaynak olarak 2ndQuadrant tarafından geliştirilen python yazılmış olan backup aracıdır. Barman yardımı ile birden fazla postgresql’in yedeğini alabiliriz. Farklı lokasyonlarda veya farklı sunucularda olan postgresql veritabanlarının yedeğini düzenli olarak alabiliriz.

Barman yardımı ile Point-In-Time-Recovery veritabanımızın yedeğini dönebiliriz. Barman de backupları s3 ,cloud gibi farklı yerlere alabiliriz.

Barman de iki farklı yedekleme çözümü vardır:

Streaming backup : PostgreSQL 9.4  ve üzeri kullanıldığı durumlarda kullanılabilir.  Bu methotta  2 farklı connection kurulur.  Bu özellik docker ortamları için uygundur ve son derece pratiktir.

  1. Postgresql Connection : Postgresql de backup ile ilgili işlemler için kurulan connection
  2. Streaming Backup  Connection : Streaming backup Connection iki ayrı  iş için kullanılır.

Bunlar:

  • Streaming backup: Pg_basebackup yardımı ile full backup almak için kullanılır.
  • Wal Streaming      : Pg_receivexlog yardımı ile wal dosyalarının belirtilen backup sunucusuna kopyalanması için kullanılır.

Rsync/ssh:  Rsync/ssh yöntemi,rsync /ssh ve streaming backup yönteminin birleşimi şeklinde düşünebiliriz.

Bu yöntem postgresql 8.3 sürümünden sonrasını desteklemektedir fakat tablespace kullanımları için 9.2 ,9.3 sürümünden sonrasını desteklemektedir. Bundan dolayı 9.3 sürümünden sonrasını destekleyebilir desek daha uygun olur.

RSYNC/SSH yönteminde 3 farklı connection açılır türü vardır ve 4 farklı connection kurularak backup alınır.

Connection Çeşitleri:

PostgreSQL Connections: Postgresqle bağlantı sırasında kullanılan connectionlardır.

PostgreSQL Streaming Connections: Streaming backup ve Wal streaming için kullanılır.

SSH Connections : SSh yapılarak WAL arşivlemesi için kullanılır.

Centos 7 üzerinde Kuruluma geçelim :

yum install barman barman-cli barman-cloud -y

Yukarıdaki şekilde barman kurulumu yapıyoruz. Kurulum yaptıktan sonra kurulumu kontrol etmek için aşağıdaki komutu kullanabiliriz.

barman diagnose

Kurulum tamamlandıktan sonra Streaming Backup yönetimi için postgresql üzerinde işlemleri yapıyoruz.

Kurulumumuz problemsiz bir şekilde olduktan sonra streaming backup yöntemine geçelim.

PostgreSQL Streaming Backup

Streaming backup yöntemi ile backup almak için ilk olarak postgresql e bağlanarak aşağıdaki gibi kullanıcıları oluşturup yetki tanımlıyoruz.

CREATE USER barman WITH SUPERUSER;

Super user verilmeden kullanıcı oluşturmak için aşağıdaki gibi kullanıcı oluşturabilir ve aşağıdaki yetkileri tanımlayabilirsiniz.

CREATE USER streaming_barmanUser REPLICATION;

Kullanıcıları oluşturduktan sonra yetki tanımlıyoruz.

GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) to streaming_barmanUser;
GRANT EXECUTE ON FUNCTION pg_stop_backup() to streaming_barmanUser;
GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) to streaming_barmanUser;
GRANT EXECUTE ON FUNCTION pg_switch_wal() to streaming_barmanUser;
GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) to streaming_barmanUser;

GRANT pg_read_all_settings TO streaming_barmanUser;
GRANT pg_read_all_stats TO streaming_barmanUser;

 

Yukarıdaki gibi user yetkileri tanımladıktan sonra aşağıdaki pg_hba.conf üzerinde değişiklik yapmamız gerekiyor.  Bu senaryoda barman kullanıcısına superuser verildiği düşünülerek işlemler yapılmaktadır.

 

vi /var/lib/pgsql/12/data/pg_hba.conf
 
local        all              barman             trust 
local   replication    barman             trust

Yukarıdaki konfigurasyonlar postgresql ile barmanin aynı sunucu da olduğu durumlarda geçerlidir. Trust yerine md5 yada scram-sha256 yapmak isterseniz pgpass kullanabilirsiniz.

Yukarıdaki işlemlere ek olarak postgresql.conf üzerinde de aşağıdaki şekilde değişiklik yapıyoruz.

 

archive_mode= on
Archive_command= cp %p /var/lib/pgsql/12/backups/archive/%f ( Belirtilen /var/lib/pgsql/12/backups/archive/  dizini yerine archive'ı 
nereye almak istiyorsanız orayı yazabilirsiniz.)

Yukarıdaki işlemleri yapmadan point-in time recovery yapamazsınız bundan dolayı bu iki işlem önemlidir.

Archive ile ilgili parametreleri değiştirdikten sonra aşağıdaki şekilde servisimizi restart ediyoruz.

 

systemctl restart postgresql-12.service

 

Barman konfigurasyonu

Servisimizi restart ettikten sonra aşağıdaki şekilde barman streaming backup için konfigurasyonları yapıyoruz. İlk olarak barman genel ayaraları için  barman.conf içerisinde değişiklikleri yapıyoruz.

vi /etc/barman.conf 

Barman_user = barman   (barman tarafından kullanılacak user)
Barman_home= Backupların alınacağı dizin.
Log_file = Backup log dizini 
Log_level=INFO 
Compression= gzip (default olarak NONE gelmektedir. Bunun yerine gzip ile sıkıştırmak için değiştiriyoruz. Gzip,bzip2,pyzip,pgiz gibi sıkıştırma yöntemleri vardır.)
Retention_policy= REDUNDANCY 4 (son 4 backup saklansın)
Last_backup_maximum_age= 5 DAYS (son yedekleme kaç gün dursun )
Minimum_redundancy= 1

Barmanin genel backup politikalarını oluşturduk şimdi postgresql yedeklenmesi ile ilgili konfigurasyonları yapıyoruz.

Barman /etc/barman.d/ altında passive ,ssh-server,streming-server confları bulunmaktadır. Bunları kopyalarak farklı isimde oluşturuyoruz.

cp ssh-server.conf-template 12d1.conf

Yeni oluşturulan 12d1.conf içerisine girerek aşağıdaki parametreleri değiştiriyoruz.

Yukarıda sarı içerisinde işaretli olan alanları değiştiriyoruz.

12d1.conf içerisinde belirtilen “[12d1] ” artık bizim backupını almak istediğimiz sunucunun ismi oluyor.

Barman ile yapılacak işlemleri su -barman komutu ile barman kullanıcısına geçerek yapıyoruz. Yukarıdaki resimde create_slot=auto şeklinde ayarlanmıştır fakat bazen oluşturulmuyor. Oluşturulmadığı takdirde aşağıdaki şekilde slot oluşturabilirsiniz

barman receive-wal --create-slot barman12

Slotu kontrol etmek için aşağıdaki şekilde backup alınmak istenen postgresqle bağlanarak aşağıdaki sorgu ile slot oluşturulmuş mu kontrol ediyoruz.

select slot_name,slot_type, active from pg_replication_slots;

Oluşturduğumuz slotu gördükten sonra aşağıdaki şekilde wal dosyası için aşağıdaki komutu çalıştırıyoruz.

barman switch-wal --force --archive 12d1

Barman ile ilgili konfigürasyonlarımız tamamlandı.

Barman üzerinden backup almadan önce yapılan işlemleri kontrol etmek için aşağıdaki komutu çalıştırıyoruz.

barman check 12d1

Yukarıda görüldüğü  gibi  backup konfigürasyonlarımız tamamlandı. 

Barman Backup

Barman konfigürasyonlarımız tamamlandıktan sonra aşağıdaki şekilde yedeğimizi alalım.

barman backup 12d1 --wait

Yukarıda görüldüğü gibi yedeğimiz sağlıklı bir şekilde alındı. Düzenli olarak backup almak için  crontab dan faydalanabiliriz.

Aşağıdaki komut yardımı ile  backuplarımızı listeleyebiliriz.

barman list-backup 12d1

Aşağıdaki komut yardımı ile backup hakkında bilgi alabiliriz.

barman show-backup 12d1 20210128T070813

Alınan backup restore ‘u için restore edilecek dizinde barman’in owner olması gerekmekte ve barman kullanıcısı ile restore işlemi başlatılması gerekmektedir.

 

barman recover <Server_Name> <Backup_ID> <Recovery_Directory>

 

  • <Server_Name> = barman de tanımlanan postgresql backup ismi (12d1)
  • <Backup_ID>  = barman list-backup ile yada backup’ın alındığı yerde belirtilen backup id
  •  <Recovery_Directory> = Backupın dönülmek istenildiği yer.
barman recover 12d1 20210128T170450 /restoretest/ --target-time "2021-07-22 14:04"

Yukarıdaki şekilde restore edebilirsiniz yada aşağıdaki komut yardımı ile promote da edebilirsiniz.

barman recover 12d1 20210128T170450 /restoretest/ --target-time "2021-07-22 14:04" --target-action=promote

Bu işlem sonrasında data postgresql servisinin data dizinin ownerını postgresql olarak değiştirebilir ve

Servisi başlatabilirsiniz.

Backupları belirli zamanlarda almak için crontab a backup scriptlerinizi ekleyerek düzenli olarak almasını sağlayabilir ve işlem sonucunu kendinize mail olarak atabilirsiniz.

Linux mail yapılandırması ve mail atmak  ile ilgili detaylar için aşağıdaki yazıma göz atabilirsiniz.

 

Relay Hakkı Olan Sunucu Konfigürasyonu ve Mail Atmak

 

 

Loading