Aktif-Aktif Yedekli PostgreSQL Kurulumu
2 farklı cihazı nasıl aktif aktif yedekli veritabanı olarak çalıştırırım?
Aktif-aktif yedekli bir veritabanı kurulumu için iki cihaz arasında verilerin sürekli olarak senkronize edilmesi gerekmektedir. PostgreSQL'de bu, genellikle çoğaltma (replication) yoluyla yapılır. İki cihazın da aktif olarak veritabanı işlemlerini işleyebilmesi için bazı ek adımlar ve dikkat edilmesi gereken hususlar vardır. İşte temel adımlar:
-
Çoğaltma Yapılandırması: Her iki cihazda da PostgreSQL çoğaltma yapılandırmasını yapın. Bu, genellikle birincil ve ikincil (master-slave) yapılandırma olarak başlar.
-
Senkron Çoğaltma: Veri tutarlılığını sağlamak için senkron çoğaltmayı kullanabilirsiniz. Senkron çoğaltma, verilerin her iki sunucuda da aynı anda güncellenmesini sağlar.
-
Yük Dengeleme: Her iki sunucuya da eşit yük dağılımı sağlamak için bir yük dengeleyici kullanın. Bu, her iki sunucunun da aktif olarak kullanılmasını sağlar.
-
Failover ve Failback Stratejileri: Her iki sunucu arasında sorunsuz bir geçiş için failover ve failback stratejilerini belirleyin.
-
Uygulama Seviyesi Desteği: Uygulamanızın aktif-aktif yapıyı desteklediğinden emin olun. Bazı durumlarda uygulama seviyesinde özel düzenlemeler yapmanız gerekebilir.
-
Test ve İzleme: Kurulumu test edin ve sürekli olarak performansı ve sağlığı izleyin.
Bu işlemler karmaşık ve detaylıdır, dolayısıyla spesifik PostgreSQL sürümünüze ve ağ yapınıza göre özelleştirmeler yapmanız gerekebilir. Ayrıca, bu tür bir yapılandırma yüksek kullanılabilirlik sağlasa da, veritabanı tasarımınızı ve uygulama mantığınızı bu yapıya uygun hale getirmeniz önemlidir.
Eğer daha detaylı bilgiye ihtiyacınız varsa, PostgreSQL sürümünüzü belirtirseniz size daha spesifik yardımcı olabilirim. Ayrıca, yüklenen PostgreSQL kaynaklarından da ek bilgiler sağlayabilirim.
Her iki cihaz için conf dosyası örneği verir misin?
Aktif-aktif PostgreSQL yapılandırması için postgresql.conf
dosyaları hazırlarken dikkate almanız gereken bazı anahtar ayarlar vardır. Ancak, unutmayın ki bu ayarlar genel bir rehber niteliğindedir ve özgün ihtiyaçlarınıza göre ayarlanmalıdır. İki cihaz için de ayarlar benzer olacak, fakat bazı parametreler cihaza özgü olabilir.
Aşağıda, her iki cihaz için genel bir postgresql.conf
yapılandırma örneği verilmiştir. Bu yapılandırma, çoğaltma ve yüksek kullanılabilirlik için bazı temel ayarları içerir:
Cihaz 1 için postgresql.conf
ini1# Replication Settings 2wal_level = replica # replication için gerekli 3max_wal_senders = 10 # maksimum eş zamanlı WAL gönderen işlem sayısı 4max_replication_slots = 10 # maksimum replikasyon slot sayısı 5synchronous_commit = on # senkron commit işlemleri için 6synchronous_standby_names = '*' # senkron replikasyon için standby isimleri 7 8# Network Settings 9listen_addresses = '*' # hangi IP adreslerinden bağlantı kabul edileceği 10port = 5432 # dinlenen port 11 12# Resource Usage 13shared_buffers = 4GB # sistem belleğinin ne kadarının kullanılacağı 14effective_cache_size = 8GB # PostgreSQL'in tahmini önbellek boyutu 15maintenance_work_mem = 512MB # bakım işlemleri için ayrılan maksimum bellek
Devam lütfen
Tabii, işte postgresql.conf
dosyasının devamı ve ikinci cihaz için örnek yapılandırma:
Cihaz 1 için postgresql.conf
(Devam)
ini1# Write Ahead Log 2wal_buffers = 16MB # WAL için ayrılan bellek boyutu 3checkpoint_timeout = 10min # checkpoint aralığı 4max_wal_size = 2GB # maksimum WAL dosya boyutu 5 6# Logging 7logging_collector = on # log toplama işlemini etkinleştir 8log_directory = 'pg_log' # log dosyalarının saklanacağı dizin 9log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log dosyası adı formatı 10log_min_messages = warning # loglanacak minimum mesaj seviyesi 11 12# Client Connection Defaults 13client_encoding = utf8 # varsayılan karakter seti
Cihaz 2 için postgresql.conf
Cihaz 2 için yapılandırma, Cihaz 1 ile büyük ölçüde benzerdir. Ancak, bazı ayarlar, özellikle ağ ayarları ve kaynak kullanımı, farklılık gösterebilir. Örneğin:
ini1# Replication Settings 2wal_level = replica 3max_wal_senders = 10 4max_replication_slots = 10 5synchronous_commit = on 6synchronous_standby_names = '*' 7 8# Network Settings 9listen_addresses = '*' # değişiklik yapılabilir 10port = 5432 # değişiklik yapılabilir 11 12# Resource Usage 13shared_buffers = 4GB # sunucunuzun belleğine bağlı olarak değişebilir 14effective_cache_size = 8GB 15maintenance_work_mem = 512MB 16 17# Write Ahead Log 18wal_buffers = 16MB 19checkpoint_timeout = 10min 20max_wal_size = 2GB 21 22# Logging 23logging_collector = on 24log_directory = 'pg_log' 25log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 26log_min_messages = warning 27 28# Client Connection Defaults 29client_encoding = utf8
Her iki sunucu için de pg_hba.conf
dosyasının, ağ üzerinden güvenli bağlantıları destekleyecek şekilde yapılandırılması gerekecektir. Ayrıca, bu yapılandırmaların her iki sunucuda da test edilmesi ve gerektiğinde ayarlanması önemlidir.
Aktif-aktif yapılandırma karmaşık olduğundan, bu ayarları uygulamadan önce detaylı bir şekilde test etmenizi ve yedekleme stratejilerinizi gözden geçirmenizi öneririm.
Yaptım ama bir cihaz memory hatası verdi. Linux kernel ile ilgili olabilir. Nelere bakayım?
Bir PostgreSQL sunucusu bellek hatası verdiğinde, bu genellikle sunucunun ayrılan belleği aşması veya işletim sistemi düzeyinde bir sınırlamayla karşılaşması anlamına gelir. Linux kernel ile ilgili bellek sorunlarını gidermek için aşağıdaki adımları takip edebilirsiniz:
-
PostgreSQL Log Dosyalarını Kontrol Edin: PostgreSQL log dosyaları, bellek hatasıyla ilgili spesifik mesajlar içerebilir. Bu mesajlar, sorunun kaynağını belirlemenize yardımcı olabilir.
-
Kernel Parametrelerini Kontrol Edin:
vm.overcommit_memory
: Bu ayar, kernel'in bellek tahsisatı için nasıl bir strateji izleyeceğini belirler.2
olarak ayarlanırsa, kernel tahsisatları daha sıkı bir şekilde kontrol eder.vm.overcommit_ratio
:overcommit_memory
2
olarak ayarlandıysa, bu parametre ne kadar belleğin overcommit edileceğini belirler.- Bu ayarları kontrol etmek için
sysctl vm.overcommit_memory
vesysctl vm.overcommit_ratio
komutlarını kullanabilirsiniz.
-
Sistem Belleği ve Swap Kullanımını Kontrol Edin:
free -m
komutu, sistem belleği ve swap kullanımınızı kontrol etmek için kullanışlıdır.- Swap alanının yeterli olup olmadığını kontrol edin. Yetersiz swap alanı, bellek yoğun işlemlerde sorunlara yol açabilir.
-
PostgreSQL Bellek Ayarlarını Gözden Geçirin:
shared_buffers
,work_mem
,maintenance_work_mem
gibi bellek ile ilgili parametrelerin değerlerini kontrol edin. Bu ayarlar çok yüksekse ve sunucunuzun toplam belleğini aşıyorsa, bellek sorunlarına neden olabilirler.postgresql.conf
dosyasındaki bu ayarları sistem belleğinize uygun şekilde düzenleyin.
-
Uygulama Logları ve Sistem Logları:
- Uygulamanızın log dosyaları da ek ipuçları sağlayabilir.
- Sistem logları (
/var/log/messages
,/var/log/syslog
gibi) da bellek ile ilgili hatalar içerebilir.
-
Kernel Logları:
dmesg
komutu, kernel ile ilgili logları gösterir. Burada, bellek hatasıyla ilgili mesajlar olup olmadığını kontrol edin.
-
PostgreSQL'in Çalıştığı Sunucunun Donanımını Kontrol Edin:
- Sunucunun fiziksel belleğini ve diğer donanım kaynaklarını kontrol edin. Donanım kaynaklarında bir sorun olabilir.
Bu adımlar, sorunun kökenini bulmanıza ve çözüm yollarını belirlemenize yardımcı olabilir. Bellek yönetimi karmaşık bir konu olabilir, bu nedenle her adımı dikkatlice değerlendirmeniz önemlidir. Sorun devam ederse, daha ayrıntılı bir inceleme yapmak ve daha spesifik bilgiler sağlamak üzere sistem yapılandırmanız ve loglarınız hakkında daha fazla bilgi vermeniz gerekebilir.