Uncategorized

MySQL Cluster Mimarileri: Kapsamlı Rehber

Yüksek erişilebilirlik (High Availability), veri güvenliği ve yatay ölçeklenebilirlik günümüz veritabanı altyapılarının vazgeçilmez gereksinimleri haline geldi. Tek bir MySQL sunucusu, küçük ve orta ölçekli projeler için yeterli olsa da; artan trafik, kesintisiz hizmet beklentisi ve veri kaybı riski, dağıtık mimarilere geçişi zorunlu kılıyor. Bu makale, MySQL ekosistemindeki dört temel kümeleme yaklaşımını detaylı biçimde ele alıyor.

1. MySQL InnoDB Cluster

Genel Bakış

InnoDB Cluster, Oracle’ın MySQL için sunduğu resmi yüksek erişilebilirlik çözümüdür. Üç temel bileşeni bir arada kullanarak “kutudan çıkan” (out-of-the-box) bir cluster deneyimi sunar.

Bileşenler

MySQL Group Replication: Cluster’ın kalbidir. Paxos tabanlı bir konsensüs protokolü kullanarak, gruptaki tüm node’ların aynı veri durumunu paylaşmasını garanti eder. Bir transaction (işlem) ancak çoğunluk tarafından onaylandığında commit edilir; bu sayede veri tutarlılığı sağlanır.

MySQL Shell: Cluster’ı oluşturmak, yapılandırmak ve izlemek için kullanılan gelişmiş yönetim aracıdır. Python ve JavaScript modlarında çalışır. dba.createCluster() gibi üst düzey API fonksiyonlarıyla, karmaşık replikasyon kurulumlarını birkaç komuta indirger.

MySQL Router: Uygulama sunucuları ile cluster node’ları arasında oturan hafif bir proxy katmanıdır. Gelen bağlantıları otomatik olarak aktif primary node’a yönlendirir. Primary çökerse, yeni seçilen primary’ye kesintisiz geçiş sağlar. Okuma yoğun iş yükleri için round-robin dengeleme yapabilir.

Çalışma Modları

Single-Primary Mod: Varsayılan ve önerilen moddur. Tek bir node yazma işlemlerini kabul eder, diğer node’lar salt okunurdur. Primary node çökerse, grup otomatik olarak yeni bir primary seçer. Yazma çakışması riski sıfırdır.

Multi-Primary Mod: Tüm node’lar eş zamanlı yazma yapabilir. Daha yüksek yazma throughput’u sunar ancak çakışma algılama mekanizması (certification-based conflict detection) devreye girer. Aynı satıra eş zamanlı yazma olursa işlemlerden biri geri alınır (rollback). Uygulama katmanında dikkatli tasarım gerektirir.

Minimum Gereksinimler

Cluster’ın sağlıklı çalışması için en az 3 node gerekir. Paxos konsensüsü, çoğunluk ilkesine (quorum) dayanır; 3 node’dan biri çökse bile kalan 2 node çoğunluğu sağlar ve hizmet devam eder. Üretim ortamları için 3 veya 5 node yaygındır. Çift sayı önerilmez çünkü split-brain senaryolarında quorum kaybı riski artar.

Temel Kurulum Adımları

bash

# 1. Her node'da MySQL 8.0+ kurulumu
sudo apt install mysql-server

# 2. Her node'un my.cnf ayarları
# server-id benzersiz olmalıdır
server-id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=mysql-bin
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
plugin_load_add='group_replication.so'

javascript

// 3. MySQL Shell ile cluster oluşturma
shell.connect('root@node1:3306')
var cluster = dba.createCluster('myCluster')

// 4. Diğer node'ları ekleme
cluster.addInstance('root@node2:3306')
cluster.addInstance('root@node3:3306')

// 5. Durum kontrolü
cluster.status()

Avantajlar ve Dezavantajlar

