Database Engineering

Veritabanı Eşlemeyi Ustalaşmak: Mimarisi ve Kurulumuna Derin Bir Bakış

Modern yazılım mühendisliği ortamında veri en kritik varlıktır. Erişilebilirlik, tutarlılık ve dayanıklılığını sağlamak hayati önem taşır. Yüksek erişilebilirlik elde etmenin en temel stratejilerinden biri veritabanı eşlemesidir. Görev kritik bir e-ticaret platformu veya yüksek ölçekli bir sosyal ağ inşa ediyor olun, eşlemeyi kurmanın ve yönetmenin nasıl öğrenilmesi gereken bir özellik değil, bir zorunluluk olduğunu anlamak önemlidir. Bu yazıda, veritabanı eşlemesinin kurulumundaki teknik incelikleri, pratik uygulama desenlerine ve yaygın tuzaklara odaklanarak inceleyeceğiz.

Temel Mimarileri Anlamak

Konfigürasyon dosyalarına dalmadan önce, iki temel eşleme topolojisi arasındaki farkı ayırt etmek esastır: Master-Slave (Birincil-Yedek) ve Master-Master (Çoklu-Birincil).

Master-Slave Eşlemesi en yaygın desendir. Tüm yazma işlemleri birincil veritabanı düğümüne yönlendirilir; bu düğüm, değişiklikleri bir veya daha fazla ikincil düğüme asenkron olarak eşler. Bu yedekler okuma sorgularını işleyerek yükü etkili bir şekilde dağıtır. Buradaki avantaj açıktır: yazma verimliliğinizi etkilemeden okuma kapasitenizi ölçeklendirebilirsiniz.

Master-Master Eşlemesi ise herhangi bir düğüme yazmaya izin verir. Bu üstün yazma ölçeklenebilirliği ve düğüm arızalarına karşı dayanıklılık sunarken, çakışma çözümü ve tutarlılık açısından önemli karmaşıklıklar getirir. Çoğu uygulama için, ihtiyaçlar büyüdükçe daha karmaşık küme yapılandırmalarına evrilen, pratik bir seçim olarak Master-Slave kurulumuyla başlamak en doğrusudur.

Temel Yapılandırma Parametreleri

Yaygın olarak benimsenmiş açık kaynaklı bir veritabanı olan PostgreSQL kullanarak pratik bir örneğe bakalım. Eşlemeyi etkinleştirmek için postgresql.conf ve pg_hba.conf dosyalarını değiştirmeniz gerekir.

İlk olarak, birincil sunucunuzda bir eşleme kullanıcısı tanımlamanız ve akış eşlemesini etkinleştirmeniz gerekir. postgresql.conf dosyanızı açın ve aşağıdaki parametreleri ayarlayın:

# postgresql.conf
# WAL arşivlemeyi etkinleştir
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB

# Ağ
listen_addresses = '*'
port = 5432

Ardından, yedek sunucunun eşleme amacıyla bağlanmasına izin vermek için pg_hba.conf dosyasında erişim kontrolünü yapılandırmanız gerekir:

# pg_hba.conf
# TÜR        VERİTABANI      KULLANICI       ADRES               YÖNTEM
host    replication     replicator      replica_server_ip/32    md5

Kurulum Süreci: Adım Adım

Yapılandırma tamamlandıktan sonra, gerçek eşleme kurulumu tutarlı bir veri tabanına ihtiyaç duyar. Bunun için modern standart, veritabanı kümesinin tutarlı bir anlık görüntüsünü oluşturan pg_basebackup kullanmaktır.

Yedek sunucuda aşağıdaki komutu çalıştırın:

pg_basebackup -h primary_server_ip -U replicator -D /var/lib/postgresql/data -P -v -R --wal-method=stream

Bu komut birkaç şey yapar:

  1. Belirtilen kullanıcı olarak birincil sunucuya bağlanır.
  2. Belirtilen yolda bir veri dizini oluşturur.
  3. Zaman içinde kurtarma yeteneğini sağlamak için WAL'yi (Ön Yazma Günlüğü) akitar.
  4. Yeni sürümlerde bir standby.signal dosyası oluşturur veya yedeğin birincil sunucuya bağlantısını yapılandırmak için postgresql.auto.conf dosyasını günceller.

Bu komutu çalıştırdıktan sonra, yedekteki PostgreSQL hizmetini başlatın. Birincil sunucudan değişiklikleri akıttığını gösteren günlük girdileri görmelisiniz.

İzleme ve Yaygın Tuzaklar

Eşleme, "kur ve unut" teknolojisi değildir. Geliştiricilerin karşılaştığı en yaygın sorun eşleme gecikmesidir. Eğer yedek, birincil sunucudan çok geride kalırsa, eski verileri okuma riski taşırsınız. Bunu izlemek için birincil sunucudaki pg_stat_replication görünümünü sorgulayabilirsiniz:

SELECT pid, state, sent_lsn, write_lsn, flush_lsn, replay_lsn 
FROM pg_stat_replication;

Eğer replay_lsn, sent_lsn'den önemli ölçüde geride kalıyorsa, geciken bir yedeğiniz vardır. Nedenleri arasında ağ gecikmesi, birincil sunucuda ağır yazma yükleri veya yedekteki yavaş G/Ç (Giriş/Çıkış) yer alabilir. Gecikmeyi azaltmak için yedeğin G/Ç zamanlayıcısını ayarlamayı veya depolama alt sistemini yükseltmeyi düşünün. Ayrıca, failover (devre dışı kalma geçişi) prosedürlerinizi her zaman test edin. Bir kriz anında, yedek sunucunuzun yazmaları sorunsuz bir şekilde devralabileceğini bilmek paha biçilemezdir.

Sonuç

Veritabanı eşlemesini kurmak, dayanıklı sistemler inşa etmede kritik bir adımdır. Master-Slave mimarilerinden yararlanarak okuma ve yazma yüklerini ayırabilir, genel performansı ve erişilebilirliği iyileştirebilirsiniz. İlk kurulum, WAL seviyelerinin, ağın ve yedekleme senkronizasyonunun dikkatli yapılandırılmasını gerektirse de, uzun vadeli faydalar çabadan çok daha fazladır. Eşleme gecikmenizi yakından izlemeyi ve sağlam bir felaket kurtarma planınız olduğunu unutmayın. Sisteminiz büyüdükçe, bu temel uygulamalar verilerinizin güvenli, erişilebilir ve tutarlı kalmasını sağlayacaktır.

Share: