PostgreSQL 12 Barman ile Streaming Yedekleme

Zekiye AYDEMİR
5 min readJan 14, 2020

Barman, PostgreSQL’de açık kaynaklı bir backup/restore yönetim aracıdır.

Barman ile neler yapabilirsiniz?

Aynı sunucu üzerinde yedek alabilirsiniz.

Farklı bir backup sunucusuna yedek alabilirsiniz.

Birden fazla PostgreSQL cluster yedeği alabilirsiniz.

PostgreSQL’in farklı ana sürümlerinde çalışan birden fazla PostgreSQL Cluster’ından yedekleme yaparak verilerinizi merkezi bir backup sunucusunda toplayabilirsiniz.

Barman ile 2 farklı şekilde yedekleme yapabilirsiniz:

  • rsync/ssh
  • streaming

Barman ile streaming backup alırken backup sunucusu ile veritabanı arasında 3 bağlantı kurulur. Bunlardan 1.PostgreSQL connection’ı yönetim işlemleri için kurulur, 2. Streaming Backup bağlantısı pg_basebackup ile full yedek alımı için kurulur, 3.WAL Streaming bağlantısı pg_receivewal ile veritabanındaki WAL dosyalarının alımı için kurulur.

Burada PostgreSQL sunucusu üzerinde /pg_backup dizinine yedekleme senaryosunu ele alacağız:

Barman Kurulumu

Debian ve türevleri için:

sudo apt update
sudo apt install barman

RedHat ve türevleri için:

sudo yum update 
sudo yum install barman

PostgreSQL Ayarları

PostgreSQL’de yedekleme işlemleri için superuser hakkına sahip barman kullanıcısı ve streaming işlemleri için replication hakkına sahip streaming_barman kullanıcısını oluşturuyoruz:

createuser --superuser barman
createuser --replication streaming_barman

Ya da psql ile bağlanarak aşağıdaki gibi oluşturabiliriz:

CREATE USER barman SUPERUSER;
CREATE USER streaming_barman REPLICATION;

Kullanıcının veritabanına bağlanabilmesi için pg_hba.conf dosyasını düzenliyoruz:

vim /var/lib/pgsql/12/data/pg_hba.conf
>>
local all barman trust
local replication streaming_barman trust

Burada PostgreSQL cluster’ı ile Barman aynı sunucu üzerinde ve sunucu üzerinde tek bir PostgreSQL cluster’ı olduğu için local’den bağlanacak şekilde ayarladım.

Not: Yukarıdaki gibi pg_hba.conf dosyasında trust ile barman kullanıcıları parola gerekmeden bağlanabilecekler, parola ile bağlanmaları durumunda trust yerine md5 yazıp barman kullanıcısı için ~barman/.pgpass dosyası oluşturarak bağlanabilirsiniz.

pg_hba.conf dosyasında yapılan bir değişikliğin etkin olabilmesi için PostgreSQL servisi reload işlemine ihtiyaç duyar. psql ile bağlanarak aşağıdaki komutla yapabiliriz:

SELECT pg_reload_conf();

Örnek komut çıktısı aşağıdaki gibidir:

Oluşturduğumuz barman kullanıcısının erişimini aşağıdaki komut ile kontrol edebiliriz:

su - barman 
psql -c 'SELECT version()' -U barman -d postgres

Örnek çıktı aşağıdaki gibidir:

Streaming işlemleri için replication haklarına sahip streaming_barman kullanıcısının bağlantısını aşağıdaki gibi kontrol edebiliriz:

su - barman 
psql -U streaming_barman -c "IDENTIFY_SYSTEM" replication=1

Örnek komut çıktısı aşağıdaki gibidir:

Barman Ayarları

Barman 2 tip konfigürasyon dosyasına sahiptir:

/etc/barman.conf -> Global konfigürasyon dosyasıdır. Log dosyası, backup kullanıcısı, backup dizini gibi genel yedekleme konfigürasyonlarını barındırır.

barman.conf dosyasını aşağıdaki gibi düzenliyoruz:

