Patroni Nedir?

PostgreSQL Patroni, açık kaynaklı bir veritabanı yönetim sistemidir ve birçok büyük ölçekli işletmenin veri depolama ihtiyaçlarını karşılamak için kullanılır. PostgreSQL’in yüksek kullanılabilirliği, ölçeklenebilirliği ve dayanıklılığı, özellikle işletmelerin kritik verilerinin saklanması ve yönetimi için önemlidir. PostgreSQL’in yüksek kullanılabilirliği için, birçok farklı yüksek kullanılabilirlik çözümü mevcuttur ve bu çözümlerden biri de Patroni’dir.

Patroni ilk kuranlar için biraz karışık ve kafa karıştırıcı geldiği için etcd ve patroni şeklinde iki yazı serisinde toplamak istedim.

İlk olarak etcd isimli makaleme göz atarak etcd hakkında detayları öğrenebilir ve etcd kurulumunu yapabilirsiniz.ETCD KURULMADAN PATRONİ KURULMAYACAKTIR.

Test amaçlı kurulduğu için etcd ve patroni sunucularını aynı nodelara kuracağım fakat prod sistemlerde farklı sunuculara kurmanızı tavsiye ederim.

Sunucu ip leri :

Etcd1:  192.168.242.147
Etcd2: 192.168.242.148
Etcd3: 192.168.242.149

 

Patroni, PostgreSQL için açık kaynaklı bir yüksek kullanılabilirlik çözümüdür. Patroni, PostgreSQL kümelerinin otomatik başlatılması, durdurulması, failover işlemleri ve diğer yönetim görevlerinin otomatik olarak yapılması için tasarlanmıştır. Patroni, PostgreSQL kümelerinin yönetimini basitleştirir ve PostgreSQL kümelerinin yüksek kullanılabilirliği sağlar.

Patroni, üç ana bileşenden oluşur: etcd, patroni ve PostgreSQL. Etcd, bir anahtar-değer depolama sistemi olarak kullanılır ve PostgreSQL kümesinin durumunu ve yapılandırmasını saklar. Patroni, PostgreSQL kümelerinin yönetimini gerçekleştiren uygulamadır ve etcd ile iletişim kurar. PostgreSQL, Patroni tarafından yönetilen PostgreSQL kümesinin bir parçasıdır.

Etcd ile ilgili detaylı bilgi için ETCD makaleme göz atabilirsiniz.

Patroni’nin birçok avantajı vardır. Öncelikle, yüksek kullanılabilirlik için tasarlanmıştır ve PostgreSQL kümelerinin otomatik failover işlemlerini gerçekleştirir. Bu, işletmelerin kesintisiz bir şekilde çalışmasını sağlar. Ayrıca, Patroni, PostgreSQL kümelerinin yönetimini basitleştirir ve PostgreSQL kümelerinin yapılandırmasını ve yönetimini merkezi bir yerden yapar. Bu da işletmelerin zaman ve kaynak tasarrufu yapmasına olanak sağlar.

Patroni’nin nasıl kullanılacağına dair bir örnek vermek gerekirse, bir işletmenin yüksek kullanılabilirlik gereksinimlerini karşılamak için bir PostgreSQL kümesi oluşturduğunu varsayalım. Bu küme, birincil ve yedek PostgreSQL sunucularından oluşuyor olabilir. Patroni, etcd ve PostgreSQL kurulumlarını yaparak ve konfigürasyon dosyalarını ayarlayarak kümenin oluşturulmasını sağlar. Daha sonra, Patroni, PostgreSQL kümesinin durumunu izler ve otomatik failover işlemlerini gerçekleştirir.

Sonuç olarak, PostgreSQL için Patroni gibi açık kaynaklı yüksek kullanılabilirlik çözümleri, işletmelerin PostgreSQL kümelerinin yönetimini basitleştirir ve PostgreSQL kümelerinin yüksek kullanılabilirliğini sağlar. İşletmelerin kritik verilerini ve uygulamalarını güvende tutmak için bu tür yüksek kullanılabilirlik çözümlerine ihtiyacı vardır. Patroni gibi çözümler, PostgreSQL kümelerinin otomatik failover işlemlerini gerçekleştirerek işletmelerin kesintisiz bir şekilde çalışmasını sağlar. Ayrıca, bu tür çözümler, PostgreSQL kümelerinin yapılandırmasını merkezi bir yerden yaparak zaman ve kaynak tasarrufu sağlar.

Patroni, PostgreSQL kümelerinin yönetimi için birçok özellik sunar. Bunlardan bazıları şunlardır:

 

Otomatik Failover: Patroni, PostgreSQL kümelerindeki birincil sunucunun başarısız olması durumunda otomatik olarak yedek sunucunun rolünü alarak işletmenin kesintisiz bir şekilde çalışmasını sağlar.

 

Yüksek Kullanılabilirlik: Patroni, PostgreSQL kümelerinin yüksek kullanılabilirliğini sağlar ve işletmelerin kritik verilerinin güvende olmasını sağlar.

 

Otomatik Yapılandırma: Patroni, PostgreSQL kümelerinin yapılandırmasını otomatik olarak yapar ve PostgreSQL kümesinin durumunu etcd depolama alanında saklar.

Merkezi Yönetim: Patroni, PostgreSQL kümelerinin yönetimini merkezi bir yerden yapar ve PostgreSQL kümelerinin yönetimini basitleştirir.

 

