Sql & Veritabanı İle Uygulamalar İçin Veri Çoğaltma İşlemi Nasıl Yapılır?

Sql & Veritabanı İle Uygulamalar İçin Veri Çoğaltma İşlemi Nasıl Yapılır?
Sql & Veritabanı İle Uygulamalar İçin Veri Çoğaltma İşlemi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Veri çoğaltma işlemlerine başlamadan önce ortamınızın belirli standartları karşıladığından emin olmalısınız. 2026 yılı itibarıyla, PostgreSQL veya MySQL 9.x gibi güncel RDBMS (İlişkisel Veritabanı Yönetim Sistemi) sürümlerini kullanmanız önerilir.

  • Sunucu Erişimi: Master ve Slave sunucular arasında SSH erişimi ve ağ bağlantısı.
  • Sürüm Uyumluluğu: Her iki sunucuda da aynı veritabanı motoru sürümü.
  • Güvenlik: Sunucular arası iletişim için TLS/SSL şifreleme protokolleri.
  • Yetkilendirme: Çoğaltma işlemini gerçekleştirecek özel bir veritabanı kullanıcısı.

Master-Slave Mimarisi Nedir ve Nasıl Çalışır?

Master-Slave mimarisi, veritabanı işlemlerinin bir merkezden (Master) yönetilip, okuma işlemlerinin diğer sunuculara (Slave) dağıtıldığı bir yapıdır. Master sunucu tüm yazma (INSERT, UPDATE, DELETE) işlemlerini kabul ederken, Slave sunucular bu değişiklikleri sürekli olarak takip eder ve kendi yerel kopyalarını günceller.

Bu yapının temel avantajı, okuma yükünü dağıtarak ana veritabanının üzerindeki baskıyı azaltmaktır. SQL sorgularınızı optimize etmek için Slave sunucularını raporlama veya analitik sorgular için kullanabilirsiniz.

Kritik Uyarı: Veri çoğaltma işlemi sırasında ağ gecikmeleri (latency) veri tutarsızlığına yol açabilir. "Eventual Consistency" (nihai tutarlılık) kavramını göz önünde bulundurarak, kritik finansal işlemlerinizde master sunucuyu tercih etmelisiniz.

Adım Adım PostgreSQL Üzerinde Çoğaltma Kurulumu

PostgreSQL üzerinde veri çoğaltma işlemi, postgresql.conf ve pg_hba.conf dosyalarının yapılandırılmasıyla başlar. İlk adım, Master sunucuda çoğaltma için bir kullanıcı oluşturmaktır.

-- Master sunucuda replikasyon kullanıcısı oluşturma
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'guclu_sifre_2026';

Bu komut, veritabanı sisteminde sadece replikasyon yetkisine sahip bir kullanıcı tanımlar. Güvenlik nedeniyle bu kullanıcıya tablo okuma/yazma yetkisi vermeyin.

Veritabanı Yapılandırma Ayarları

Master sunucunun değişiklikleri günlüğe (WAL - Write Ahead Log) kaydetmesi gerekir. Bu günlükler, Slave sunucuların nerede kaldığını anlamasını sağlar.

# postgresql.conf dosyasına eklenecek ayarlar
wal_level = replica
max_wal_senders = 10
archive_mode = on

Bu ayarlar, veritabanının replikasyon için gerekli günlükleri üretmesini sağlar. max_wal_senders değeri, aynı anda kaç Slave sunucunun bağlanabileceğini belirler.

Slave Sunucunun Master'a Bağlanması

Slave sunucu tarafında, Master sunucudan verileri çekmek için pg_basebackup aracını kullanırız. Bu araç, Master sunucunun bir anlık görüntüsünü (snapshot) alır.

# Slave sunucuda çalıştırılacak komut
pg_basebackup -h master_ip_adresi -D /var/lib/postgresql/data -U replicator -P -v -R

-R parametresi, Slave sunucunun standby.signal dosyasını otomatik oluşturmasını ve Master'a bağlanmasını sağlar. Bu işlemden sonra Slave sunucuyu yeniden başlatmanız yeterlidir.

Veri Çoğaltma Yöntemlerinin Karşılaştırılması

Yöntem Avantaj Dezavantaj
Asenkron Yüksek performans Veri kaybı riski
Senkron Veri tutarlılığı Gecikme süresi artışı

Veri Çoğaltma İşleminde Güvenlik ve Hata Yönetimi

Veri çoğaltma sırasında en sık karşılaşılan hata, ağ kopmaları nedeniyle replikasyonun durmasıdır. Bu durumda Slave sunucu "out of sync" durumuna düşer. İzleme (monitoring) araçları kullanarak replikasyon gecikmesini (replication lag) sürekli kontrol etmelisiniz.

Güvenlik Notu: SQL Injection saldırılarına karşı her zaman parametreli sorgular (prepared statements) kullanın. Replikasyon trafiğini şifrelemek için TLS sertifikalarını mutlaka yapılandırın.

Sıkça Sorulan Sorular

Replikasyon gecikmesi (lag) nasıl önlenir?

Gecikmeyi önlemek için ağ bant genişliğini artırın ve ağır SQL sorgularını Slave sunucularda optimize edin. Donanım seviyesinde SSD kullanımı performansı ciddi oranda artırır.

Master sunucu çökerse ne olur?

