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.
Switchower işlemi
Patronictl failover ile patronictl switchower arasındaki fark