Barman Kullanarak CentOS 7 Üzerinde PostgreSQL Veritabanlarını Yedekleme, Geri Yükleme ve Taşıma
PostgreSQL, güvenilirliği, güçlü özellikleri ve açık kaynak yapısıyla dünya genelinde en popüler ilişkisel veritabanı sistemlerinden biridir. Kurumsal uygulamalardan küçük projelere kadar geniş bir yelpazede kullanılmaktadır. Ancak, herhangi bir kritik veri sisteminde olduğu gibi, PostgreSQL veritabanlarının da düzenli ve güvenilir bir şekilde yedeklenmesi, olası veri kaybı durumlarında geri yüklenebilmesi ve gerektiğinde farklı ortamlara taşınabilmesi hayati öneme sahiptir. Geleneksel yedekleme yöntemleri (örneğin, pg_dump veya dosya sistemi seviyesinde yedeklemeler) belirli senaryolar için yeterli olsa da, büyük ölçekli veritabanları veya felaket kurtarma senaryoları için yetersiz kalabilir. Özellikle “Point-in-Time Recovery” (PITR) olarak bilinen belirli bir zamana geri dönme yeteneği, bu yöntemlerle genellikle zor veya imkansızdır.
İşte tam bu noktada Barman (Backup and Recovery Manager) devreye girer. Barman, PostgreSQL için özel olarak tasarlanmış, felaket kurtarma ve sürekli arşivleme özelliklerini destekleyen açık kaynaklı bir yedekleme ve kurtarma aracıdır. Barman, pg_basebackup ve WAL (Write-Ahead Log) dosyalarının sürekli arşivlenmesi prensibine dayanarak tam yedeklemeler, artımlı yedeklemeler ve PITR yetenekleri sunar. Bu makalede, CentOS 7 işletim sistemi üzerinde Barman kullanarak PostgreSQL veritabanlarının nasıl yedekleneceğini, geri yükleneceğini ve farklı bir sunucuya nasıl taşınacağını adım adım detaylı bir şekilde inceleyeceğiz. Bu rehber, veritabanı yöneticileri ve sistem mühendisleri için PostgreSQL yedekleme stratejilerini güçlendirmek adına kapsamlı bir kaynak olmayı hedeflemektedir.
Ön Gereksinimler ve Sistem Kurulumu
Barman ile başarılı bir yedekleme ve kurtarma ortamı kurmak için belirli ön gereksinimleri karşılamamız gerekmektedir. Bu rehberde, en az iki adet CentOS 7 sunucusu kullanacağız: biri PostgreSQL veritabanı sunucusu (birincil sunucu), diğeri ise Barman yedekleme sunucusu. İsteğe bağlı olarak, geri yükleme ve taşıma işlemlerini test etmek için üçüncü bir sunucu da kullanabilirsiniz.
Gerekli Sunucular ve Rolleri:
* PostgreSQL Sunucusu (PG_SERVER): PostgreSQL veritabanının çalıştığı sunucu. IP adresi: 192.168.1.10 (örnek).
* Barman Sunucusu (BARMAN_SERVER): Barman uygulamasının ve yedeklerin depolandığı sunucu. IP adresi: 192.168.1.20 (örnek).
Ortak Ön Gereksinimler:
1. Ağ Bağlantısı: Her iki sunucu arasında ağ bağlantısı olmalı ve SSH (Port 22) ile PostgreSQL (Port 5432) portları arasında erişim sağlanmalıdır.
2. Kullanıcı Hesapları:
* PostgreSQL sunucusunda: postgres işletim sistemi kullanıcısı ve PostgreSQL veritabanı süper kullanıcısı (veya özel bir replikasyon kullanıcısı).
* Barman sunucusunda: barman adında özel bir işletim sistemi kullanıcısı.
3. SSH Anahtar Tabanlı Kimlik Doğrulama: Barman sunucusundan PostgreSQL sunucusuna ve PostgreSQL sunucusundan Barman sunucusuna parolasız SSH erişimi kurulmalıdır. Bu, güvenli ve otomatik yedekleme işlemleri için kritiktir.
4. SELinux ve Güvenlik Duvarı:
* SELinux: Test ortamlarında devre dışı bırakılabilir (setenforce 0 ve /etc/selinux/config dosyasında SELINUX=disabled). Üretim ortamlarında ise Barman ve PostgreSQL için gerekli kuralların yapılandırılması önerilir.
* Güvenlik Duvarı (FirewallD): Gerekli portların açıldığından emin olun.
* Barman sunucusunda: PostgreSQL sunucusundan gelen SSH trafiği için port 22.
* PostgreSQL sunucusunda: Barman sunucusundan gelen SSH trafiği için port 22 ve PostgreSQL bağlantıları için port 5432.
# PostgreSQL Sunucusunda
sudo firewall-cmd --permanent --add-source=192.168.1.20 --add-port=5432/tcp
sudo firewall-cmd --permanent --add-source=192.168.1.20 --add-port=22/tcp # Barman'ın SSH erişimi için
sudo firewall-cmd --reload
# Barman Sunucusunda
sudo firewall-cmd --permanent --add-source=192.168.1.10 --add-port=22/tcp # PostgreSQL'in SSH erişimi için (WAL arşivleme)
sudo firewall-cmd --reload
PostgreSQL Sunucusu Kurulumu (PG_SERVER):
PostgreSQL sunucusunda, PostgreSQL veritabanı kurulu ve çalışır durumda olmalıdır. Eğer kurulu değilse, aşağıdaki adımları izleyebilirsiniz:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql12-server postgresql12-contrib
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl enable postgresql-12
sudo systemctl start postgresql-12
Barman Sunucusu Kurulumu ve Yapılandırması
Barman sunucusunda, Barman yazılımını kuracak ve PostgreSQL sunucusu ile iletişim kurması için gerekli yapılandırmaları yapacağız.
Barman Kullanıcısı Oluşturma:
Barman işlemlerini yönetmek için barman adında özel bir sistem kullanıcısı oluşturalım.
sudo useradd -m barman
sudo passwd barman # Güvenli bir parola belirleyin
EPEL ve Barman Kurulumu:
Barman, EPEL (Extra Packages for Enterprise Linux) deposunda bulunur. Önce EPEL’i, ardından Barman’ı ve PostgreSQL istemci araçlarını kuralım.
sudo yum install -y epel-release
sudo yum install -y barman postgresql12
postgresql12 paketi, Barman’ın pg_basebackup gibi PostgreSQL araçlarını kullanabilmesi için gereklidir.
SSH Anahtar Tabanlı Kimlik Doğrulama Yapılandırması:
Bu adım, Barman ve PostgreSQL sunucuları arasında güvenli ve parolasız iletişimi sağlamak için hayati öneme sahiptir.
1. Barman’dan PostgreSQL’e SSH Erişimi:
* Barman sunucusunda barman kullanıcısı olarak SSH anahtarı oluşturun:
sudo su - barman
ssh-keygen -t rsa -b 4096 -C "barman@BARMAN_SERVER"
# Parola istemediğinde Enter'a basın
* Oluşturulan genel anahtarı (~/.ssh/id_rsa.pub) PostgreSQL sunucusundaki postgres kullanıcısının ~/.ssh/authorized_keys dosyasına kopyalayın.
ssh-copy-id -i ~/.ssh/id_rsa.pub postgres@192.168.1.10
# İlk bağlantıda postgres kullanıcısının parolasını girmeniz gerekecek.
* Test edin:
ssh postgres@192.168.1.10 "hostname"
# PostgreSQL sunucusunun hostname'ini görmelisiniz.
2. PostgreSQL’den Barman’a SSH Erişimi (WAL Arşivleme için):
* PostgreSQL sunucusunda postgres kullanıcısı olarak SSH anahtarı oluşturun:
sudo su - postgres
ssh-keygen -t rsa -b 4096 -C "postgres@PG_SERVER"
# Parola istemediğinde Enter'a basın
* Oluşturulan genel anahtarı (~/.ssh/id_rsa.pub) Barman sunucusundaki barman kullanıcısının ~/.ssh/authorized_keys dosyasına kopyalayın.
ssh-copy-id -i ~/.ssh/id_rsa.pub barman@192.168.1.20
# İlk bağlantıda barman kullanıcısının parolasını girmeniz gerekecek.
* Test edin:
ssh barman@192.168.1.20 "hostname"
# Barman sunucusunun hostname'ini görmelisiniz.
Bu SSH yapılandırmaları, Barman’ın PostgreSQL sunucusundan temel yedeklemeleri alması ve PostgreSQL’in WAL dosyalarını Barman sunucusuna arşivlemesi için gereklidir.
Barman Yedekleme Dizini Oluşturma:
Barman, yedekleri ve WAL dosyalarını depolamak için belirli bir dizine ihtiyaç duyar. Bu dizini barman kullanıcısı için oluşturalım ve gerekli izinleri verelim.
sudo mkdir -p /var/lib/barman/main_pg
sudo chown -R barman:barman /var/lib/barman/main_pg
Burada main_pg, yedeklenecek PostgreSQL sunucusu için bir sunucu adı olarak kullanılacaktır.
PostgreSQL Sunucusunun Barman İçin Yapılandırılması
PostgreSQL veritabanının Barman ile uyumlu çalışabilmesi için bazı yapılandırma değişiklikleri yapılması gerekmektedir. Bu değişiklikler, veritabanının WAL dosyalarını arşivlemesini ve Barman’ın pg_basebackup ile temel yedeklemeler almasını sağlar.
postgresql.conf Dosyasını Düzenleme:
PostgreSQL veri dizininizdeki (/var/lib/pgsql/12/data/ gibi) postgresql.conf dosyasını düzenleyin.
sudo vi /var/lib/pgsql/12/data/postgresql.conf
Aşağıdaki parametreleri ayarlayın veya güncelleyin:
* wal_level = replica: Bu ayar, WAL dosyalarının replikasyon ve yedekleme için yeterli bilgiyi içermesini sağlar. PITR için gereklidir.
* archive_mode = on: Bu ayar, PostgreSQL’in WAL dosyalarını arşivlemesini etkinleştirir.
* archive_command = 'rsync -a %p barman@192.168.1.20:/var/lib/barman/main_pg/wal/%r': Bu komut, PostgreSQL’in tamamlanmış WAL dosyalarını Barman sunucusuna nasıl göndereceğini belirtir.
* %p: Arşivlenecek WAL dosyasının tam yolu.
* %r: Geçici olarak oluşturulan WAL dosyasının adı.
* barman@192.168.1.20: Barman sunucusundaki barman kullanıcısı ve IP adresi.
* /var/lib/barman/main_pg/wal/: Barman sunucusunda WAL dosyalarının depolanacağı dizin. Bu dizin Barman tarafından otomatik olarak oluşturulacaktır, ancak üst dizinin (/var/lib/barman/main_pg) var olduğundan ve izinlerinin doğru olduğundan emin olun.
* rsync -a: Dosyaları arşiv modunda (özyinelemeli, sembolik bağlantıları koru, izinleri koru vb.) kopyalamak için kullanılır.
* max_wal_senders = 5: Barman’ın WAL akışı (streaming_wal) kullanması durumunda veya başka replikasyon yuvaları için kaç adet WAL gönderici sürecinin çalışabileceğini belirtir. Barman için en az 1-2 adet yeterlidir.
* wal_keep_segments = 0: Eğer streaming_wal kullanılıyorsa, bu değeri 0 olarak bırakmak genellikle önerilir, çünkü WAL dosyaları replikasyon yuvaları tarafından yönetilir. Ancak, standby sunucularınız varsa veya belirli bir WAL geçmişini korumak istiyorsanız bu değeri artırabilirsiniz.
pg_hba.conf Dosyasını Düzenleme:
Barman’ın PostgreSQL sunucusuna bağlanmasına izin vermek için pg_hba.conf dosyasını düzenleyin.
sudo vi /var/lib/pgsql/12/data/pg_hba.conf
Dosyanın sonuna aşağıdaki satırları ekleyin:
# Barman Sunucusundan gelen bağlantılara izin ver
host all barman_repl 192.168.1.20/32 md5
host replication barman_repl 192.168.1.20/32 md5
* barman_repl: Barman’ın PostgreSQL’e bağlanmak için kullanacağı özel bir replikasyon kullanıcısı.
* 192.168.1.20/32: Barman sunucusunun IP adresi.
Replikasyon Kullanıcısı Oluşturma:
PostgreSQL veritabanında barman_repl kullanıcısını oluşturalım ve replikasyon yetkisi verelim.
sudo -u postgres psql
CREATE USER barman_repl WITH REPLICATION ENCRYPTED PASSWORD 'sifreniz';
\q
sifreniz yerine güçlü bir parola kullanmayı unutmayın.
PostgreSQL’i Yeniden Başlatma:
Yapılandırma değişikliklerinin etkili olması için PostgreSQL hizmetini yeniden başlatın.
sudo systemctl restart postgresql-12
Barman’ı PostgreSQL Sunucusu İçin Yapılandırma
Şimdi Barman sunucusunda, yedeklenecek PostgreSQL sunucusunu tanımlayan bir yapılandırma dosyası oluşturacağız. Barman yapılandırma dosyaları genellikle /etc/barman.d/ dizininde bulunur.
sudo su - barman
vi /etc/barman.d/main_pg.conf
Aşağıdaki içeriği dosyaya ekleyin:
[main_pg]
description = "Ana PostgreSQL Veritabanı"
ssh_command = ssh postgres@192.168.1.10
conninfo = host=192.168.1.10 user=barman_repl dbname=postgres password=sifreniz
streaming_conninfo = host=192.168.1.10 user=barman_repl dbname=postgres password=sifreniz
backup_method = rsync
streaming_wal = on
slot_name = barman_slot # PostgreSQL 10 ve sonrası için önerilir
retention_policy = REDUNDANCY 3
compression = gzip
Parametrelerin açıklamaları:
* [main_pg]: Yedeklenecek sunucu için benzersiz bir tanımlayıcı.
* description: Sunucunun kısa açıklaması.
* ssh_command: Barman’ın PostgreSQL sunucusuna bağlanmak için kullanacağı SSH komutu. postgres kullanıcısı ve PostgreSQL sunucusunun IP adresi.
* conninfo: Barman’ın PostgreSQL veritabanına bağlanmak için kullanacağı bağlantı dizesi. barman_repl kullanıcısı ve parolası burada belirtilir.
* streaming_conninfo: WAL akışı için kullanılan bağlantı dizesi. Genellikle conninfo ile aynıdır.
* backup_method = rsync: Temel yedeklemeler için rsync kullanır. Alternatif olarak postgres (yani pg_basebackup) da kullanılabilir. postgres yöntemi genellikle daha güvenilirdir ve önerilir. Bu durumda backup_method = postgres olarak ayarlanır ve ssh_command yerine pg_basebackup doğrudan kullanılır.
* streaming_wal = on: WAL dosyalarının sürekli olarak akışla alınmasını etkinleştirir. Bu, archive_command ile birlikte veya onun yerine kullanılabilir ve genellikle daha güncel kurtarma noktaları sağlar.
* slot_name = barman_slot: PostgreSQL 9.4 ve sonrası için replikasyon yuvaları (replication slots) kullanmak, WAL dosyalarının Barman tarafından alınana kadar PostgreSQL sunucusunda tutulmasını garanti eder. Bu, veri kaybını önlemek için çok önemlidir. Bu yuva Barman tarafından otomatik olarak oluşturulur.
* retention_policy = REDUNDANCY 3: En az 3 tam yedeklemenin her zaman saklanmasını sağlar. Eski yedeklemeler otomatik olarak silinir. Tarih bazlı (RECOVERY WINDOW) politikalar da kullanılabilir.
* compression = gzip: Yedeklerin gzip ile sıkıştırılmasını sağlar. Bu, disk alanından tasarruf sağlar.
Önemli Not: slot_name kullanıyorsanız, PostgreSQL sunucusunda max_replication_slots değerini en az 1 olarak ayarladığınızdan emin olun (postgresql.conf dosyasında).
# PostgreSQL sunucusunda
sudo vi /var/lib/pgsql/12/data/postgresql.conf
max_replication_slots = 1 # veya daha fazla
sudo systemctl restart postgresql-12
Barman Yapılandırmasını Test Etme:
Yapılandırmanın doğru olup olmadığını kontrol etmek için barman check komutunu kullanın.
barman check main_pg
Tüm kontrollerin OK olarak dönmesi gerekmektedir. Eğer herhangi bir hata varsa (örneğin SSH erişimi, archive_command kontrolü, bağlantı bilgileri), bu hataları düzeltmeniz gerekir. Özellikle WAL archiving is not active hatası alırsanız, archive_command ayarınızı ve SSH erişimini tekrar kontrol edin.
Yedekleme İşlemleri
Barman yapılandırması tamamlandıktan sonra, veritabanının ilk tam yedeklemesini alabiliriz.
Tam Temel Yedekleme Alma:
İlk yedekleme, tüm veritabanının bir anlık görüntüsünü içerir.
barman backup main_pg
Bu komut, PostgreSQL sunucusunda pg_basebackup (veya rsync eğer backup_method=rsync ise) kullanarak veritabanının temel yedeklemesini alır ve Barman sunucusuna kaydeder. Yedekleme sırasında, PostgreSQL sunucusu WAL dosyalarını Barman’a arşivlemeye devam edecektir.
Yedeklemeleri Doğrulama:
Alınan yedeklemeleri listelemek ve durumlarını kontrol etmek için:
barman list-backup main_pg
Bu komut, her bir yedeklemenin kimliğini, başlangıç/bitiş zamanını, boyutunu ve durumunu gösterir.
Yedeklemeleri Zamanlama (Cron ile):
Düzenli yedeklemeler için cron işi kurmanız önerilir. barman kullanıcısının crontab’ını düzenleyin:
crontab -e
Aşağıdaki satırı ekleyerek her gece 01:00’de tam yedekleme almasını sağlayabilirsiniz:
0 1 * /usr/bin/barman backup main_pg
WAL dosyaları archive_command veya streaming_wal sayesinde sürekli olarak Barman sunucusuna gönderildiği için, tam yedeklemeler arasında oluşan değişiklikler de korunur.
Veritabanı Geri Yükleme İşlemleri (Point-in-Time Recovery – PITR)
Barman’ın en güçlü özelliklerinden biri, veritabanını belirli bir zamana geri yükleme yeteneğidir (PITR). Bu, veri kaybı veya bozulması durumunda kritik öneme sahiptir.
Senaryo: Veritabanı Bozulması veya Yanlışlıkla Silme
Diyelim ki PostgreSQL sunucusunda kritik bir tablo yanlışlıkla silindi veya veritabanı bozuldu. Veritabanını belirli bir zamana (örneğin, silinme olayından hemen önceki ana) geri yüklememiz gerekiyor.
1. Geri Yüklenecek Sunucuyu Hazırlama:
* Bu, orijinal PostgreSQL sunucusu veya yeni bir sunucu olabilir. Yeni bir sunucu kullanılıyorsa, PostgreSQL’in kurulu olması ancak çalışmıyor olması gerekir.
* Eğer orijinal sunucuyu kullanıyorsanız, PostgreSQL hizmetini durdurun ve mevcut veri dizinini yedekleyin veya silin (dikkatli olun!).
sudo systemctl stop postgresql-12
sudo rm -rf /var/lib/pgsql/12/data/* # Sadece test ortamında yapın!
* Yeni bir veri dizini oluşturun ve postgres kullanıcısına ait olduğundan emin olun.
sudo mkdir -p /var/lib/pgsql/12/data_restore
sudo chown postgres:postgres /var/lib/pgsql/12/data_restore
sudo chmod 700 /var/lib/pgsql/12/data_restore
2. Barman ile Geri Yükleme:
* Barman sunucusunda barman kullanıcısı olarak geri yükleme işlemini başlatın.
* Önce mevcut yedeklemeleri ve kurtarma noktalarını kontrol edin:
barman list-backup main_pg
# Geri yüklemek istediğiniz yedeklemenin kimliğini (örneğin, 20230315T010000) ve kurtarma zamanını not alın.
* Belirli bir zamana geri yükleme:
barman recover --target-time "2023-03-15 10:30:00.000000+03" main_pg 20230315T010000 /var/lib/pgsql/12/data_restore
* --target-time: Veritabanının geri yükleneceği tam zaman damgası.
* main_pg: Yedeklemenin alındığı sunucu adı.
* 20230315T010000: Geri yükleme için kullanılacak temel yedeklemenin kimliği (en son yedekleme için LATEST kullanabilirsiniz).
* /var/lib/pgsql/12/data_restore: Veritabanı dosyalarının geri yükleneceği hedef dizin.
* Alternatif olarak, belirli bir işlem kimliğine (--target-xid) veya adlandırılmış bir kurtarma noktasına (--target-name) da geri yüklenebilir.
3. Geri Yüklenen Veritabanını Başlatma:
* Geri yükleme işlemi tamamlandığında, Barman hedef dizine bir recovery.conf (veya PostgreSQL 12 ve sonrası için postgresql.auto.conf içinde restore_command) dosyası oluşturur. Bu dosya, PostgreSQL’e hangi WAL dosyalarını nereden alacağını söyler.
* PostgreSQL veri dizinini geri yüklenen dizine bağlayın veya sembolik bağlantı oluşturun:
sudo rm -rf /var/lib/pgsql/12/data # Eğer orijinal dizini sildiyseniz
sudo ln -s /var/lib/pgsql/12/data_restore /var/lib/pgsql/12/data
sudo chown -h postgres:postgres /var/lib/pgsql/12/data # Sembolik bağlantının sahibini ayarla
* PostgreSQL hizmetini başlatın:
sudo systemctl start postgresql-12
* PostgreSQL, başlangıçta recovery.conf dosyasını okuyacak ve hedef zamana ulaşana kadar gerekli WAL dosyalarını Barman sunucusundan çekecektir. Kurtarma tamamlandığında, sunucu normal çalışmaya geçecektir.
4. Doğrulama:
* Veritabanına bağlanın ve verilerin beklendiği gibi geri yüklendiğini doğrulayın.
PostgreSQL Veritabanı Taşıma (Migration)
Veritabanı taşıma işlemi, aslında bir geri yükleme işleminin özel bir durumudur. Mevcut bir PostgreSQL veritabanını yeni bir sunucuya taşımak için Barman’ı kullanabiliriz.
Senaryo: Yeni Bir Sunucuya Geçiş
Mevcut PostgreSQL veritabanımızı PG_SERVER‘dan tamamen yeni bir sunucu olan NEW_PG_SERVER‘a (192.168.1.30 örnek IP) taşımak istiyoruz.
1. Yeni PostgreSQL Sunucusunu Hazırlama (NEW_PG_SERVER):
* Yeni sunucuya CentOS 7 kurun.
* PostgreSQL’i kurun (yukarıdaki “PostgreSQL Sunucusu Kurulumu” bölümündeki gibi), ancak initdb yapmayın veya hizmeti başlatmayın. Sadece paketleri kurun.
* postgres kullanıcısını ve gerekli dizinleri oluşturun.
* Barman sunucusundan NEW_PG_SERVER‘daki postgres kullanıcısına SSH anahtar tabanlı erişimi yapılandırın (yukarıdaki “SSH Anahtar Tabanlı Kimlik Doğrulama” bölümündeki gibi).
2. Barman ile Yeni Sunucuya Geri Yükleme:
* Barman sunucusunda barman kullanıcısı olarak geri yükleme işlemini başlatın.
* En son tam yedeklemeyi yeni sunucuya geri yükleyelim:
barman recover --remote-ssh-command "ssh postgres@192.168.1.30" main_pg LATEST /var/lib/pgsql/12/data
* --remote-ssh-command: Barman’ın geri yükleme işlemini uzaktaki NEW_PG_SERVER üzerinde postgres kullanıcısı olarak çalıştırmasını sağlar.
* main_pg: Kaynak veritabanı sunucusunun adı.
* LATEST: En son tam yedeklemeyi kullan.
* /var/lib/pgsql/12/data: Yeni sunucudaki hedef veri dizini.
3. Yeni PostgreSQL Sunucusunu Yapılandırma ve Başlatma:
* Geri yükleme işlemi tamamlandığında, NEW_PG_SERVER üzerindeki /var/lib/pgsql/12/data dizininde veritabanı dosyaları ve bir recovery.conf (veya postgresql.auto.conf içinde restore_command) dosyası bulunacaktır.
* NEW_PG_SERVER üzerindeki postgresql.conf ve pg_hba.conf dosyalarını eski sunucudaki gibi veya yeni ortamın gerektirdiği şekilde düzenleyin. Özellikle listen_addresses, port ve pg_hba.conf içindeki bağlantı kurallarını kontrol edin.
* PostgreSQL hizmetini başlatın:
# NEW_PG_SERVER üzerinde
sudo systemctl enable postgresql-12
sudo systemctl start postgresql-12
* PostgreSQL, recovery.conf dosyasını kullanarak kurtarma işlemini tamamlayacak ve ardından normal çalışmaya geçecektir.
4. Taşımayı Doğrulama ve Uygulamaları Yönlendirme:
* Yeni sunucudaki veritabanına bağlanın ve verilerin eksiksiz ve doğru olduğunu doğrulayın.
* Uygulamalarınızın ve diğer hizmetlerinizin veritabanı bağlantı dizelerini yeni sunucunun IP adresine veya DNS adına güncelleyin.
* Eski PostgreSQL sunucusunu durdurmadan önce yeni sunucunun tam olarak işlevsel olduğundan emin olun.
Bakım ve En İyi Uygulamalar
* Düzenli Yedekleme Testleri: Yedeklemelerinizin gerçekten geri yüklenebilir olduğunu düzenli olarak test edin. Bir yedekleme, geri yüklenemiyorsa hiçbir işe yaramaz.
* Disk Alanı Yönetimi: Barman sunucusunda yeterli disk alanı olduğundan emin olun. barman status komutu ile disk kullanımını izleyebilirsiniz. retention_policy ayarı eski yedeklemeleri otomatik olarak siler, ancak bu politikayı dikkatlice yapılandırmalısınız.
* İzleme ve Uyarılar: Barman günlüklerini (/var/log/barman.log) ve yedekleme durumunu izleyin. Yedekleme hataları veya WAL arşivleme sorunları için uyarılar kurun.
* Güvenlik: SSH anahtarlarınızı güvende tutun. Barman ve PostgreSQL için ayrılmış kullanıcılar kullanın. Güvenlik duvarı kurallarınızı sıkı tutun.
* Replikasyon Yuvaları (Replication Slots): PostgreSQL 9.4 ve sonrası için slot_name kullanmak, Barman’ın tüm WAL dosyalarını almasını garanti eder ve veri kaybını önler. Bu, archive_command‘ın olası hatalarından kaynaklanabilecek WAL kaybını engeller.
* backup_method = postgres: rsync yerine postgres (pg_basebackup) yedekleme yöntemini kullanmak genellikle daha güvenilir ve daha az yapılandırma gerektirir, çünkü PostgreSQL’in kendi yerleşik yedekleme mekanizmasını kullanır.
Sık Karşılaşılan Sorunlar ve Giderilmesi
* SSH Bağlantı Sorunları: ssh-copy-id adımlarını dikkatlice kontrol edin. ~/.ssh/authorized_keys dosyasındaki izinlerin (600) ve dizin izinlerinin (700) doğru olduğundan emin olun. ssh -vvv ile detaylı hata ayıklama yapın.
* barman check Hataları: Çıktıyı dikkatlice okuyun. Genellikle conninfo veya ssh_command parametrelerindeki yanlışlıklar, PostgreSQL yapılandırma sorunları (wal_level, archive_mode, archive_command) veya pg_hba.conf izinleri ile ilgilidir.
* WAL Arşivleme Hataları: archive_command içindeki yolun doğru olduğundan, Barman sunucusunda hedef dizinin var olduğundan ve postgres kullanıcısının o dizine yazma iznine sahip olduğundan emin olun. PostgreSQL sunucusunun günlüklerini kontrol edin.
* Disk Alanı Tükenmesi: Barman sunucusundaki disk alanını düzenli olarak izleyin. retention_policy ayarınızı gözden geçirin veya eski yedeklemeleri manuel olarak silmek için barman delete komutunu kullanın.
* SELinux Engellemeleri: Eğer SELinux etkinse, Barman’ın PostgreSQL dizinlerine veya yedekleme dizinlerine erişimini engelleyebilir. SELinux günlüklerini (/var/log/audit/audit.log) kontrol edin ve gerekli kuralları ekleyin veya SELinux’u geçici olarak devre dışı bırakın (setenforce 0).
Sonuç
Barman, PostgreSQL veritabanları için kapsamlı ve güvenilir bir yedekleme, geri yükleme ve felaket kurtarma çözümü sunar. Bu makalede, CentOS 7 üzerinde Barman’ı kullanarak PostgreSQL veritabanlarını nasıl yedekleyeceğinizi, belirli bir zamana nasıl geri yükleyeceğinizi ve farklı bir sunucuya nasıl taşıyacağınızı adım adım öğrendiniz. Barman’ın sunduğu Point-in-Time Recovery (PITR) yeteneği, veri kaybı senaryolarında veritabanınızı kritik bir önceki duruma geri döndürme esnekliği sağlayarak iş sürekliliği için hayati bir araç haline getirir.
Unutmayın ki herhangi bir yedekleme stratejisinin başarısı, yedeklemelerin düzenli olarak test edilmesine ve yedekleme ortamının doğru bir şekilde izlenmesine bağlıdır. Barman ile sağlam bir yedekleme altyapısı kurarak, PostgreSQL veritabanlarınızın güvenliğini ve kullanılabilirliğini önemli ölçüde artırabilirsiniz. Güvenilir bir yedekleme planı, her veritabanı yöneticisinin araç setinin vazgeçilmez bir parçası olmalıdır.
