Sales6 min read1119 words

Patroni İle PostgreSQL Yüksek Erişilebilir(HA) Cluster Kurulumu

Fatih Çevik

Fatih Çevik

PlusClouds Author

Cloud & SaaS

PostgreSQL açık kaynak kodlu, çok yönlü ve dünyadaki en yaygın veritabanı sistemlerinden biridir. Her ne kadar çok yönlü ve yaygın olsa da Yüksek Erişilebilirlik(HA) için bir çözüm sunmamaktadır.

Patroni Nedir ?

Patroni yüksek erişilebilir PostgreSQL clusterlarının kurulumlarını, yönetimlerini vb. süreçleriniz otomatize edebileceğiniz bir cluster manager aracıdır. Python diliyle yazılmıştır ve maksimum erişilebilirlik için etcd kullanır. Ek olarak Patroni veritabanı replikasyonu, backup ve konfigürasyon restore etme konularında da yeteneklidir.

PostgreSQL Cluster Ana Bileşenleri

  • Patroni : Yüksek erişilebilir PostgreSQL clusterlarının konfigürasyonu için template sağlar.

  • ETCD : PostgreSQL clusterının anlık durumunu saklar. Eğer herhangi bir PostgreSQL node'unuzda değişilik olursa Patroni , ETCD içerisinde saklanan key-value değerini günceller. ETCD bu bilgiyi cluster içindeki master node seçimi için kullanır ve clusterı devamlı ayakta tutar.

  • HAProxy : Master/Slave nodelar arasındaki değişiklikleri takip eder ve herhangi bir clienttan istek geldiğinde master node üzerinde bağlantıyı gerçekleştirir.

Bu yazımızda Ubuntu 20.04 işletim sistemi üzerinde Patroni ile 4 adet node bulunduran cluster kurulumu gerçekleştireceğiz.

Aşağıdaki adımları hiç birini atlamadan takip edin ve kendi node bilgilerinize göre gereken güncellemeleri yapın .

Servers Application IP Address
node1 Postgres, Patroni 10.0.0.1
node2 Postgres, Patroni 10.0.0.2
node3 etcd 10.0.0.3
node4 HAProxy 10.0.0.4

1. PostgreSQL Kurulumunu Gerçekleştirin

İlk olarak yapmanız gereken node1 ve node2 üzerinde PostgreSQL kurulumunu gerçekleştirmek. Aşağıdaki komut ile kolayca PostgreSQL kurulumunu gerçekleştirin.

apt install postgresql postgresql-contrib -y

Kurulumdan sonra aşağıdaki komut ile bütün node'larda PostgreSQL servisini durdurun.

systemctl stop postgresql

Sıradaki adımda, /usr/lib/postgresql/12/bin/ ile /usr/sbin dizinleri arasında symlink'e ihtiyacınız var çünkü Patroni tarafından ihtiyaç duyulan araçlar bu dizinde bulunmakta. Aşağıdaki komut ile işlemi gerçekleştirin.