InnoDB Cluster, Oracle’ın resmi desteği ve entegre araçları sayesinde kurulumu nispeten kolaydır. Otomatik failover, metadata tabanlı yönlendirme ve Group Replication’ın sağladığı güçlü tutarlılık garantileri öne çıkan artılarıdır. Öte yandan, yazma performansı tek node’a bağlıdır (single-primary modda), yüksek gecikme (latency) olan WAN ortamlarında performans düşer ve Group Replication’ın sınırlamaları (büyük transaction’lar, foreign key kısıtlamaları) uygulamaya yansıyabilir.

Ne Zaman Tercih Edilmeli?

InnoDB Cluster, MySQL ekosistemine bağlı kalmak isteyen, otomatik failover gerektiren ve okuma ağırlıklı iş yüklerine sahip orta-büyük ölçekli projeler için idealdir. Resmi destek ve araç zinciri önceliğiniz ise en güçlü adaydır.

2. MySQL NDB Cluster

Genel Bakış

NDB (Network DataBase) Cluster, telekom ve finans gibi ultra düşük gecikme ve “five-nines” (%99.999) erişilebilirlik gerektiren sektörler için tasarlanmış, shared-nothing mimarisine dayanan özel bir MySQL çözümüdür. Verinin tamamı veya büyük bölümü bellekte (in-memory) tutulur.

Mimari ve Node Tipleri

Management Node (ndb_mgmd): Cluster’ın konfigürasyonunu tutar, node’ların birbirine bağlanmasını koordine eder ve cluster’ın sağlık durumunu izler. Üretimde yedekli çalıştırılması önerilir.

Data Node (ndbd / ndbmtd): Verilerin fiili olarak depolandığı ve replike edildiği node’lardır. Veri, node gruplarına (node group) bölünür ve her parça (partition) en az iki data node arasında senkron olarak kopyalanır. ndbmtd çok iş parçacıklı (multi-threaded) versiyondur ve modern donanımlarda tercih edilir.

SQL Node (mysqld + NDB engine): Uygulamaların bağlandığı, standart MySQL protokolü konuşan arayüz node’larıdır. NDB storage engine aktif olarak çalışır. Birden fazla SQL node paralel yazma/okuma yapabilir.

Veri Dağıtım Modeli

NDB, verileri hash-based partitioning ile data node’lara dağıtır. Her satır, primary key’ine göre bir partitiona atanır. Her partition en az bir replikaya sahiptir; bir data node çökerse, replikayı tutan node hizmete devam eder. Node geri geldiğinde otomatik senkronizasyon başlar.

Temel Konfigürasyon

ini

# config.ini - Management Node konfigürasyonu
[ndbd default]
NoOfReplicas=2
DataMemory=4G
IndexMemory=512M

[ndb_mgmd]
hostname=mgm1.example.com
datadir=/var/lib/mysql-cluster

[ndbd]
hostname=data1.example.com
datadir=/var/lib/mysql-cluster

[ndbd]
hostname=data2.example.com
datadir=/var/lib/mysql-cluster

[mysqld]
hostname=sql1.example.com

[mysqld]
hostname=sql2.example.com

bash

# Management node başlatma
ndb_mgmd -f /var/lib/mysql-cluster/config.ini

# Data node başlatma
ndbd --connect-string="mgm1.example.com:1186"

# SQL node başlatma
mysqld --ndbcluster --ndb-connectstring="mgm1.example.com:1186"

Avantajlar ve Dezavantajlar

NDB Cluster, mikrosaniye düzeyinde okuma gecikmeleri, gerçek multi-master yazma, otomatik sharding ve %99.999 erişilebilirlik sunar. Sıfır veri kaybı garantisi (senkron replikasyon) en güçlü yanlarından biridir. Ancak mimari karmaşıklığı yüksektir; en az 4 makine gerektirir (1 yönetim, 2 veri, 1 SQL). Veri bellekte tutulduğu için RAM maliyeti önemli bir etkendir. Ayrıca, JOIN performansı InnoDB kadar iyi değildir ve bazı SQL özellikleri (örneğin belirli veri tipleri, foreign key sınırlamaları) desteklenmez.

