MySQL Galera Cluster: Multi-Master Replikasyon ve Yüksek Erişilebilirlik
Geleneksel MySQL replikasyon mimarileri, özellikle asenkron yapıları nedeniyle veri tutarsızlığı ve master node arızalarında veri kaybı riskleri taşır. Yüksek erişilebilirlik ve veri bütünlüğü gerektiren kritik iş yüklerinde bu durum kabul edilemezdir. MySQL Galera Cluster, senkronize, multi-master bir replikasyon çözümü sunarak bu zorlukların üstesinden gelir. Galera, tüm düğümlerin yazılabilir olduğu ve her yazma işleminin kümedeki tüm düğümlere aynı anda iletildiği bir yapı sağlar. Bu, tek bir arıza noktasını ortadan kaldırır ve sürekli hizmet erişimi sunar.
Galera Cluster'ın Temel Mimarisi
Galera Cluster, standart MySQL sunucularını (Percona XtraDB Cluster veya MariaDB Galera Cluster gibi dağıtımlar aracılığıyla) bir araya getirerek senkron replikasyon yeteneği kazandıran bir eklentidir. Temelinde, write-set replikasyonu ve sertifikasyon tabanlı sıralama mekanizmaları bulunur.
Senkron Replikasyon ve Sertifikasyon Tabanlı Sıralama
Galera'nın en ayırt edici özelliği senkron replikasyon yapısıdır. Bir client bir düğüme bir yazma işlemi (INSERT, UPDATE, DELETE) gönderdiğinde, bu işlem o düğümde uygulanmadan önce, işlemin bir 'write-set'i oluşturulur ve kümedeki tüm düğümlere iletilir. Diğer düğümler bu write-seti alır ve kendi yerel veritabanlarında aynı işlemi uygulamadan önce 'sertifikasyon' sürecinden geçirir. Sertifikasyon, işlemin başka bir düğümdeki eşzamanlı bir işlemle çakışıp çakışmadığını kontrol eder. Herhangi bir çakışma durumunda (optimistic locking), sadece bir işlem başarılı olurken, diğeri geri alınır ve client'a hata döner. Bu mekanizma, tüm düğümlerde veri tutarlılığını garantiler.
WSREP API ve Write-Set Replikasyonu
Galera, MySQL sunucusuyla WSREP (Write Set Replication) API aracılığıyla entegre olur. Bu API, her bir işlem için benzersiz bir ID (GTID benzeri) oluşturur ve işlemi bir write-set olarak paketler. Write-setler, değiştirilen satırların bir görüntüsünü içerir ve ağ üzerinden diğer düğümlere ulaştırılır. Bu sayede, sadece değişiklikler replike edilir, bu da bant genişliği kullanımını optimize eder. Her düğüm, gelen write-setleri kendi yerel önbelleğinde tutar ve ardından sertifikasyon ve uygulama aşamalarını gerçekleştirir.
GCS (Galera Cluster Service)
Galera Cluster Service (GCS), Galera kümesinin kalbidir. Küme üyeliğini yönetir, düğümler arası iletişimi sağlar ve write-setlerin dağıtımını koordine eder. GCS, UDP ve TCP protokollerini kullanarak düğümler arasında mesajlaşmayı gerçekleştirir. Bir düğüm kümeden ayrıldığında veya yeni bir düğüm katıldığında, GCS durumu günceller ve küme üyeleri arasında fikir birliğini (quorum) sürdürmek için çalışır.
Multi-Master Yetenekleri ve Veri Tutarlılığı
Galera Cluster, gerçek bir multi-master ortam sunar; yani kümedeki tüm aktif düğümlere aynı anda yazma işlemleri yapılabilir. Bu, uygulamanın yazma yükünü birden fazla düğüme dağıtarak ölçeklenebilirlik potansiyeli sağlar.
Tüm Nodelara Yazma Yeteneği
Geleneksel master-slave replikasyonunda yazma işlemleri sadece master düğüme yönlendirilirken, Galera'da herhangi bir düğüme yazılabilir. Bu esneklik, uygulama tarafında karmaşık yönlendirme mantıklarına gerek kalmadan, yük dengeleyiciler aracılığıyla yazma trafiğinin dağıtılmasını kolaylaştırır. Bir düğümün arızalanması durumunda, diğer düğümler yazma işlemlerini sorunsuz bir şekilde kabul etmeye devam eder.
Çakışma Çözümü (Conflict Resolution) ve PA (Primary Component)
Multi-master bir ortamda aynı anda aynı veriye yapılan yazma işlemlerinde çakışmalar kaçınılmazdır. Galera, bu çakışmaları 'first committer wins' (ilk işleyen kazanır) prensibiyle çözer. Bir işlem sertifikasyon aşamasında başka bir düğümden gelen ve aynı satırları etkileyen bir işlemle çakışırsa, Galera işlemeyi başlatan düğümlerden hangisinin daha önce write-seti kümede duyurduğuna bakar. Daha geç olan işlem geri alınır ve client'a bir dead-lock veya sertifikasyon hatası döndürülür. Bu otomatik mekanizma, veri tutarlılığını korur. Kümenin sağlıklı çalışması için birincil bir bileşenin (Primary Component - PC) oluşması kritiktir. Çoğunluk oyu (quorum) ilkesiyle belirlenen bu PC, kümenin veri yazma işlemlerini kabul etme yeteneğini sağlar.
Kurulum ve Temel Yapılandırma
Galera Cluster kurulumu, seçilen MySQL dağıtımına (Percona XtraDB Cluster, MariaDB Galera Cluster) bağlı olarak değişiklik gösterse de, temel prensipler benzerdir. Genellikle, her düğüme ilgili yazılım paketleri yüklenir ve ardından MySQL yapılandırma dosyasına (my.cnf) Galera'ya özgü parametreler eklenir.
my.cnf Temel Ayarları
[mysqld]bind-address = 0.0.0.0 # Tüm ağ arayüzlerinden erişime izin verwsrep_on=ONwsrep_provider=/usr/lib64/galera-4/libgalera_smm.sowsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103" # Kümedeki tüm düğümlerin IP adresleriwsrep_cluster_name="my_galera_cluster"wsrep_node_address="192.168.1.101" # Bu düğümün IP adresiwersrep_node_name="galera_node_1" # Bu düğümün benzersiz adıpxc_strict_mode=ENFORCING # Veri tutarlılığını sağlamak için katı modwsrep_sst_method=rsync # Durum anlık görüntüsü transfer yöntemi (rsync, mariabackup, xtrabackup)wsrep_sst_auth="sst_user:sst_password" # SST için kullanıcı adı ve şifreYukarıdaki örnekte, wsrep_cluster_address tüm küme düğümlerinin IP'lerini içerir. İlk düğüm başlatılırken bu adres boş bırakılarak veya sadece kendisi belirtilerek bir küme bootstrapping (başlatma) yapılabilir. Diğer düğümler ise küme adresinde mevcut düğümleri belirterek katılır.
Cluster Başlatma ve Node Ekleme
Kümenin ilk düğümünü başlatmak için özel bir komut kullanılır:
systemctl start mysql@bootstrap.service # MariaDB için (veya mysqld_bootstrap)Veya doğrudan mysqld komutuyla:
mysqld --wsrep-new-cluster # İlk düğüm içinDiğer düğümler ise normal MySQL başlatma komutlarıyla küme adresinde belirtilen aktif düğümlere bağlanır:
systemctl start mysql.serviceHer düğüm başarılı bir şekilde katıldığında, SHOW STATUS LIKE 'wsrep_cluster_size'; komutu ile küme boyutunu kontrol edebilirsiniz.
Üretim Senaryolarında Galera Cluster Yönetimi
Galera'yı üretim ortamında verimli bir şekilde kullanmak için bazı önemli kavramları ve yönetim pratiklerini anlamak gerekir.
State Snapshot Transfer (SST) ve Incremental State Transfer (IST)
Bir düğüm kümeden ayrılıp geri döndüğünde veya yeni bir düğüm eklendiğinde, kümedeki diğer düğümlerle verilerini senkronize etmesi gerekir. Bu senkronizasyon iki ana yöntemle yapılır:
- SST (State Snapshot Transfer): Yeni katılan düğüm, kümedeki aktif bir düğümden tüm veri kopyasını alır. Bu, veritabanı boyutuna bağlı olarak zaman alıcı olabilir ve kaynak tüketen bir işlemdir.
rsync,mariabackup(MariaDB için) veyaxtrabackup(Percona için) gibi yöntemler kullanılır. - IST (Incremental State Transfer): Eğer ayrılan düğümün kümeden ayrıldığı süre boyunca kaçırdığı write-setler, hala kümedeki diğer düğümlerin önbelleğinde (gcache) mevcutsa, sadece bu eksik write-setler transfer edilir. Bu çok daha hızlı ve verimli bir senkronizasyon yöntemidir.
Flow Control ve Performans Yönetimi
Galera Cluster'da tüm düğümler senkronize çalıştığı için, kümedeki en yavaş düğüm, tüm kümenin hızını belirleyebilir. Eğer bir düğüm write-setleri diğerlerinden daha yavaş uyguluyorsa, bu durum diğer düğümlerin de yavaşlamasına neden olabilir. Galera bu durumu 'flow control' mekanizmasıyla yönetir. Geri kalan düğümler, yavaş olan düğümün yetişmesini beklemek için yazma işlemlerini geçici olarak durdurur veya yavaşlatır. wsrep_flow_control_max_avg_bytes ve wsrep_flow_control_min_cert_deps gibi parametrelerle flow control davranışları ayarlanabilir. Doğru boyutlandırma ve ağ performansı, flow control'ün etkisini minimize etmek için kritik öneme sahiptir.
Split-Brain Durumlarından Korunma ve Quorum
Bir ağ bölümlemesi (network partition) durumunda, Galera kümesi farklı parçalara ayrılabilir. Bu durum 'split-brain' olarak adlandırılır. Galera, çoğunluk oyu (quorum) ilkesiyle bu durumu engeller. Kümenin yazma işlemlerine devam edebilmesi için aktif düğümlerin sayısının toplam düğüm sayısının yarısından fazla olması gerekir. Örneğin, 3 düğümlü bir kümede en az 2 aktif düğüm olmalıdır. Eğer düğüm sayısı bu eşiğin altına düşerse, kalan düğümler kendini 'non-primary component' olarak işaretler ve yazma işlemlerini durdurur. Bu, veri tutarsızlığını önler. Düğümlerin 2n+1 şeklinde (örn. 3, 5, 7) tek sayıda olması, split-brain durumlarını yönetmeyi kolaylaştırır.
Yüksek Trafikli E-Ticaret Uygulaması Örneği
Bir e-ticaret platformunun yoğun Black Friday satış döneminde, veritabanı üzerindeki okuma ve yazma yükü zirve yapar. Geleneksel master-slave kurulumunda, master düğüm tek bir arıza noktasıdır ve tüm yazma trafiğini tek başına yönetir. Galera Cluster ile üç düğümlü bir yapı kurarak, tüm düğümleri bir yük dengeleyici (örneğin HAProxy) arkasına konumlandırabiliriz. Yük dengeleyici, hem okuma hem de yazma trafiğini bu üç düğüm arasında dağıtır. Eğer düğümlerden biri arızalanırsa, yük dengeleyici otomatik olarak arızalı düğümü havuzdan çıkarır ve trafiği kalan düğümlere yönlendirir. Uygulama tarafında herhangi bir değişiklik yapılmasına gerek kalmaz ve hizmet kesintisiz devam eder. Ayrıca, bakım penceresi gerektiğinde, bir düğüm tek tek kümeden çıkarılabilir, bakımı yapılabilir ve yeniden eklenebilir. Bu sırada diğer düğümler hizmet vermeye devam eder, böylece neredeyse sıfır kesintiyle veritabanı bakımı yapılabilir.
Sonuç
MySQL Galera Cluster, yüksek erişilebilirlik ve veri tutarlılığı gerektiren modern uygulamalar için güçlü bir çözümdür. Senkron replikasyon, multi-master yetenekleri ve otomatik çakışma çözümü mekanizmaları sayesinde, tek bir arıza noktasını ortadan kaldırır ve sürekli iş sürekliliği sağlar. Doğru yapılandırma, izleme ve yönetim pratikleriyle Galera, kritik üretim ortamlarında istikrarlı ve ölçeklenebilir bir veritabanı altyapısı sunar. Her ne kadar kurulumu ve yönetimi asenkron replikasyondan daha karmaşık görünse de, sunduğu avantajlar bu çabaya değerdir.