Logical replikasyon, veri objelrini ve değişikliklerini replikasyon kimliklerine(replication identity) (genellikle primary key olur) dayalı olarak replikasyon yöntemidir. Bir önceki yazımda detaylı şekilde anlattığım gibi stream replikasyon,  primary sunucudaki her değişiklik WAL üzerinden stream edilip, standby sunucuya uygulanır. Bununla birlikte, stream replikasyon kullanırken bazı şeyler mümkün değildir;

  • Stream replikasyon cluster seviyesindedir, cluster da sadece istediğimiz veritabanları veya veritabanlarındaki istediğimiz objeleri replikasyon yapamayız. Stream replikasyonla sadece komple cluster seviyesinde replikasyon yapabiliriz, tahmin edeleceği gibi bu kısıtın nedeni de cluster seviyesinde sadece bir tane WAL mekanizması olması.
  • Stream replikasyonla iki majör versiyon arasında replikasyon yapılamaz.
  • Standby sunucu read-write olarak kullanılmaz.
  • Farklı platformlar arasında replikasyon yapılamaz.(Linux,Windows vb.)
  • Birden fazla veritabanını aynı yere replikasyon yapılamaz.

PostgreSQL 10 ile stream replikasyonun yukarıdaki sınırlamalarını ele alan ve replikasyonda yeni kullanım alanları yaratan logical replikasyon hayatımıza girdi. Transactional replikasyon olarak da bilinir.

Logical replikasyon, publish ve subscribe modelini takip eder. Publisher(kaynak) sunucu, bir tablodan veya bir grup tablodan yapılan değişikliklerden oluşan bir publication(yayın) oluşturulur. Subscriber sunucu, bir veya daha fazla publication(yayına) abone olabilen bir abonelik oluşturulur. Publication, triggerların belirli olay türleri tarafından nasıl çalıştırıldığına benzer şekilde, ürettikleri değişiklikleri herhangi INSERT, UPDATE, DELETE ve TRUNCATE kombinasyonuyla sınırlamayı seçebilirler. Varsayılan olarak, tüm işlem türleri çoğaltılır.

postgresql logical replication

Update veya delete görecek satırların abone tarafında tanımlanabilmesi için, yayınlanan bir tablonun GÜNCELLEME ve SİLME işlemlerini replike edebilmek için yapılandırılmış bir replica identity olması gerekir. Varsayılan olarak bu primary key’dir, tabi istenirse unique bir sütunda replica identity olarak seçilebilir. Tablonun primary key veya uniqe alanı yoksa bu defada replica identity olarak full seçebiliriz yani tüm satırı replica identity olarak kullanabiliriz, ancak bu  çok verimsizdir. Publisher tarafında “full” dışında bir replica identity ayarlanmışsa, subscriber tarafında aynı veya daha az sütunu içeren bir replica identity de ayarlanmalıdır.Bu arada her publication’ın birden fazla subscriber’ı olabilir. Kaynak ve hedefteki tablolar farklı sütun sayısına veya sırasına sahip olabilir ancak sütun veri tipleri ve sütun adları aynı olmalıdır.

Her subscription, değişiklikleri bir replication slot aracılığıyla alacaktır. Subscription silindiğinde ve yeniden oluşturulduğunda, senkronizasyon bilgileri kaybolur. Bu, verilerin daha sonra yeniden senkronize edilmesi gerektiği anlamına gelir. Şema tanımları kopyalanmaz ve yayınlanan tablolar abone üzerinde bulunmalıdır. Yalnızca normal tablolar çoğaltmanın hedefi olabilir. Yani aşağıdaki objeleri logical replikasyona dahil edemeyiz;

  • Veritabanı şemaları ve DDL komutları replike edilemez, şema pg_dump –schema-only kullanılarak elle kopyalanabilir. Sonraki şema değişikliklerinin manuel olarak senkronize edilmesi gerekir. Bununla birlikte, şemaların her iki tarafta da kesinlikle aynı olmasına gerek olmadığını unutmayın taki bizim subscriber sunucuya gelen tablolarımızla ilgili değişiklik yapmadığımız sürece.
  • Sequence replikasyonu yapılamaz, subscriber read only bir veritabanı olarak kullanılıyorsa, bu genellikle bir sorun teşkil etmemelidir. Bununla birlikte, subscriber veritabanına bir tür geçiş veya yük devretme amaçlanıyorsa, publisher’dan mevcut verileri kopyalayarak (pg_dump kullanarak) veya yeterince yüksek bir değer belirleyerek sequenclerin en son değerlere güncellenmesi gerekecektir.
  • Large nesneler replike edilemez
  • View ve Materialized view replike edilemez
  • Foreing table replike edilemez
  • Partition tablolardaki root bölümler replike edilemez

Şimdi Örnek üzerinden bir logical replikasyon yapılandıralım; (continue reading…)

Loading