Diğer Özellikler: Patroni, diğer birçok özellik sunar, örneğin, kümeler arasında senkronizasyon, durum raporlama, geri alma işlemleri, anlık yedekleme ve geri yükleme işlemleri gibi.

 

Özetle, PostgreSQL için Patroni gibi yüksek kullanılabilirlik çözümleri, işletmelerin PostgreSQL kümelerinin yönetimini basitleştirir ve PostgreSQL kümelerinin yüksek kullanılabilirliğini sağlar. Bu tür çözümler, işletmelerin kritik verilerini ve uygulamalarını güvende tutmasına yardımcı olur ve işletmelerin kesintisiz bir şekilde çalışmasını sağlar.

Patroni Nasıl Kurulur ?

Patroni kurulumuna geçmeden önce postgresql kurulumunu üç node üzerinde   gerçekleştiriyoruz.

apt-get update -y
apt-get install postgresql-14 -y

Kurulumu gerçekleştirdikten sonra postgresql e bağlanıyoruz aşağıdaki komutları çalıştırıyoruz.

create user replicator with superuser;
alter user replicator with password 'test';
alter user postgres with password 'test';

Kurulumu gerçekleştirdikten sonra patroni kurulumuna geçiyoruz.

apt install patroni -y

KURULUMLAR ÜÇ SUNUCU ÜZERİNDE DE YAPILMALIDIR.

Konfig dosyasını değiştirerek devam ediyoruz.

vi /etc/patroni/config.yml

Yukarıdaki konfig dosyasının içerisindekilerin hepsini siliyoruz ve aşağıdaki şekilde değiştiriyoruz.

Birinci patroni sunucu için :


scope: patroni_cluster_1
name: member_1

restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.242.147:8008

etcd:
  hosts: 192.168.242.147:2379,192.168.242.148:2379,192.168.242.149:2379
  protocol: http

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout : 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        wal_keep_segments: 100

  initdb:
  - encoding: UTF8
  - data-checksums

  pg_hba:
  - host all all 0.0.0.0/0 trust
  - host replication replicator 0.0.0.0/0 trust
  - host all all 0.0.0.0/0 trust

postgresql:
  listen: 0.0.0.0:5432
  connect_address: 192.168.242.147:5432
  config_dir: /etc/postgresql/14/main
  data_dir: /var/lib/postgresql/14/main
  bin_dir: /usr/lib/postgresql/14/bin
  authentication:
    replication:
      username: replicator
      password: test
    superuser:
      username: postgres
      password: test

Config dosyasında değişiklikler yapıldıktan sonra  kaydedip çıkıyoruz ve patroni servisini restart ediyoruz.Dikkat etmeniz gereken ipleri kendi sisteminize göre revize etmeniz gerekmektedir.

systemctl restart patroni

İkinci sunucuda :

scope: patroni_cluster_1
name: member_2

restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.242.148:8008

etcd:
  hosts: 192.168.242.147:2379,192.168.242.148:2379,192.168.242.149:2379
  protocol: http

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout : 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        wal_keep_segments: 100

  initdb:
  - encoding: UTF8
  - data-checksums

  pg_hba:
  - host all all 0.0.0.0/0 trust
  - host replication replicator 0.0.0.0/0 md5
  - host all all 0.0.0.0/0 md5

postgresql:
  listen: 0.0.0.0:5432
  connect_address: 192.168.242.148:5432
  config_dir: /etc/postgresql/14/main
  data_dir: /var/lib/postgresql/14/main
  bin_dir: /usr/lib/postgresql/14/bin
  authentication:
    replication:
      username: replicator
      password: test
    superuser:
      username: postgres
      password: test

Patroni servisini restart ediyoruz.


systemctl restart patroni


Üçüncü sunucuda :

scope: patroni_cluster_1
name: member_3

restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.242.149:8008

etcd:
  hosts: 192.168.242.147:2379,192.168.242.148:2379,192.168.242.149:2379
  protocol: http

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout : 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        wal_keep_segments: 100

  initdb:
  - encoding: UTF8
  - data-checksums

  pg_hba:
  - host all all 0.0.0.0/0 trust
  - host replication replicator 0.0.0.0/0 md5
  - host all all 0.0.0.0/0 md5

postgresql:
  listen: 0.0.0.0:5432
  connect_address: 192.168.242.149:5432
  config_dir: /etc/postgresql/14/main
  data_dir: /var/lib/postgresql/14/main
  bin_dir: /usr/lib/postgresql/14/bin
  authentication:
    replication:
      username: replicator
      password: test
    superuser:
      username: postgres
      password: test

 

Patroni servisini restart ediyoruz.

systemctl restart patroni

Yukarıdaki değişiklikleri yaptık ve kurulumlarımız tamamlandı.

patronictl -c /etc/patroni/config.yml list  patroni_cluster_1

Yukarıdaki komut yardımı ile clusterımızı kontrol ediyoruz.

Clusterımız kuruldu . Leader sunucumuz olan 192.168.242.147 sunucusunda ki patroni servisini durduralım ve otomatik failover olmuş mu kontrol edelim.

Görüldüğü üzere primary kapandıktan sonra yeni Leader 192.168.242.148 sunucusu olduğunu görüyoruz.

Aşağıdaki yazılarak tıklayarak patroni üzerinde sık yapılan çalışmaları inceleyebilir ve test işlemlerini gerçekleştirebilirsiniz.

Patroni cluster kontrol(list)

Patroni node restart’ı

patroni edit config

Reinit yapmak

Failover işlemi

Switchower işlemi
Patronictl failover ile patronictl switchower arasındaki fark

Loading