Yüksek Erişebilirlik (High Availability) Kavramları

Donanım arızası, dosya bozulmaları vb. nedenlerden veritabanı erişilemez olduğunda
yedekten geri yüklemenin (restore/recover) zaman maliyeti yüksektir.
Terabyte’larca verinin olduğu bir veritabanının geri yüklenmesi donanım performansına
(disk/san IOPS, CPU, Network) bağlı olarak yarım gün veya daha fazla sürebilir.
Kaybedilecek iş kaybı ve itibar da düşünüldüğünde bu riskleri eleminize etmek
önceliklidir.
Postgresql’in en yaygın kullanılan streaming replication, yukarıda bahsedilen riskler için
iyi bir çözümdür.
Streaming replication çözümüne, fiziksel (physical) standby ve hot standby da denilir.
Gömülü (built-in) olarak gelir, ek bir yazılıma gerek yoktur. Ayarları yapılarak devreye
alınabilir.
Standby, primary’nin bire bir aynısıdır. Primary sunucuda oluşturulan tüm veritabanları
objeler tablolar vs. aynen standbyda da oluşturulur. Primary’de silinenler, standby
sunucuda da silinir.
Sadece okumaya açıktır. Raporlamalar standby sunucuya yönlendirilerek yük
dengeleme yapılabilir.
Standby sunucu, bir restart süresinde primary rolünü üzerine alabilir.
FKM’ye* de stanby kurulumu yapılarak deprem, sel, yangın vb. felaketler için de çözüm
getirilmiş olur.
Belirli bir zaman geriden gelen standby sunucu da konumlandırılıp, kullanıcı hatalarına
da çözüm olur.
Birinci bölümde anlatıldığı üzere postgresql’de cluster, veri dosyalarının bulunduğu
dizini adresler.
Cluster kelimesinin diğer anlamı ise, yüksek erişilebilirlikte (HA) ortamları için kullanılan
kümeleme anlamında kullanılır. Aktif-aktif ya da Aktif-Pasif (Primary-Secondary)
mimarili, sunucuların instance seviyesinde yedekli çalıştığı ortamlar için kullanılan
tanımdır.
*Felaket Kurtarma Merkezi : Farklı bir ilde veya kıtada, sunucuların kopyalarının
tutulduğu veri verkezi.

Streaming replication, log shipping metodu üzerinde çalışan bir replikasyon yöntemidir.
Log Shipping metodunda;
- Arşiv moddaki (Continuous archiving) primary’den base_backup (initial data)
alınıp standby sunucuya geri yükleme (restore) yapılır. - Oluşan WAL dosyaları işletim sistemi seviyesinde network üzerinden standby
sunucuya gönderilir. - Standby sunucu gelen bu WAL dosyalarını tek tek işler.
Streaming replication metodunda;
Primary sunucuda WAL dosyasının (default boyut 16MB) dolması beklenmeden WAL
record’ ları saniyeden daha kısa bir sürede standby veritabanına göndererek sürekli
güncel kalmasını sağlar.
Log shipping metodunda standby’a WAL segmentleri gönderilirken, streaming
metodunda saniyeden daha kısa sürede WAL recordlarını gönderir. Böylece streaming
metodu standby’ların daha güncel kalmasını sağlar.
Replication slot kullanılırsa, standby da işlenmemiş WAL dosyalarının silinmesi
engellenir. Standby sunucusu sayısına bağlı olarak slot sayısı artırılabilir.
WAL Sender prosesi, primary sunucuda çalışır. Standby sunuculardan gelen istekleri
kabul eder ve WAL record‘ları standby sunucuya gönderir.
WAL receiver prosesi, standby sunucuda çalışır. WAL recordları alır.
Startup, standby sunucuda çalışır. WAL recordları işler.
Async default ayardır. Sync çalıştırılmak istenirse primary tarafında performans
sorunlarına neden olabilir.
restore_command = 'cp /mnt/RA/archive/%f "%p"' primary_conninfo = 'user=replicator passfile=/var/lib/postgresql/ pgpass host=192.168.56.71 port=5432 sslmode=prefer application_ name=pgdb2 gssencmode=prefer channel_binding=prefer' recovery_target_timeline = 'latest'
Standby sunucu başlatıldığında sıra ile ;
- restore_command’ta belirtilen lokasyondaki WAL dosyalarını işler (restore/
recover). - $PGDATA/pg_wal dizinindeki WAL dosyalarını işler .
Bu iki adım log shipping işlemleridir.
Streaming replication aktif edildi ise yani primary_conninfo ayarlandı ise. - primary_conninfo bağlantı bilgileri ile primary sunucuya bağlanıp WAL
recordları çeker ve işler.
Bağlantıda ya da ihtiyaç duyulan WAL record’a ulaşılamadığında 1. adımdan başlayarak
döngüyü tekrar eder.
Bu süreçte hata çözümü için posgresql ve replikasyon için kullanılan yazılımların logları
incelenir.
Not: $PGDATA dizinindeki standby.signal text dosyası, o veritabanı
sunucusunun standby rolünde olduğunu belirtir. İçeriğinde birşey bulunmaz.recovery_target_timeline = ’latest’ default değerdir.
Primary veritabanına ulaşılamadığı durumlarda iki adımla standby sunucu primary
rolünü üzerina alabilir.
Adım 1 Primary sunucudapg_ctl stop -D $PGDATA
Adım 2 Standby sunucudapg_ctl promote -D $PGDATA
