Senkron Replikasyon: Nedir, Nasıl Çalışır?
- 18 Ağu
- 4 dakikada okunur
Güncelleme tarihi: 20 Ağu
Veri tabanı sistemlerinde güvenilirlik ve veri bütünlüğü, birçok işletme için sistem performansından bile önce gelir. Özellikle finans, bankacılık, e-ticaret veya kritik hasta takip sistemleri gibi alanlarda tek bir satır verinin dahi kaybolması kabul edilemez bir durumdur.

PostgreSQL, bu yüksek güvenlik gereksinimini karşılamak amacıyla Senkron (Synchronous) Replikasyon mekanizmasını sunar. Bu makalede; senkron replikasyonun ne olduğunu, asenkron modelden farkını, nasıl çalıştığını, avantajlarını, dezavantajlarını ve yapılandırma detaylarını derinlemesine inceleyeceğiz.
1. Senkron Replikasyon Nedir?
Senkron replikasyon; ana sunucu (Primary) üzerinde gerçekleştirilen bir yazma işleminin (transaction), yedek sunucuya (Standby) güvenli bir şekilde ulaştığı ve işlendiği onaylanana kadar istemciye (client) “Başarılı” (Commit) yanıtının dönülmemesi esasına dayanır.
Bu yöntemde temel amaç sıfır veri kaybını (Zero Data Loss) garanti etmektir. Ana sunucu tek başına karar almaz; her kritik işlemde yedek sunucu ile el sıkışarak (handshake) ilerler.
2. Çalışma Mantığı ve El Sıkışma Süreci
Senkron replikasyonda bir yazma işleminin tamamlanma süreci oldukça katı adımlardan oluşur:
İstemci İsteği: Uygulama (istemci), Primary sunucuya bir yazma (INSERT, UPDATE, DELETE) isteği gönderir ve işlemi sonlandırmak için COMMIT çağrısında bulunur.
Lokal WAL Yazımı: Primary sunucu, bu değişikliği kendi belleğinde işler ve yerel WAL (Write-Ahead Logging) dosyasına kaydeder.
WAL Aktarımı: Primary sunucudaki wal_sender (WAL gönderici) süreci, bu WAL kayıtlarını anında ağ üzerinden Standby sunucuya gönderir.
Yedek Onayı (Acknowledge): Standby sunucudaki wal_receiver (WAL alıcı) süreci veriyi teslim alır, yapılandırmaya göre diske yazar veya uygular ve ardından Primary sunucuya "Veriyi başarıyla aldım" onay mesajını gönderir.
İstemciye Dönüş: Primary sunucu, yedekten gelen bu onayı aldıktan sonra kendi üzerindeki işlemi tamamen sonlandırır ve istemciye “İşlem başarıyla kaydedildi” yanıtını döner.
Önemli Kural: Eğer Standby sunucu onay göndermezse veya ağda bir kesinti yaşanırsa, Primary sunucu istemciye onay dönmez ve işlem (transaction) askıda (hang) bekler.
3. PostgreSQL’de Senkron Replikasyon Seviyeleri
PostgreSQL, senkronizasyonun “ne kadar sıkı” olacağını belirlemek için synchronous_commit parametresini kullanır. Bu parametreye vereceğiniz değerler, veri güvenliği ile performans arasındaki dengeyi ayarlar:
remote_apply (En Güvenli): WAL kayıtları yedek sunucuya gönderilir, diske yazılır ve yedek sunucudaki veri tabanına tamamen uygulanır (apply). Yedekten okuma yapan kullanıcıların anında güncel veriyi görmesi garanti edilir.
on (Varsayılan Senkron Seviye): WAL kayıtları yedek sunucuya ulaşır ve yedeğin diskine (WAL dosyalarına) yazılır. Verinin fiziksel olarak diske güvenli bir şekilde yazıldığı an onay dönülür.
remote_write: WAL kayıtları yedek sunucunun işletim sistemine ulaştırılır ancak henüz diske yazılmamış, sadece işletim sistemi önbelleğindedir (RAM). Ağ gecikmesini azaltır ancak yedeğin fiziksel olarak elektrik kesintisi yaşaması durumunda veri kaybı riski barındırır.
4. Senkron Replikasyonun Avantajları
Sıfır Veri Kaybı Garantisi (RPO = 0): Ana sunucu fiziksel olarak patlasa veya yansa bile, istemciye “başarılı” denilen her veri mutlaka en az bir yedek sunucuda daha güvenle saklanmaktadır.
Güvenli Failover (Sistem Devretme): Ana sunucu çöktüğünde, yedek sunucu en güncel veriye sahip olduğu için veri kaybı endişesi olmadan doğrudan yeni “Primary” ilan edilebilir.
Veri Tutarlılığı (Consistency): Özellikle remote_apply seviyesi kullanıldığında, ana sunucuya yazılan veri ile yedek sunucudan okunan veri anlık olarak tamamen aynıdır (Strong Consistency).
5. Dezavantajları ve Riskleri
Yüksek veri güvenliği, beraberinde bazı mimari zorluklar ve maliyetler getirir:
Yazma Performansında Düşüş (Latency): Her yazma işleminde ağ üzerinden gidiş-dönüş (Round Trip Time — RTT) süresi bekleneceği için yazma performansı asenkron replikasyona göre daha düşüktür.
Kullanılabilirlik (Availability) Riski: Eğer tek bir senkron Standby sunucunuz varsa ve bu sunucu çökerse, Primary sunucunuz yeni yazma işlemlerini tamamlayamaz ve kilitlenir. Sisteminiz “salt okunur” (Read-only) hale gelir.
Ağ Bağımlılığı: Ağ altyapısındaki en ufak bir dalgalanma veya yavaşlık, doğrudan veri tabanınızın yazma hızını ve uygulamanızın yanıt süresini etkiler.
6. PostgreSQL’de Nasıl Yapılandırılır?
Senkron replikasyonu aktifleştirmek için Primary sunucudaki postgresql.conf dosyasında şu iki parametrenin düzenlenmesi gerekir:
Adım 1: synchronous_commit Değerini Belirleyin
synchronous_commit = on # remote_apply, on veya remote_write seçilebilirAdım 2: Hangi Yedeklerin Senkron Olacağını Seçin
synchronous_standby_names parametresi ile hangi yedek sunucuların senkron onay mekanizmasına dahil olacağını belirtirsiniz. PostgreSQL bu konuda oldukça esnek yöntemler sunar:
Tekli veya Sıralı Yedek:
synchronous_standby_names = 'standby_node_1'(Burada sadece standby_node_1 senkron çalışır. Eğer o çökerse yazmalar durur.)
Grup İçinden Seçim (FIRST N):
synchronous_standby_names = 'FIRST 1 (standby_node_1, standby_node_2)'(Belirtilen listedeki ilk aktif sunucudan onay beklenir. node_1 ayaktaysa ondan onay alınır; çökerse otomatik olarak node_2 senkron statüsüne geçer ve sistem kesintiye uğramaz.)
Çoklu Onay Mekanizması (ANY N):
synchronous_standby_names = 'ANY 2 (standby_node_1, standby_node_2, standby_node_3)'(Kritik sistemlerde, listedeki 3 sunucudan herhangi 2 tanesi onay verdiği anda işlem başarılı sayılır.)
Ne Zaman Senkron Replikasyon Tercih Edilmelidir?
Senkron replikasyon her proje için uygun değildir. Ancak aşağıdaki senaryolarda kullanılması neredeyse zorunludur:
Finansal ve Bankacılık Sistemleri: Para transferleri, bakiye güncellemeleri ve fatura ödemeleri.
Kritik Envanter Yönetimi: Stok adetlerinin milisaniyelik hassasiyetle takip edildiği büyük e-ticaret sistemleri.
Kimlik ve Yetkilendirme Servisleri: Kullanıcı şifre değişiklikleri, yetki tanımlamaları ve güvenlik logları.
Altın Kural: Hibrit Yaklaşım
PostgreSQL’in en büyük avantajlarından biri, synchronous_commit parametresinin kullanıcı, veri tabanı veya sadece ilgili SQL oturumu (session) bazında değiştirilebilmesidir.
Örneğin, uygulamanızdaki genel loglama işlemleri asenkron olarak çok hızlı çalışırken, kritik bir ödeme adımında sadece o bağlantı için senkron modu aktif edebilirsiniz:
-- Sadece bu transaction için senkron replikasyon onayını zorunlu kıl
BEGIN;
SET LOCAL synchronous_commit = on;
UPDATE kullanici_bakiye SET miktar = miktar - 250 WHERE id = 12345;
COMMIT;Bu sayede hem yüksek performansı korumuş hem de kritik verilerinizi sıfır riskle güvenceye almış olursunuz.


