Replikasyon ve High Availability

Streaming replication ve failover yapılandırması

Replikasyon Türleri

TürAçıklamaKullanım
StreamingWAL kayıtlarını gerçek zamanlı gönderirHot standby, failover
LogicalTablo bazlı replikasyonSeçici veri kopyalama
SynchronousYazma onayı beklerSıfır veri kaybı
AsynchronousOnay beklemezPerformans öncelikli

Streaming Replication Kurulumu

Primary (Master) Sunucu

# postgresql.conf
wal_level = replica
max_wal_senders = 3
wal_keep_size = 1GB
hot_standby = on

# Replikasyon kullanıcısı
CREATE USER replicator WITH REPLICATION PASSWORD 'rep_password';

# pg_hba.conf
host    replication    replicator    standby_ip/32    scram-sha-256

Standby (Slave) Sunucu

# Veri dizinini temizle
sudo systemctl stop postgresql
sudo rm -rf /var/lib/postgresql/16/main/*

# Primary'den kopyala
sudo -u postgres pg_basebackup \
    -h primary_ip \
    -U replicator \
    -D /var/lib/postgresql/16/main \
    -P -R -X stream

# Başlat
sudo systemctl start postgresql

Replikasyon Durumu

-- Primary'de
SELECT * FROM pg_stat_replication;

-- Standby'de
SELECT * FROM pg_stat_wal_receiver;

Patroni ile Otomatik Failover

Patroni, PostgreSQL için otomatik failover ve cluster yönetimi sağlar. etcd veya Consul ile birlikte kullanılır.
# Patroni kurulumu
pip3 install patroni[etcd]

# patroni.yml örneği
scope: postgres-cluster
name: node1

restapi:
  listen: 0.0.0.0:8008
  connect_address: node1_ip:8008

etcd:
  host: etcd_ip:2379

bootstrap:
  dcs:
    postgresql:
      parameters:
        max_connections: 100

postgresql:
  listen: 0.0.0.0:5432
  connect_address: node1_ip:5432
  data_dir: /var/lib/postgresql/16/main
  authentication:
    superuser:
      username: postgres
      password: postgres_pass
    replication:
      username: replicator
      password: rep_pass