vim /etc/barman.conf
>>
[barman]
active = true
barman_user = barman
barman_home = Backup_Dizini
log_file = Backup_Log_Dosyası
log_level = INFO
compression = gzip
retention_policy = REDUNDANCY 3
immediate_checkpoint = true
last_backup_maximum_age = 4 DAYS
minimum_redundancy = 1

/etc/barman.d -> Server konfigürasyon dosyaları varsayılan olarak /etc/barman.d dizini altındadır. Barman ile alabileceğimiz streaming ve rsync her iki tip yedekleme için bu dizin altında template konfigürasyon dosyaları mevcuttur. Barman ile backup almak istediğiniz her bir PostgreSQL cluster’ı için bir konfigürasyon dosyasını bu template dosyalarını kullanarak oluşturabilirsiniz.

Öncelikle cluster data dizini adıyla template dosyalardan streaming-server.conf-template dosyasını kopyalıyoruz ve dosyayı düzenliyoruz:

cp /etc/barman.d/streaming-server.conf-template \ /etc/barman.d/12_data.conf

Tek bir barman ile birden fazla PostgreSQL cluster’ının yedeğini alabilirsiniz demiştim. Yedeğini almak istediğiniz her bir PostgreSQL cluster’ı için /etc/barman.d/ dizini altında bir backup server dosyası oluşturulmalıdır.

Dosya içinde aşağıdaki parametreleri düzenliyoruz:

vim /etc/barman.d/12_data.conf
>>
[12_data]
description = "Cluster 12/data (Streaming-Only)"
conninfo = user=barman dbname=postgres host=localhost port=5432
streaming_conninfo = user=streaming_barman host=localhost port=5432
streaming_archiver = on
slot_name = barman

12_data : Backup server adı belirliyoruz. İlerleyen kısımlarda backup işlemlerinde bu server adı ile işlem yapacağız.

conninfo : Barman’in PostgreSQL’e yapacağı bağlantının bilgileri veriyoruz.

streaming_conninfo : Streaming işlemler için yapılacak bağlantının bilgilerini veriyoruz.

streaming_archiver : WAL archive alımını aktif ediyoruz.

slot_name : Barman ile PostgreSQL’de oluşturacağımız slot’un adını veriyoruz.

Barman kullancısına bağlanarak slot oluşturuyoruz:

su - barman
barman receive-wal --create-slot 12_data

Örnek çıktısı aşağıdaki gibidir:

Konfigürasyon dosyasında belirttiğimiz slot_name ile bir slot oluşturur.

Oluşturulan slot’u aşağıdaki gibi kontrol edebilirsiniz:

psql -c "Select slot_name,slot_type, active from pg_replication_slots" -U barman -d postgres

WAL dosyalarının streaming ayarlarının kontrolü için;

su - barman
barman switch-wal --force --archive 12_data

Barman yapılandırmasının doğruluğunu aşağıdaki gibi kontrol edebilirsiniz:

İlk yedeği aşağıdaki komutla alabilirsiniz:

barman backup 12_data --wait

Server’ın genel durumunu aşağıdaki gibi kontrol edebilirsiniz:

Barman ile Yedekten Geri Dönme

Sunucu üzerinde barman kullanıcısının erişebildiği bir dizine aşağıdaki gibi recovery yapabilirsiniz:

barman recover <Server_Name> <Backup_ID> <Recovery_Directory>

Örnek komut çıktısı aşağıdaki gibidir:

Belirli bir zamana geri dönmek için target-time parametresi ile zaman belirtebiliriz:

barman recover 12_data 20200113T230114 /db/pg_data/12/data --target-time "Mon Jan 13 23:20:29 +03 2020"

Bu yazımda temel seviyedeki konfigürasyonlarla yedeklemeye değindim. Daha detaylı bilgi için barman’in web sayfası olan https://www.pgbarman.org/ adresinden yararlanabilirsiniz.

--

--

Zekiye AYDEMİR

PostgreSQL Certified DBA | MongoDB Certified DBA | AWS Certified Admin