ln -s /usr/lib/postgresql/12/bin/* /usr/sbin/

2. Patroni, ETCD ve HAProxy Kurulumlarını Gerçekleştirin

İlk olarak, node1 ve node2 üzerinde gerekli paketlerin yüklemesini aşağıdaki komut ile gerçekleştirin.

apt -y install python3-pip python3-dev libpq-dev

Şimdi PIP güncel sürüm yükseltmesini aşağıdaki komut ile gerçekleştirin.

pip3 install --upgrade pip

Son olarak, PIP komutunu kullanarak node1 ve node2 üzerinde Patroni ve diğer gereksinimlerin kurulumunu gerçekleştirin.

pip install patroni

pip install python-etcd

pip install psycopg2

Şu anda Patroni node1 ve node2 makineleri üzerinde kurulmuş durumda.

Şimdi ETCD servisimizin çalışacağı node3 makinesine ulaşın ve aşağıdaki komut ile kurulumu gerçekleştirin.

apt -y install etcd

Kurulumun bitmesinin ardından node4 makinesine giriş yapın ve HAproxy servisini aşağıdaki komut ile yükleyin.

apt -y install haproxy

3. ETCD ve Patroni Konfigürasyonlarını Düzenleyin

ETCD ana konfigürasyon dosyası aşağıdaki dizinde bulunmaktadır .

/etc/default/etcd

Nano editör ile konfigürasyon dosyasını düzenleyin.

nano /etc/default/etcd

Aşağıdaki konfigürasyonları ekleyin. Kendi IP bilgilerinize göre güncellemeyi unutmayın .

    ETCD_LISTEN_PEER_URLS  =  "http://10.0.0.3:2380,http://127.0.0.1:7001"   
ETCD_LISTEN_CLIENT_URLS = "http://127.0.0.1:2379, http://10.0.0.3379"
ETCD_INITIAL_ADVERTISE_PEER_URLS = "http://10.0.0.3:2380"
ETCD_INITIAL_CLUSTER = "etcd0=http://10.0.0.3:2380"
ETCD_ADVERTISE_CLIENT_URLS = "http://10.0.0.3:2379"
ETCD_INITIAL_CLUSTER_TOKEN = "node1"
ETCD_INITIAL_CLUSTER_STATE = "new"

Konfigürasyon dosyasını düzenleyip ETCD servisini yeniden başlatın.

systemctl restart etcd

Aşağıdaki komut ile servis durumunu görüntüleyebilirsiniz.

systemctl status etcd

Şimdi node1 ve node2 için patroni.yml dosyası oluşturmanız gerekiyor. Node1 üzerinde aşağıdaki komut ile yeni bir patroni.yml dosyası oluşturup sıradaki konfigürasyonları ekleyin.

nano /etc/patroni.yml

    scope:   postgres 
namespace: /db/
name: postgresql0

restapi:
listen: 10.0 .0 .1 : 8008
connect_address: 10.0 .0 .1 : 8008

etcd:
host: 10.0 .0 .3 : 2379

bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true

initdb:
- encoding: UTF8
- data-checksums

pg_hba:
- host replication replicator 127.0 .0 .1 / 32 md5
- host replication replicator 10.0 .0 .1 / 0 md5
- host replication replicator 10.0 .0 .2 / 0 md5
- host all all 0.0 .0 .0 / 0 md5

users:
admin:
password: admin
options:
- createrole
- createdb

postgresql:
listen: 10.0 .0 .1 : 5432
connect_address: 10.0 .0 .1 : 5432
data_dir: /mnt/ patroni
pgpass: /tmp/ pgpass
authentication:
replication:
username: replicator
password: "Strong Password"
superuser:
username: postgres
password: "Strong Password"
parameters:
unix_socket_directories: '.'

tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false

Dosyayı kaydedin, ardından Patroni için bir data dizini oluşturun ve sahipliğini düzenleyin.

   
mkdir -p /mnt/ patroni
chown postgres:postgres /mnt/ patroni
chmod 700 /mnt/ patroni

Ardından Node2 üzerinde aşağıdaki benzer işlemleri gerçekleştirin.

nano /etc/patroni.yml

Aşağıdaki konfigürasyonları ekleyin.

     
scope: postgres
namespace: /db/
name: postgresql1

restapi:
listen: 10.0 .0 .2 : 8008
connect_address: 10.0 .0 .2 : 8008

etcd:
host: 10.0 .0 .3 : 2379

bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true

initdb:
- encoding: UTF8
- data-checksums

pg_hba:
- host replication replicator 127.0 .0 .1 / 32 md5
- host replication replicator 10.0 .0 .1 / 0 md5
- host replication replicator 10.0 .0 .2 / 0 md5
- host all all 0.0 .0 .0 / 0 md5

users:
admin:
password: admin
options:
- createrole
- createdb

postgresql:
listen: 10.0 .0 .2 : 5432
connect_address: 10.0 .0 .2 : 5432
data_dir: /mnt/ patroni
pgpass: /tmp/ pgpass
authentication:
replication:
username: replicator
password: "Strong Password"
superuser:
username: postgres
password: "Strong Password"
parameters:
unix_socket_directories: '.'

tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false

Kaydedin ve Node1 üzerinde de yaptığınız gibi data dizini oluşturun.

   
mkdir -p /mnt/ patroni
chown postgres:postgres /mnt/ patroni
chmod 700 /mnt/ patroni

Patroni İçin Systemd Dosyası Oluşturun.

Node1 ve Node2 üzerinde Patroni servisini yönetmek için aşağıdaki servis dosyasını oluşturun.

nano /etc/systemd/system/patroni.service

Aşağıdaki konfigürasyonları ekleyin.

   
[Unit]
Description =Runners to orchestrate a high-availability PostgreSQL
After =syslog.target network.target

[Service]
Type =simple

User =postgres
Group =postgres

ExecStart =/usr/local/bin/patroni /etc/patroni.yml
KillMode =process
TimeoutSec =30
Restart = no

[Install]
WantedBy =multi-user.targ

Dosyayı kaydedin ve ardından aşağıdaki komutu çalıştırın.

systemctl daemon-reload

Şimdi Node1 ve Node2 üzerinde Patroni servisini çalıştırın. DİKKAT EDİN YALNIZCA PATRONI .

systemctl start patroni

Patroni servisinin durumunu aşağıdaki komutla kontrol edebilirsiniz.

systemctl status patroni

Yalnızca Patroniyi çalıştırma sebebimize gelecek olursak, Konfigürasyonlardan da gördüğünüz üzere Patroni PostgreSQL ile aynı porta bind edili durumda ve kendine ait farklı bir data dizini ile konfigürasyonları mevcut. Bu da Postgresql servisini patroni üzerinden kullandığımız anlamına geliyor. Yani özetleyecek olursak postgresql ve patroni bir arada çalışıyor olursa 5432 portundan bağlandığınızda replikasyon işlemi gerçekleşmemiş olacak çünkü postgresql data dizini üzerinden bağlanıyor olacaksınız.

4. HAProxyi Konfigürasyonunu Düzenleyin

Node4 üzerinde HAProxy ana konfigürasyonunu aşağıdaki şekilde düzenleyin.

nano /etc/haproxy/haproxy.cfg

Standart konfigürasyonu kaldırın ve aşağıdaki şekilde güncelleyin

   
global
maxconn 100

defaults
log global
mode tcp
retries 2
timeout client 30m
timeout connect 4s
timeout server 30m
timeout check 5s

listen stats
mode http
bind *:7000
stats enable
stats uri /

listen postgres
bind *:5000
option httpchk
http-check expect status 200
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
server postgresql1 10.0.0.1:5432 maxconn 100 check port 8008
server postgresql2 10.0.0.2:5432 maxconn 100 check port 8008

Dosyayı kaydedin ve HAProxy servisini yeniden başlatın.

systemctl restart haproxy

Durumunu doğrulamak için aşağıdaki komutu kullanabilirsiniz.

systemctl status haproxy

5. PostgreSQL Clusterına Erişin

Artık postgresql clusterınız kullanıma hazır. http://10.0.0.4:7000 adresi üzerinden cluster durumunuzu görüntüleyebilir ve 5432 portundan veritabanınıza bağlanarak replikasyon kontrol testlerinizi gerçekleştirebilirsiniz. Bir sonraki yazımızda da Nginx ile clusterınıza nasıl domain tanımlayacağınızı anlatacağız . Görüşmek üzere :)

Sıkça Sorulan Sorular

Patroni nedir ve PostgreSQL HA için nasıl çalışır?

Patroni yüksek erişilebilir PostgreSQL clusterlarının kurulumlarını, yönetimlerini vb. süreçlerinizi otomatize eden bir cluster manager aracıdır. Python ile yazılmıştır ve maksimum erişilebilirlik için etcd kullanır. Ayrıca Patroni veritabanı replikasyonu, backup ve konfigürasyon restore etme konularında da yeteneklidir.

ETCD nedir ve Patroni cluster durumunu nasıl saklar ve master seçiminde nasıl kullanılır?

ETCD PostgreSQL clusterının anlık durumunu saklar; herhangi bir PostgreSQL node'unda değişiklik olduğunda Patroni ETCD'teki key-value değerlerini günceller. ETCD bu bilgiyi cluster içindeki master node seçimi için kullanır ve clusterı ayakta tutar.

HAProxy nedir ve Patroni ile cluster içinde hangi rolü üstlenir?

HAProxy Master/Slave nodelar arasındaki değişiklikleri takip eder ve herhangi bir clienttan gelen isteği master node üzerinden yönlendirir. Böylece istekler her zaman uygun master üzerinden işlenir.

Bu kurulumda hangi makinelerde hangi bileşenler çalışır?

Ubuntu 20.04 üzerinde 4 adet node kullanılır. node1 ve node2 üzerinde PostgreSQL ve Patroni çalışır. node3 üzerinde ETCD kurulu ve node4 üzerinde HAProxy çalışır.

ETCD ve Patroni konfigürasyonu nasıl düzenlenir ve hangi adımlar izlenir?

Etcd ana konfigürasyon dosyası /etc/default/etcd üzerinde nano ile düzenlenir; ardından ETCD servisini yeniden başlatırsınız. Patroni için patroni.yml dosyası Node1 ve Node2 üzerinde oluşturulur ve ilgili konfigürasyonlar bu dosyalara eklenir.

Patroni kurulumu için hangi temel paketler ve Python modülleri gerekir ve nasıl kurulur?

Gerekli paketler python3-pip, python3-dev ve libpq-dev'tir; ardından pip3 ile pip yükseltilir ve patroni, python-etcd ile psycopg2 kurulur.

PostgreSQL clusterına nasıl erişilir ve durumunu nasıl görüntüleyebilirim?

Artık cluster durumunu http://10.0.0.4:7000 adresinden görüntüleyebilir ve veritabanınıza 5432 portu üzerinden bağlanarak replikasyon kontrolleri gerçekleştirebilirsiniz.

İlgili Okumalar

Etiketlenen yazılar:

LeadOcean ve PlusClouds CRM Entegrasyonu: Otomatik Pipeline Kurulumu
Sales

LeadOcean ve PlusClouds CRM Entegrasyonu: Otomatik Pipeline Kurulumu

Bu rehberde; operasyonel yükü minimuma indiren bir yöntemi, yani LeadOcean üzerinde toplanan nitelikli verileri PlusClouds CRM ekosistemine otomatik olarak aktarmanın yolunu inceleyeceğiz. "Workspace Pusher" mekanizmasını kullanarak uçtan uca dijital bir köprü kuracak ve satış süreçlerinizi nasıl tam otomatik hale getirebileceğinizi adım adım ele alacağız.

WhatsApp Otomasyonu: Lead’leri Satışa Dönüştürmenin Yeni Yolu
Sales

WhatsApp Otomasyonu: Lead’leri Satışa Dönüştürmenin Yeni Yolu

Dijital dünyada rekabet artık sadece “daha fazla lead toplamak” üzerinden ilerlemiyor. Asıl fark yaratan, elde ettiğiniz lead’lere ne kadar hızlı, doğru ve kişiselleştirilmiş şekilde ulaştığınız. Bu noktada WhatsApp, yüksek etkileşim oranlarıyla en güçlü iletişim kanallarından biri olurken; n8n gibi araçlar sayesinde bu süreci tamamen otomatik ve ölçeklenebilir hale getirmek mümkün. Bu yazıda, n8n kullanarak WhatsApp otomasyonu kurmayı, Eaglet ve Leadocean gibi platformlardan gelen lead’leri satışa dönüştürmeyi ve bu süreci nasıl optimize edebileceğinizi detaylı şekilde ele alıyoruz.

2026’da WhatsApp ile Affiliate Gelir
Sales

2026’da WhatsApp ile Affiliate Gelir

2026 itibarıyla affiliate marketing artık sadece trafik üretmekle ilgili değil. Asıl farkı yaratan şey, o trafiği doğrudan satışa dönüştürebilmek. İşte burada WhatsApp devreye giriyor. 2026’da WhatsApp ile Affiliate Gelir nasıl elde edilir? E-posta açılma oranları düşerken, WhatsApp mesajlarının okunma oranı %90’ların üzerinde. Yani doğru stratejiyle WhatsApp, affiliate gelir için en güçlü “son temas noktası” haline geliyor. Ama burada kritik fark şu: Manuel mesaj atanlar değil, otomasyon kuranlar kazanıyor.

PlusClouds Affiliate ile Pasif Gelir (2026 Rehberi)
Sales

PlusClouds Affiliate ile Pasif Gelir (2026 Rehberi)

Dijital dünyada trafik üretmek bir beceri olabilir. Ancak 2026 itibarıyla asıl mesele trafik değil, trafiği gelire dönüştürme sistemi kurmak. Affiliate marketing (satış ortaklığı) yıllardır var. Fakat artık Amazon’dan düşük komisyonlu ürün satma dönemi kapandı. Gerçek kazanç; yüksek sepet tutarlı, B2B SaaS odaklı ve sürekliliği olan sistemlerde. İşte tam bu noktada PlusClouds devreye giriyor. 2026’da PlusClouds ile pasif gelir imparatorluğu kurmak artık çok basit. PlusClouds yalnızca bir bulut bilişim sağlayıcısı değil; affiliate’ler için yüksek komisyonlu, ölçeklenebilir ve araç destekli bir gelir ekosistemi sunuyor.