MySQL Galera Cluster ile Yüksek Erişilebilir Multi-Master Replikasyon Mimarisi
Veri tabanı sistemlerinde sürekli erişilebilirlik ve veri tutarlılığı, modern uygulamaların temel gereksinimidir. MySQL Galera Cluster, bu ihtiyaçları karşılamak üzere tasarlanmış, senkron multi-master replikasyon yeteneğine sahip bir çözümdür. Geleneksel asenkron replikasyonun veri kaybı riski ve failover süreçlerinin karmaşıklığına karşı Galera, sıfır veri kaybı ve otomatik düğüm kurtarma mekanizmaları sunar.
Galera Cluster Temelleri: Senkron Replikasyon ve WSREP API
Galera Cluster'ın kalbinde senkron replikasyon prensibi yatar. Bir düğümde yapılan her yazma işlemi (transaction), cluster'daki diğer tüm düğümlere aynı anda iletilir ve commit edilmeden önce tüm düğümler tarafından onaylanması gerekir. Bu, herhangi bir noktada veri tutarsızlığının veya veri kaybının önüne geçer.
Bu senkronizasyon, Galera'nın kendi geliştirdiği Write-Set Replication (WSREP) API'si aracılığıyla gerçekleşir. WSREP, her transaction'ın benzersiz bir "write-set" olarak tanımlanmasını sağlar. Bu write-set, transaction'ın değiştirdiği tüm verileri ve metadata'yı içerir. Bir düğümde transaction commit edilmek üzereyken, write-set diğer düğümlere gönderilir ve "certification" adı verilen bir süreçten geçer.
Sertifikasyon, write-set'in diğer düğümlerdeki mevcut verilerle çakışıp çakışmadığını kontrol eder. Eğer bir çakışma yoksa, transaction tüm düğümlerde uygulanır ve commit edilir. Çakışma durumunda ise, daha sonra gelen transaction geri alınır (rollback edilir). Bu "optimistik kilitleme" yaklaşımı, yüksek eşzamanlılık (concurrency) sağlar ve geleneksel kilitleme mekanizmalarının getirdiği performans darboğazlarını ortadan kaldırır. Ancak bu durum, uygulama seviyesinde çakışmaları yönetecek bir tasarım gerektirebilir.
Mimari ve Bileşenler
Bir Galera Cluster, genellikle minimum üç düğümden oluşur. Bu, split-brain senaryolarını önlemek ve quorum mekanizmasını sağlıklı bir şekilde işletmek için kritik öneme sahiptir. Quorum, cluster'ın aktif ve işlem yapabilir durumda kalması için düğümlerin çoğunluğunun ayakta olması ilkesidir. Eğer düğüm sayısı ikiden az olursa, cluster işlevselliğini yitirir ve hizmet dışı kalır.
- Veri Akışı (Flow Control): Galera, cluster içindeki düğümlerin performansını dengelemek için akış kontrolü mekanizmasını kullanır. Eğer bir düğüm diğerlerinden daha yavaş kalırsa, cluster genelinde transaction'lar bu yavaş düğümün hızına göre ayarlanır. Bu, tüm düğümlerin aynı state'te kalmasını garanti eder, ancak genel yazma performansını en yavaş düğüme indirebilir.
- State Snapshot Transfer (SST): Yeni bir düğüm cluster'a katıldığında veya mevcut bir düğüm uzun süre çevrimdışı kaldıktan sonra geri döndüğünde, cluster'daki mevcut bir düğümden tam bir veri kopyası alır. Bu süreç, SST olarak adlandırılır. Rsync, Xtrabackup gibi yöntemlerle gerçekleştirilebilir ve büyük veri tabanlarında zaman alıcı olabilir.
- Incremental State Transfer (IST): Eğer bir düğüm kısa süreliğine çevrimdışı kalmış ve çok fazla transaction kaçırmamışsa, sadece kaçırdığı transaction'ları (write-set'leri) diğer düğümlerden alarak hızlıca senkronize olabilir. Bu, IST olarak bilinir ve SST'ye göre çok daha hızlıdır.
Galera Cluster Kurulumu ve Temel Konfigürasyon
Galera Cluster'ı kurmak için her düğümde MySQL sunucusu ve Galera sağlayıcısı (örneğin Percona XtraDB Cluster veya MariaDB Galera Cluster) kurulmalıdır. Temel konfigürasyon, my.cnf dosyasına eklenen özel parametrelerle yapılır.
# /etc/my.cnf.d/galera.cnf veya /etc/mysql/conf.d/galera.cnf dosyasında
[mysqld]
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0 # Cluster düğümlerinin erişebilmesi için
# Galera Specific Settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so # Galera sağlayıcısının yolu
wsrep_cluster_address=