Ne Zaman Tercih Edilmeli?

NDB Cluster, gerçek zamanlı sistemler (ödeme altyapıları, telekomünikasyon HLR/HSS), ultra düşük gecikme gereksinimleri, yoğun anahtar-değer (key-value) erişim kalıpları ve sıfır kesinti toleransı olan ortamlar için en uygun seçenektir. Geleneksel web uygulamaları için genellikle aşırı karmaşıktır.

3. Galera Cluster (Percona XtraDB / MariaDB Galera)

Genel Bakış

Galera Cluster, Codership tarafından geliştirilen wsrep (Write Set Replication) API’si üzerine inşa edilmiş, senkron multi-master replikasyon çözümüdür. Percona XtraDB Cluster ve MariaDB Galera Cluster olarak iki ana dağıtımı bulunur; her ikisi de aynı Galera kütüphanesini kullanır.

Çalışma Prensibi

Galera’da her node tam bir MySQL/MariaDB kopyasıdır ve her node’a yazma yapılabilir. Bir transaction commit edildiğinde, “write set” adı verilen değişiklik paketi tüm node’lara gönderilir. Her node bu write set’i sertifikasyon (certification) sürecinden geçirir: çakışma yoksa uygulanır, varsa geri alınır. Bu süreç, “virtually synchronous replication” olarak adlandırılır; tamamen senkron değildir ancak asenkron replikasyondan çok daha güçlü tutarlılık sunar.

Temel Özellikler

Senkron Multi-Master: Her node’a okuma ve yazma yapılabilir. Uygulama katmanında yazma yönlendirmesi yapmaya gerek yoktur (ancak en iyi uygulama olarak önerilir).

Otomatik Node Provisioning: Yeni bir node cluster’a katıldığında, SST (State Snapshot Transfer) veya IST (Incremental State Transfer) ile otomatik senkronize olur.

Quorum ve Split-Brain Koruması: Cluster, ağ bölünmesi (network partition) durumunda çoğunluk tarafındaki node’lar çalışmaya devam eder, azınlık tarafı kendini salt okunur moda alır.

Kurulum Örneği (Percona XtraDB Cluster)

bash

# Her node'da Percona XtraDB Cluster kurulumu
sudo apt install percona-xtradb-cluster-80

ini

# Node 1 - my.cnf
[mysqld]
server-id=1
wsrep_provider=/usr/lib/galera4/libgalera_smm.so
wsrep_cluster_name="my_galera_cluster"
wsrep_cluster_address="gcomm://node1,node2,node3"
wsrep_node_name=node1
wsrep_node_address=192.168.1.101
wsrep_sst_method=xtrabackup-v2

pxc_strict_mode=ENFORCING
binlog_format=ROW
innodb_autoinc_lock_mode=2

bash

# İlk node'u bootstrap olarak başlatma
sudo systemctl start mysql@bootstrap

# Diğer node'ları normal başlatma
sudo systemctl start mysql  # node2 ve node3'te

sql