Replikasyon yapısı otomatik failover (otomatik geçiş) mekanizmasına sahip değilse, Slave sunucuyu manuel olarak Master'a yükseltmeniz gerekir. 2026 standartlarında 'Patroni' gibi araçlar bu süreci otomatikleştirir.

Tüm veritabanını mı çoğaltmak zorundayım?

Hayır, PostgreSQL'de 'logical replication' kullanarak sadece belirli tabloları veya şemaları çoğaltabilirsiniz. Bu, veritabanı parçalama (sharding) için idealdir.

Replikasyon kullanıcıları neden sınırlı yetkiye sahip olmalı?

Güvenlik prensibi gereği, bir saldırgan replikasyon kullanıcısının bilgilerini ele geçirirse, sadece veritabanı günlüklerini okuyabilir; ancak verileri değiştiremez veya silemez.

Yedekleme ile replikasyon arasındaki fark nedir?

Yedekleme, verinin belirli bir andaki kopyasıdır (snapshot). Replikasyon ise verinin canlı ve sürekli güncellenen bir kopyasıdır. Replikasyon, yedekleme yerine geçmez.

Replikasyon Performansını İzleme ve İstatistik Analizi

Veri çoğaltma kurulumunu tamamladıktan sonra sistemin sağlıklı çalışıp çalışmadığını izlemek, olası darboğazları tespit etmek için kritiktir. PostgreSQL üzerinde replikasyonun durumunu kontrol etmek için sistem görünümlerini (system views) kullanabiliriz. Özellikle pg_stat_replication görünümü, Master sunucunun hangi Slave sunuculara veri gönderdiğini ve bu verinin ne kadar güncel olduğunu gösterir.

Aşağıdaki sorgu, replikasyon gecikmesini bayt cinsinden görmenizi sağlar:

SELECT 
    client_addr AS slave_ip, 
    state, 
    sent_lsn, 
    write_lsn, 
    flush_lsn, 
    replay_lsn,
    pg_size_pretty(pg_wal_lsn_diff(sent_lsn, replay_lsn)) AS replication_lag
FROM pg_stat_replication;

Bu sorguda replication_lag sütunu, verinin Master'dan Slave'e aktarılmasında yaşanan gecikmeyi temsil eder. Eğer bu değer sürekli artıyorsa, ağ bant genişliğiniz yetersiz olabilir veya Slave sunucunun donanım kaynakları (CPU/Disk I/O) Master'a yetişemiyor olabilir.

Replikasyon Süreçlerinde Sık Karşılaşılan Hatalar ve Çözümleri

Replikasyon kurulumlarında en sık karşılaşılan sorunlardan biri, WAL (Write Ahead Log) dosyalarının Master sunucuda erken temizlenmesidir. Eğer Slave sunucu bir süreliğine bağlantısını kaybederse ve Master bu sırada ihtiyaç duyulan WAL dosyalarını silerse, replikasyon kopar. Bu durumu önlemek için max_slot_wal_keep_size parametresini yapılandırmanız önerilir.

Bağlantı Kopması Durumunda Yeniden Eşitleme (Resync)

Replikasyon koptuğunda ve Slave sunucu Master'ın gerisinde kaldığında, tüm veritabanını sıfırdan kopyalamak yerine pg_rewind aracını kullanabilirsiniz. Bu araç, Slave sunucuyu Master ile tekrar uyumlu hale getirmek için sadece değişen blokları (delta) aktarır.

# Slave sunucuda çalıştırılacak komut
pg_rewind --target-pgdata=/var/lib/postgresql/data --source-server="host=master_ip port=5432 user=replicator"

İleri İpucu: Büyük veritabanlarında ilk kurulumu yaparken pg_basebackup komutunu -P (progress) ve -v (verbose) parametreleri ile çalıştırmak, aktarım sürecini takip etmenizi kolaylaştırır. Ayrıca, ağ trafiğini azaltmak için -z parametresi ile sıkıştırma özelliğini aktif edebilirsiniz:

pg_basebackup -h master_ip -D /var/lib/postgresql/data -U replicator -P -v -z -R

Bu komut, -R parametresi sayesinde standby.signal dosyasını otomatik oluşturur ve postgresql.auto.conf dosyasına gerekli bağlantı bilgilerini yazar, böylece manuel yapılandırma yükünüzü azaltır.

Sonuç

SQL ve veritabanı ile veri çoğaltma işlemi, uygulamanızın ölçeklenebilirliği ve sürekliliği için vazgeçilmez bir adımdır. Bu rehberde öğrendiğiniz Master-Slave mimarisi, yapılandırma dosyaları ve güvenlik önlemleri, profesyonel bir veritabanı altyapısı kurmanız için temel oluşturur. Bir sonraki adım olarak, veritabanı yük dengeleme (load balancing) için 'PgBouncer' veya 'HAProxy' gibi araçları araştırmanızı öneririm.

Sorumluluk Reddi: Bu makaledeki kod örnekleri ve yapılandırmalar eğitim amaçlıdır. Üretim ortamında (production) uygulamadan önce mutlaka test ortamlarında denemeli ve veritabanı yedeklerinizi almalısınız. Yanlış yapılandırmalar veri kaybına neden olabilir.
Bu yazıya tepkinizi paylaşın:
Zeynep Kaya

Yaşam kalitesini artıran hızlı ve etkili yöntemler üzerine içerik geliştiriyorum. Detaylara önem veren, çözüm odaklı rehberlerin öncüsüyüm.

Yorumlar (0)

Yorum Yaz