Postgresql Logical Replication

Postgresql replication çeşitlerinden biri olan logical replication tablo veya tabloları  farklı sunucular da replice etmek için kullanırız. Streaming replikasyondan farkı olarak streaming replikasyon cluster bazlı replike ederken Logical Replication tablo nesne bazlı replice işlemleri için kullanılabilir .  Logical replication replice edilirken genellikle primary key olan kolona göre replice edilir .

Logical replication, farklı postgresql servisleri arasında ,

farklı işletim sistemlerinde (Linux-Windows) ,

aynı veritabanı içerisinde farklı clusterlardan replice edilen tabloları barındırabilir.

 

Logical Replication kurmadan önce dikkat edilmesi gerekenler:

 

  •  DDL komutlar replike edilemez
  • Large Nesneler replike edilemez.
  • View ve Materalized View replice edilemez.
  • Foreign table replike edilemez

 

 

Logical replication’in yaptıklarını ve yapamadıklarından bahsettikten sonra kurulum adımlarına başlayalım.

 

Sunucu-Adı İp Port
Primary Postgresql01 52.249.216.88 5433
Secondary Postgresql02 20.55.105.254 5433

 

Karışıklık olmaması adına sunucu ip ve portlarını yukarıda belirttim.

 

İlk olarak postgresql.conf içerisinde bulunan wal_level parametresini aşağıdaki şekilde değiştirmemiz gerekiyor.

 

wal_level=logical
Listen_addresses='*'

Postgresql.conf üzerinde değişiklikleri yaptıktan sonra pg_hba.conf üzerinde aşağıdaki gibi full erişim verebilirsiniz ya da superuser farklı bir kullanıcı oluşturarak ve sadece belirli ip den şifreli bağlantı gelecek şekilde konfigure edebilirsiniz.

 

host    replication     all             0.0.0.0/0               trust

Yukarıdaki parametreyi konsolide ortamlarda yapmayınız…!

Pg_hba ve postgresql.conf da gerekli değişikleri yaptıktan sonra primary sunucumuza bağlanarak işlemleri yapabiliriz.

Primary(postgresql01 ) sunucumuza bağlanarak aşağıdaki işlemleri yapalım.

 

 create table table1(x int primary key, y int);
 insert into table1 values(11, 11);
 insert into table1 values(10, 11);

 

Yukarıda tablo oluşturduk ve bu oluşturduğumuz tablolara insert yaptık.

Primary(postgresql01) sunucumuzda publication oluşturuyoruz.

 create table table1(x int primary key, y int);

Tablomuzu oluşturduktan sonra Secondary(postgresql02 ) sunucumuzda subscription oluştururak kurulumu tamamlıyoruz.

 

CREATE SUBSCRIPTION my_subscription2 
CONNECTION 'host=52.249.216.88 port=5433 dbname=frk' PUBLICATION my_publication;

 

Örnek olarak verimizi ekleyelim.

insert into table1 values(9, 11);

 

Publication tabloları listelemek için de aşağıdaki sorguyu kullanabilirsiniz.

 

Loading