MySQL InnoDB Cluster (Group Replication) kurulumu
Belirti
Amaç: MySQL için InnoDB Cluster (Group Replication + MySQL Shell + MySQL Router) ile otomatik failover'lı yüksek erişilebilirlik kur.
1. Ön koşulları sağla
InnoDB Cluster için her düğümde MySQL 8.0+, benzersiz server_id, GTID modu ve InnoDB depolama motoru gerekir. Tüm instance'lar birbirine ağ üzerinden erişebilmeli ve tablolarda primary key bulunmalıdır. Yönetim için bir clusterAdmin kullanıcısı hazırlanır.
MySQL
-- her instance'ta my.cnf:
-- server_id benzersiz, gtid_mode=ON, enforce_gtid_consistency=ON
CREATE USER 'icadmin'@'%' IDENTIFIED BY 'gizli';
GRANT ALL PRIVILEGES ON *.* TO 'icadmin'@'%' WITH GRANT OPTION;2. Her instance'ı MySQL Shell ile yapılandır
mysqlsh içinde dba.configureInstance() her düğümü Group Replication'a uygun hâle getirir; eksik parametreleri düzeltir ve gerekirse yeniden başlatma ister. Tüm düğümlerde tekrarlanır.
MySQL
-- mysqlsh:
dba.configureInstance('icadmin@node1:3306')
dba.configureInstance('icadmin@node2:3306')
dba.configureInstance('icadmin@node3:3306')3. Cluster'ı oluştur (seed düğüm)
Bir düğüme bağlanılıp dba.createCluster() ile küme başlatılır; bu düğüm ilk primary olur. Küme nesnesi döner ve sonraki eklemeler için kullanılır.
MySQL
-- mysqlsh, node1'e bağlıyken:
var cluster = dba.createCluster('appCluster')4. Diğer instance'ları cluster'a ekle
cluster.addInstance() ile secondary düğümler eklenir. recoveryMethod olarak clone (fiziksel klon, yeni düğüm için hızlı) veya incremental (GTID ile) seçilir. En az 3 düğüm tek çoğunluk ve otomatik failover sağlar.
MySQL
-- mysqlsh:
cluster.addInstance('icadmin@node2:3306', {recoveryMethod: 'clone'})
cluster.addInstance('icadmin@node3:3306', {recoveryMethod: 'clone'})5. MySQL Router'ı bootstrap et
MySQL Router uygulama ile küme arasında yönlendirme yapar; okuma/yazma (6446) ve salt-okuma (6447) portları sunar ve primary değişince trafiği otomatik yönlendirir. Bootstrap küme metadatasından yapılandırmayı üretir.
MySQL
mysqlrouter --bootstrap icadmin@node1:3306 --user=mysqlrouter --directory /etc/mysqlrouter
# Ardından: mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf &6. Küme durumunu kontrol et ve failover'ı doğrula
cluster.status() her düğümün rolünü (R/W primary, R/O secondary) ve durumunu (ONLINE) gösterir. clusterName ve topology sağlıklı olmalı. Primary'yi kapatıp otomatik yeni primary seçimini gözlemleyerek failover test edilir.
MySQL
-- mysqlsh:
var cluster = dba.getCluster('appCluster')
cluster.status()
-- SQL ile üyeler:
SELECT member_host, member_role, member_state FROM performance_schema.replication_group_members;