-- Cluster durumunu kontrol etme
SHOW STATUS LIKE 'wsrep_cluster_size';
-- Sonuç: 3 (tüm node'lar bağlı)

SHOW STATUS LIKE 'wsrep_cluster_status';
-- Sonuç: Primary (quorum sağlanmış)

SHOW STATUS LIKE 'wsrep_local_state_comment';
-- Sonuç: Synced (node senkronize)

Galera’ya Özgü Kısıtlamalar

Galera’nın verimli çalışması için bazı kurallar geçerlidir. Tüm tablolarda primary key bulunmalıdır. Yalnızca InnoDB/XtraDB engine desteklenir; MyISAM replike edilmez. Büyük transaction’lar (yüz binlerce satır güncelleyen) performansı ciddi şekilde etkiler çünkü write set boyutu büyür. Ayrıca LOCK TABLES ve GET_LOCK() gibi tabloya kilitleme ifadeleri cluster genelinde desteklenmez.

Avantajlar ve Dezavantajlar

Galera’nın en güçlü yanı kullanım kolaylığıdır. InnoDB Cluster’a kıyasla daha az bileşen gerektirir (ayrı bir Router/Shell yok), kurulum görece basittir ve yıllardır üretim ortamlarında kanıtlanmıştır. Her node’un aktif olması kaynak kullanımını optimize eder. Dezavantaj olarak, WAN üzerinde sertifikasyon gecikmesi yazma hızını düşürür, çakışma durumunda deadlock oranı artar ve yukarıda bahsedilen engine/DDL kısıtlamaları mevcuttur.

Ne Zaman Tercih Edilmeli?

Galera, web uygulamaları için yüksek erişilebilirlik isteyen, okuma ve yazma işlemlerini tüm node’lara dağıtmak isteyen, basit bir kurulum ve yönetim arayan ve MariaDB ya da Percona ekosistemini kullanan ekipler için mükemmel bir tercihtir.

4. MySQL Replikasyon (Master-Slave / Source-Replica)

Genel Bakış

MySQL Replikasyon, en eski ve en yaygın kullanılan dağıtık mimaridir. Teknik olarak bir cluster çözümü olmasa da, uygulamada birçok ekip tarafından yüksek erişilebilirlik ve okuma ölçeklendirmesi amacıyla kullanılır. Bir kaynak (source/master) sunucu yazma işlemlerini alır, değişiklikleri binary log aracılığıyla bir veya daha fazla kopyaya (replica/slave) iletir.

Replikasyon Türleri

Asenkron Replikasyon: Varsayılan moddur. Source, transaction’ı commit ettikten sonra replica’nın onayını beklemez. Düşük gecikme sağlar ancak source çökerse henüz replike edilmemiş transaction’lar kaybolabilir.

Yarı-Senkron Replikasyon (Semi-Synchronous): Source, commit etmeden önce en az bir replica’nın transaction’ı aldığını (relay log’a yazdığını) onaylamasını bekler. Veri kaybı riskini büyük ölçüde azaltır ancak yazma gecikmesini hafifçe artırır.

GTID Tabanlı Replikasyon: Global Transaction Identifier kullanarak, her transaction’a evrensel benzersiz bir kimlik atar. Failover sırasında replica’ların source ile hizalanmasını kolaylaştırır ve yönetimi basitleştirir.

Temel Kurulum

ini

# Source (Master) - my.cnf
[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON

ini

# Replica (Slave) - my.cnf
[mysqld]
server-id=2
relay_log=relay-bin
read_only=ON
gtid_mode=ON
enforce_gtid_consistency=ON

sql

-- Source'da replikasyon kullanıcısı oluşturma
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';

-- Replica'da replikasyonu başlatma (GTID tabanlı)
CHANGE REPLICATION SOURCE TO
    SOURCE_HOST='source.example.com',
    SOURCE_USER='repl_user',
    SOURCE_PASSWORD='strong_password',
    SOURCE_AUTO_POSITION=1;

START REPLICA;
SHOW REPLICA STATUS\G

Yaygın Topolojiler

Tek Source, Çoklu Replica: En basit yapıdır. Okuma iş yükü replica’lara dağıtılır; source yalnızca yazmayı üstlenir. Çoğu web uygulaması için yeterlidir.

Zincir (Chain) Replikasyon: Source → Replica A → Replica B şeklinde sıralı replikasyon. Source üzerindeki replikasyon yükünü azaltır ancak gecikme artar.

Çift Yönlü (Circular) Replikasyon: İki veya daha fazla node karşılıklı replike eder. Multi-master gibi görünse de çakışma yönetimi yoktur; bu yüzden genellikle önerilmez.

Failover Yönetimi

Asenkron replikasyon otomatik failover sağlamaz. Failover için ek araçlar kullanılır. MHA (Master High Availability) Manager, Orchestrator ve ProxySQL gibi araçlar source çöktüğünde replica’lardan birini otomatik olarak yeni source olarak terfi ettirebilir.

Avantajlar ve Dezavantajlar

Replikasyonun en büyük avantajı basitliğidir. Ek yazılım gerektirmez, MySQL’in doğal bir özelliğidir. Okuma ölçeklendirmesi için çok etkilidir; coğrafi olarak dağıtık replica’lar WAN üzerinde iyi çalışır. Dezavantaj olarak, otomatik failover yoktur (harici araç gerekir), asenkron modda veri kaybı riski bulunur ve yazma ölçeklendirmesi yapılamaz (tek source darboğaz olabilir).

Ne Zaman Tercih Edilmeli?

Replikasyon, okuma ağırlıklı iş yükleri, raporlama/analitik replica’ları, coğrafi dağıtım gereksinimleri, yedekleme amaçlı ikincil kopyalar ve basit yüksek erişilebilirlik ihtiyaçları için en uygun çözümdür. Düşük bütçeli projeler için de doğal bir başlangıç noktasıdır.

Karşılaştırma Tablosu

ÖzellikInnoDB ClusterNDB ClusterGalera ClusterReplikasyon
MimariSingle/Multi-PrimaryShared-NothingMulti-MasterSource-Replica
Replikasyon TipiSenkron (Paxos)SenkronVirtually SenkronAsenkron / Yarı-Senkron
Minimum Node3432
Otomatik FailoverEvetEvetEvetHayır (harici araç)
Yazma ÖlçeklendirmesiSınırlıEvetSınırlıHayır
Okuma ÖlçeklendirmesiEvetEvetEvetEvet
GecikmeDüşükÇok DüşükDüşük-OrtaDeğişken
Kurulum KarmaşıklığıOrtaYüksekDüşük-OrtaDüşük
WAN UygunluğuSınırlıSınırlıSınırlıİyi
Veri Kaybı RiskiÇok DüşükYokÇok DüşükVar (asenkron)

Sonuç: Doğru Çözümü Seçmek

Doğru cluster mimarisini seçmek, projenin gereksinimlerine bağlıdır. Resmi destek ve entegre araç zinciri istiyorsanız InnoDB Cluster; mikrosaniye gecikme ve sıfır kesinti gerektiren kritik sistemler için NDB Cluster; basit kurulum ile multi-master yazma istiyorsanız Galera Cluster; yalnızca okuma ölçeklendirmesi veya yedekleme replica’sı yeterli ise klasik replikasyon en mantıklı başlangıç noktasıdır.

Her mimarinin güçlü ve zayıf yönleri bulunur. Küçük başlayıp, ihtiyaç büyüdükçe karmaşık mimarilere geçiş yapmak genellikle en sağlıklı yaklaşımdır. Replikasyon ile başlayıp, sonradan InnoDB Cluster veya Galera’ya terfi etmek yaygın ve başarılı bir stratejidir.

Muhammed Kerim Koç

1996 yılında Giresun Şebinkarahisarda dünyaya geldim. İlk ve orta öğretimi Şebinkarahisarda tamamladım. Liseyi Şebinkarahisar Anadolu Teknik ve Endüstri Meslek Lisesinde bitirdim. Üniversite için de Şebinkarahisar Teknik Bilimler Meslek Yüksek Okulunda Bilgisayar programcılığını okudum. Üniversite stajı için gelmiş olduğum özel bir firmada işe başladım. 5,5 yıl bu firmadan çalıştıktan sonra farklı bir sektör olan inşaat sektöründe Bilgi teknolojileri Uzmanı olarak 8 ay çalıştım. Daha sonra özel bir şirkette Sistem Network Sorumlusu olarak 4 ay çalıştıktan sonra proje sonlandırılmasından dolayı işten ayrıldım. Tekrar dan 5.5 yıl çalışmış olduğum firmaya Sistem ve Network Yöneticisi olarak geri döndüm ve çalışmaya başladım. Kendimi geliştirmek için Bilge Adam Akademi den Sistem Uzmanlığı eğitimi aldım. Sanallaştırma ve Ağ tarafında kendimi sürekli olarak geliştiriyorum.
Başa dön tuşu