Ubuntu 16.04 Üzerinde Çok Düğümlü MySQL Kümesi Oluşturma Rehberi
MySQL Cluster, yüksek erişilebilirlik, doğrusal ölçeklenebilirlik ve gerçek zamanlı performans sağlamak üzere tasarlanmış, dağıtık ve bellekte çalışan bir veritabanı çözümüdür. Geleneksel tek sunuculu MySQL kurulumlarının aksine, MySQL Cluster veriyi birden çok sunucuya dağıtarak tek bir hata noktasını ortadan kaldırır ve iş yükünü birden fazla düğüme yayar. Bu makalede, Ubuntu 16.04 işletim sistemi üzerinde çok düğümlü bir MySQL Cluster kurulumunun adım adım nasıl yapılacağını ayrıntılı olarak inceleyeceğiz.
Giriş: MySQL Kümesi Neden Gereklidir?
Günümüzün hızla büyüyen veri ihtiyaçları ve her zaman açık kalması gereken uygulamalar, veritabanı sistemleri üzerinde büyük bir baskı oluşturmaktadır. Tek bir MySQL sunucusu, donanım arızaları, ağ kesintileri veya aşırı yüklenme gibi durumlarda uygulamanın tamamen durmasına neden olabilir. İşte bu noktada MySQL Cluster devreye girer.
MySQL Cluster’ın temel faydaları şunlardır:
* Yüksek Erişilebilirlik (High Availability): Veri, birden fazla düğümde yedekli olarak saklanır. Bir düğüm çevrimdışı olsa bile, diğer düğümler hizmet vermeye devam eder ve veri kaybı yaşanmaz.
* Doğrusal Ölçeklenebilirlik (Linear Scalability): Küme yapısına yeni düğümler ekleyerek performans ve depolama kapasitesi kolayca artırılabilir. Bu, özellikle yüksek okuma/yazma yüküne sahip uygulamalar için kritik öneme sahiptir.
* Gerçek Zamanlı Performans: Verinin bellekte depolanması ve dağıtık mimarisi sayesinde düşük gecikme süresi ve yüksek işlem hacmi sunar.
* Hata Toleransı (Fault Tolerance): Kümedeki düğümlerden biri başarısız olduğunda, sistem otomatik olarak diğer düğümlere yükü dağıtır ve kesintisiz çalışmaya devam eder.
* Otomatik Parçalama (Automatic Sharding): Veri, küme içindeki veri düğümleri arasında otomatik olarak parçalanır (sharding), bu da manuel veri yönetimi yükünü azaltır.
Bu rehberde, MySQL Cluster’ın üç ana bileşenini (Yönetim Düğümü, Veri Düğümü ve SQL Düğümü) ayrı sunuculara kurarak sağlam ve yüksek performanslı bir küme ortamı oluşturacağız. Ubuntu 16.04, sunucu ortamlarında hala yaygın olarak kullanılan bir sürüm olsa da, daha yeni Ubuntu sürümlerinde de benzer adımlar izlenebilir. Ancak bu makale özel olarak 16.04 sürümünü hedeflemektedir.
Ön Gereksinimler ve Topoloji
Kuruluma başlamadan önce, ortamınızın belirli gereksinimleri karşıladığından emin olmalısınız. Bu rehber için minimum 4 adet Ubuntu 16.04 sunucusu (fiziksel veya sanal makine) kullanacağız.
Gerekli Donanım ve Yazılım:
* İşletim Sistemi: Her düğüm için Ubuntu Server 16.04 LTS (64-bit).
* CPU: Her düğüm için minimum 2 çekirdek. Veri düğümleri için daha fazla çekirdek önerilir.
* RAM: Yönetim ve SQL düğümleri için minimum 2 GB RAM, Veri düğümleri için minimum 4 GB RAM (veri boyutu arttıkça bu miktar artırılmalıdır).
* Disk Alanı: Her düğüm için minimum 20 GB disk alanı. Veri düğümleri için veri boyutuna bağlı olarak daha fazla alan gerekebilir.
* Ağ: Tüm düğümler arasında düşük gecikmeli, yüksek bant genişliğine sahip bir ağ bağlantısı.
* Statik IP Adresleri: Tüm düğümler için statik IP adresleri zorunludur.
Küme Topolojisi ve IP Adresleri:
Bu rehberde aşağıdaki örnek IP adresleri ve rollerini kullanacağız:
* MGM Düğümü (Management Node): 192.168.1.10 (Hostname: mgm-node)
* Kümenin yapılandırmasını yönetir ve diğer düğümleri koordine eder. Veriyi depolamaz.
* Veri Düğümü 1 (Data Node 1): 192.168.1.11 (Hostname: data-node1)
* Veriyi bellekte ve diskte depolar, işlemlerin ana yükünü taşır.
* Veri Düğümü 2 (Data Node 2): 192.168.1.12 (Hostname: data-node2)
* Veri Düğümü 1’in yedeği olarak çalışır, veri yedekliliğini sağlar.
* SQL Düğümü (SQL Node): 192.168.1.13 (Hostname: sql-node)
* Standart MySQL sunucusu gibi davranır, NDB depolama motorunu kullanarak verilere erişir. Uygulamalar bu düğüme bağlanır.
Ön Yapılandırma Adımları (Tüm Düğümlerde):
1. Sistem Güncellemesi:
Tüm düğümlerde sistem paketlerini güncelleyin:
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
2. Hostname Ayarları:
Her düğümde kendi hostname’ini ayarlayın ve /etc/hosts dosyasını düzenleyerek düğümler arası isim çözümlemesini sağlayın.
Örneğin, mgm-node üzerinde:
sudo hostnamectl set-hostname mgm-node
Tüm düğümlerde /etc/hosts dosyasını açın:
sudo nano /etc/hosts
Ve aşağıdaki satırları ekleyin (kendi IP adreslerinizle değiştirin):
127.0.0.1 localhost
192.168.1.10 mgm-node
192.168.1.11 data-node1
192.168.1.12 data-node2
192.168.1.13 sql-node
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Değişiklikleri kaydedin ve her düğümde ping mgm-node gibi komutlarla isim çözümlemesinin doğru çalıştığını doğrulayın.
3. AppArmor Devre Dışı Bırakma:
MySQL Cluster’ın bazı sürümleri AppArmor ile çakışabilir. Sorunları önlemek için AppArmor’ı devre dışı bırakmak iyi bir uygulamadır:
sudo systemctl stop apparmor
sudo systemctl disable apparmor
4. Güvenlik Duvarı (UFW) Yapılandırması:
Tüm düğümlerde UFW’yi etkinleştirin ve gerekli portlara izin verin.
sudo ufw enable
sudo ufw allow ssh # SSH erişimi için
* MGM Düğümü (mgm-node):
* 1186/tcp (NDB Management Server)
sudo ufw allow 1186/tcp
* Veri Düğümleri (data-node1, data-node2):
* NDB Data Node, yönetim düğümü ve diğer veri düğümleriyle iletişim kurmak için genellikle dinamik portlar kullanır, ancak yönetim düğümüne bağlantı başlatır. Eğer sıkı bir güvenlik duvarınız varsa, yönetim düğümünden gelen bağlantılara izin vermeniz gerekebilir. Genellikle 1186 portu dışındaki bağlantılar için özel bir kurala gerek yoktur, ancak test için tüm düğümler arasında tam erişime izin vermek isteyebilirsiniz:
sudo ufw allow from 192.168.1.0/24 to any port 1186 # MGM'e erişim
# Diğer NDB portları için dinamik aralıkları açmak yerine, sadece iç ağdan gelen tüm bağlantılara izin verilebilir:
sudo ufw allow from 192.168.1.0/24
* Önemli Not: Üretim ortamlarında sadece gerekli portları açmak esastır. MySQL Cluster’ın veri düğümleri ve SQL düğümleri, yönetim düğümüne bağlanmak için 1186 portunu kullanır. Kendi aralarında ise genellikle dinamik portlar üzerinden iletişim kurarlar. Bu nedenle, küme içindeki düğümler arasında tam ağ erişimine izin vermek en kolay yoldur.
* SQL Düğümü (sql-node):
* 3306/tcp (MySQL Client Connections)
* 1186/tcp (NDB Management Server)
sudo ufw allow 3306/tcp
sudo ufw allow 1186/tcp
Güvenlik duvarı kurallarını kontrol edin:
sudo ufw status verbose
MySQL Cluster Paketlerinin Kurulumu
MySQL Cluster’ın belirli bir sürümünü kurmak için MySQL APT deposunu kullanacağız. Ubuntu 16.04 için MySQL Cluster 7.5 veya 7.6 (MySQL 5.7 NDB) sürümleri genellikle tercih edilir. Bu rehberde MySQL Cluster 7.6’yı hedefleyeceğiz.
1. MySQL APT Deposu Ekleme (Tüm Düğümlerde):
MySQL APT yapılandırma paketini indirin:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
Paketi kurun. Bu adımda, size hangi MySQL ürününü kurmak istediğiniz sorulacaktır.
sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb
Kurulum sırasında, “MySQL Server & Cluster” seçeneğini seçin ve ardından “MySQL Cluster 7.6” (veya mevcut en güncel 7.x sürümü) seçeneğini seçin. Diğer seçenekleri varsayılan olarak bırakabilirsiniz. OK ile onaylayın.
Depo yapılandırması tamamlandıktan sonra, paket listesini güncelleyin:
sudo apt update
2. Düğümlere Özgü Paketlerin Kurulumu:
Şimdi her düğüm tipine uygun paketleri kuralım.
* MGM Düğümü (mgm-node – 192.168.1.10):
Yönetim sunucusunu kurun:
sudo apt install mysql-cluster-community-management-server -y
* Veri Düğümleri (data-node1 – 192.168.1.11 ve data-node2 – 192.168.1.12):
Veri düğümü sunucusunu kurun. Bu düğümlerde MySQL sunucusunun kendisi kurulmaz, sadece NDB veri düğümü bileşeni kurulur.
sudo apt install mysql-cluster-community-data-node -y
* SQL Düğümü (sql-node – 192.168.1.13):
MySQL sunucusunu (NDB desteği ile) ve istemci araçlarını kurun. Kurulum sırasında root şifresi belirlemeniz istenecektir.
sudo apt install mysql-server mysql-client -y
Bu paket, NDB depolama motorunu destekleyen bir mysqld ikilisi içerir.
Yönetim Düğümünü (MGM) Yapılandırma
Yönetim düğümü, kümenin kalbidir. Küme yapılandırmasını içerir ve tüm düğümlerin durumunu izler.
1. Yapılandırma Dizini Oluşturma:
MGM düğümünde ( mgm-node ) bir yapılandırma dizini oluşturun:
sudo mkdir -p /var/lib/mysql-cluster
2. config.ini Dosyasını Oluşturma:
Bu dizinde config.ini adında bir dosya oluşturun ve aşağıdaki içeriği ekleyin. Bu dosya, kümenin tüm düğümlerini ve ayarlarını tanımlar.
sudo nano /var/lib/mysql-cluster/config.ini
İçerik (kendi IP adreslerinizle ve hostname’lerinizle değiştirin):
[ndbd default]
# NDB Veri Düğümleri için varsayılan ayarlar
NoOfReplicas=2 # Veri yedekliliği (2 kopya)
DataMemory=2G # Her veri düğümünde veriye ayrılacak RAM (veri boyutuna göre artırın)
IndexMemory=500M # Her veri düğümünde indekslere ayrılacak RAM
# MaxNoOfTables=1024 # Maksimum tablo sayısı
# MaxNoOfAttributes=10000 # Maksimum öznitelik sayısı
# MaxNoOfOrderedIndexes=512 # Maksimum sıralı indeks sayısı
# MaxNoOfUniqueIndexes=256 # Maksimum benzersiz indeks sayısı
# MaxNoOfConcurrentOperations=100000 # Eşzamanlı işlem sayısı
# TimeBetweenGlobalCheckpoints=2000 # Global checkpoint'ler arası süre (ms)
# HeartbeatIntervalDbDb=1500 # Veri düğümleri arası heartbeat (ms)
# HeartbeatIntervalDbApi=1500 # Veri düğümü-API düğümü arası heartbeat (ms)
[tcp default]
# Küme içi iletişim için TCP/IP ayarları
# Allow multiple connections from the same host, useful for testing
# Allow multiple connections from the same host, useful for testing
# For production, consider removing this or restricting it to specific IPs
# if you have multiple mysqld on same host.
# SharedMemoryConnect = 1
[ndb_mgmd]
# Yönetim Düğümü Tanımı
id=1 # Düğüm ID'si (1-255 arası benzersiz)
hostname=192.168.1.10 # MGM düğümünün IP adresi veya hostname'i
datadir=/var/lib/mysql-cluster # MGM için log ve durum dosyalarının saklanacağı dizin
[ndbd]
# Veri Düğümü 1 Tanımı
id=2 # Benzersiz Düğüm ID'si
hostname=192.168.1.11 # Veri Düğümü 1'in IP adresi
datadir=/var/lib/mysql-cluster/data # Veri düğümü verilerinin saklanacağı dizin
[ndbd]
# Veri Düğümü 2 Tanımı
id=3 # Benzersiz Düğüm ID'si
hostname=192.168.1.12 # Veri Düğümü 2'nin IP adresi
datadir=/var/lib/mysql-cluster/data # Veri düğümü verilerinin saklanacağı dizin
[mysqld]
# SQL Düğümü Tanımı
id=4 # Benzersiz Düğüm ID'si
hostname=192.168.1.13 # SQL Düğümünün IP adresi
# İsteğe bağlı olarak birden fazla SQL düğümü ekleyebilirsiniz
# [mysqld]
# id=5
# hostname=192.168.1.14
DataMemory ve IndexMemory değerlerini sunucularınızın RAM kapasitesine göre ayarlamayı unutmayın. Bu değerler kümenin toplam veri boyutunu ve performansını doğrudan etkiler.
3. Yönetim Düğümünü Başlatma:
Yapılandırma dosyasını kaydettikten sonra, yönetim düğümünü başlatın. --initial parametresi, ilk başlatma için gerekli dizinleri oluşturur ve yapılandırmayı sıfırlar. Bu parametreyi sadece ilk başlatmada veya yapılandırmayı tamamen sıfırlamak istediğinizde kullanın.
sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
Eğer bir çıktı almazsanız veya terminal donarsa, bu genellikle başarıyla başlatıldığı anlamına gelir. Arka planda çalışmasını sağlamak için nohup veya systemd servisi olarak çalıştırmak daha iyidir.
Servis Olarak Başlatma (Önerilen):
Yönetim düğümünü bir systemd servisi olarak çalıştırmak daha sağlıklıdır.
sudo systemctl enable mysql-cluster-mgm
sudo systemctl start mysql-cluster-mgm
sudo systemctl status mysql-cluster-mgm
mysql-cluster-community-management-server paketi genellikle bu servisi otomatik olarak kurar. Eğer config.ini dosyanız varsayılan /etc/mysql-cluster.conf.d/config.ini konumunda değilse, servis dosyasını düzenlemeniz gerekebilir. Ancak /var/lib/mysql-cluster/config.ini genellikle iyi çalışır.
Yönetim istemcisine bağlanarak düğümün durumunu kontrol edin:
sudo ndb_mgm
Çıktı aşağıdaki gibi olmalı (henüz veri ve SQL düğümleri başlamadığı için bağlı görünmeyeceklerdir):
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.11 (Version: 7.6.X, Nodegroup: 0, Master)
id=3 @192.168.1.12 (Version: 7.6.X, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.10 (Version: 7.6.X)
[mysqld(API)] 1 node(s)
id=4 @192.168.1.13 (Version: 7.6.X)
ndb_mgm> istemcisinden çıkmak için exit yazın.
Veri Düğümlerini (NDB) Yapılandırma
Veri düğümleri, kümenin verilerini depolayan ve işlemleri gerçekleştiren bileşenlerdir. Her iki veri düğümünde de aynı adımları uygulayın.
1. Veri Dizini Oluşturma:
Veri düğümleri için config.ini dosyasında belirttiğimiz datadir yolunu oluşturun:
sudo mkdir -p /var/lib/mysql-cluster/data
2. my.cnf Dosyasını Oluşturma:
Her veri düğümünde /etc/mysql/my.cnf dosyasını düzenleyin veya yeni bir dosya oluşturun (/etc/mysql-cluster.conf.d/my.cnf gibi). Bu dosya, veri düğümünün yönetim düğümüne nasıl bağlanacağını belirtir.
sudo nano /etc/mysql/my.cnf
Dosyanın sonuna aşağıdaki satırları ekleyin:
[mysql_cluster]
# Yönetim düğümünün IP adresi
ndb-connectstring=192.168.1.10
3. Veri Düğümlerini Başlatma:
Her iki veri düğümünde de ndbd servisini başlatın:
sudo systemctl enable mysql-cluster-data-node
sudo systemctl start mysql-cluster-data-node
sudo systemctl status mysql-cluster-data-node
Başlatma başarılı olursa, ndb_mgm istemcisinden show komutunu çalıştırdığınızda veri düğümlerinin connected ve started durumda olduğunu görmelisiniz.
MGM düğümünde kontrol:
sudo ndb_mgm
ndb_mgm> show
Çıktı aşağıdaki gibi olmalı:
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.11 (Version: 7.6.X, Nodegroup: 0, Master)
id=3 @196.168.1.12 (Version: 7.6.X, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.10 (Version: 7.6.X)
[mysqld(API)] 1 node(s)
id=4 @192.168.1.13 (Version: 7.6.X)
Bu çıktıda connected ve started durumlarını görmelisiniz.
SQL Düğümünü (mysqld) Yapılandırma
SQL düğümü, uygulamaların bağlanacağı standart MySQL sunucusudur. Ancak, verileri NDB depolama motoru aracılığıyla MySQL Cluster’dan alır.
1. my.cnf Dosyasını Düzenleme:
SQL düğümünde (sql-node) /etc/mysql/my.cnf dosyasını açın:
sudo nano /etc/mysql/my.cnf
[mysqld] bölümünün altına veya dosyanın sonuna aşağıdaki satırları ekleyin:
[mysqld]
# ... mevcut ayarlar ...
ndbcluster # NDB Cluster depolama motorunu etkinleştir
ndb-connectstring=192.168.1.10 # Yönetim düğümünün IP adresi
Bu ayarlar, MySQL sunucusuna NDB Cluster ile iletişim kurmasını söyler.
2. MySQL Servisini Yeniden Başlatma:
Değişikliklerin etkili olması için MySQL servisini yeniden başlatın:
sudo systemctl restart mysql
sudo systemctl status mysql
3. Küme Durumunu Kontrol Etme:
Yine MGM düğümüne bağlanarak tüm düğümlerin bağlı ve aktif olduğunu doğrulayın:
sudo ndb_mgm
ndb_mgm> show
Çıktıdaki tüm düğümlerin connected ve started durumda olduğunu görmelisiniz. Özellikle SQL düğümünün (id=4) bağlı olduğunu doğrulayın.
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.11 (Version: 7.6.X, Nodegroup: 0, Master)
id=3 @192.168.1.12 (Version: 7.6.X, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.10 (Version: 7.6.X)
[mysqld(API)] 1 node(s)
id=4 @192.168.1.13 (Version: 7.6.X, connected)
Eğer SQL düğümü bağlı görünmüyorsa, /etc/mysql/my.cnf dosyasındaki ndb-connectstring ayarını ve güvenlik duvarı kurallarını kontrol edin. MySQL hata loglarına (/var/log/mysql/error.log) bakmak da yardımcı olabilir.
Veritabanı Oluşturma ve Test Etme
Artık kümeniz çalışır durumda olduğuna göre, bir veritabanı ve tablo oluşturarak işlevselliğini test edebilirsiniz.
1. SQL Düğümüne Bağlanma:
SQL düğümünde (sql-node) MySQL istemcisine root kullanıcısıyla bağlanın (kurulum sırasında belirlediğiniz şifreyi kullanın):
mysql -u root -p
2. Veritabanı ve Tablo Oluşturma:
NDB Cluster depolama motorunu kullanarak bir veritabanı ve tablo oluşturun. ENGINE=NDBCLUSTER ifadesi çok önemlidir.
CREATE DATABASE myclusterdb;
USE myclusterdb;
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100) UNIQUE
) ENGINE=NDBCLUSTER;
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
SELECT * FROM users;
Bu sorgular başarıyla çalışmalı ve veriyi görmelisiniz.
3. Küme İşlevselliğini Doğrulama:
* Depolama Motoru Kontrolü:
SHOW ENGINES;
Çıktıda NDBCLUSTER motorunun YES (desteklendiğini) ve DEFAULT (varsayılan) olarak görünmesi gerekir.
* Tablo Durumu Kontrolü:
SHOW CREATE TABLE users;
Çıktıda ENGINE=NDBCLUSTER ifadesini görmelisiniz.
* Yüksek Erişilebilirlik Testi (İsteğe Bağlı ama Önerilir):
Kümenin yüksek erişilebilirliğini test etmek için, veri düğümlerinden birini (örneğin data-node1) durdurun ve SQL düğümünden veri okumaya devam edin.
data-node1 üzerinde:
sudo systemctl stop mysql-cluster-data-node
SQL düğümünde:
mysql -u root -p
USE myclusterdb;
SELECT * FROM users; # Veri hala erişilebilir olmalı
MGM düğümünde ndb_mgm ile durumu kontrol edin. data-node1‘in disconnected veya stopped olarak görünmesi gerekir, ancak data-node2 aktif olduğu için küme çalışmaya devam edecektir.
Tekrar data-node1‘i başlatın:
sudo systemctl start mysql-cluster-data-node
Veri tutarlılığını sağlamak için data-node1 tekrar senkronize olacaktır.
Önemli Konular ve En İyi Uygulamalar
MySQL Cluster kurulumu tamamlandıktan sonra, üretim ortamları için bazı önemli konuları ve en iyi uygulamaları göz önünde bulundurmak gerekir.
1. Yüksek Erişilebilirlik ve Yedeklilik
* Çift Yönetim Düğümü: Tek bir yönetim düğümü tek bir hata noktası oluşturabilir. Yüksek erişilebilirlik için iki yönetim düğümü kullanmak ve bunları bir yük dengeleyici (load balancer) veya DNS round-robin ile yapılandırmak önerilir. config.ini dosyasında ikinci bir [ndb_mgmd] bölümü ekleyebilirsiniz.
* En Az İki Veri Düğümü: NoOfReplicas=2 ayarı için en az iki veri düğümü zorunludur. Üretim ortamlarında 2’den fazla veri düğümü kullanmak, hem performansı artırır hem de daha fazla hata toleransı sağlar.
* Birden Fazla SQL Düğümü: Uygulama yükünü dağıtmak ve SQL düğümü arızalarına karşı koruma sağlamak için birden fazla SQL düğümü kullanın. Bunları bir yük dengeleyici (örneğin ProxySQL veya HAProxy) arkasına yerleştirin.
2. Performans Optimizasyonu
* DataMemory ve IndexMemory: Bu parametreler, veri düğümlerinde veriye ve indekslere ayrılacak RAM miktarını belirler. Uygulamanızın veri boyutuna ve işlem yüküne göre bu değerleri dikkatlice ayarlayın. Yetersiz bellek performansı düşürebilir veya kümenin çökmesine neden olabilir.
* MaxNoOfConcurrentOperations: Eşzamanlı işlem sayısını kontrol eder. Yoğun iş yükleri için bu değeri artırmak gerekebilir.
* Disk Hızı: Veri düğümlerinde hızlı diskler (SSD) kullanmak, checkpoint’ler ve disk tabanlı işlemler için performansı önemli ölçüde artırır.
* Ağ Gecikmesi: MySQL Cluster, düğümler arası düşük gecikmeli iletişime bağımlıdır. Yüksek gecikmeli ağlar performansı olumsuz etkiler.
3. Yedekleme ve Geri Yükleme
* ndb_backup: MySQL Cluster, verilerin anlık görüntüsünü almak için ndb_backup aracını sağlar. Bu araç, küme çalışırken tutarlı yedeklemeler yapabilir.
* ndb_restore: Yedeklenen verileri geri yüklemek için kullanılır.
* MySQL Dump: SQL düğümünden standart mysqldump ile de yedekleme alabilirsiniz, ancak bu sadece NDB tablolarını değil, tüm MySQL tablolarını yedekler ve küme yapısının avantajlarından yararlanmaz.
4. Güncelleme ve Bakım
* Sırayla Güncelleme: Küme düğümlerini güncellerken (örneğin işletim sistemi veya MySQL Cluster sürümü), yüksek erişilebilirliği korumak için düğümleri sırayla, birer birer çevrimdışı alıp güncelleyerek yapın.
* Yapılandırma Değişiklikleri: config.ini dosyasında yapılan değişikliklerin çoğu için yönetim düğümünün ve ilgili diğer düğümlerin yeniden başlatılması gerekir. Bazı değişiklikler için --initial parametresi olmadan yeniden başlatma yeterli olurken, bazıları için --initial ile tam bir sıfırlama gerekebilir.
5. Güvenlik
* Ağ İzolasyonu: MySQL Cluster düğümlerini mümkün olduğunca izole bir ağda çalıştırın. Sadece gerekli portlara ve IP adreslerine izin verin.
* SSH Anahtarları: Düğümler arası SSH erişimi için parola yerine SSH anahtarları kullanın.
* MySQL Kullanıcı İzinleri: SQL düğümünde minimum yetkiye sahip kullanıcılar oluşturun ve root kullanıcısını sadece yönetim görevleri için kullanın.
6. İzleme
* ndb_mgm: Kümenin durumunu anlık olarak izlemek için en temel araçtır. show, status, all status gibi komutlarla düğümlerin ve işlemlerin durumunu kontrol edebilirsiniz.
* Log Dosyaları: MGM, veri ve SQL düğümlerinin log dosyalarını düzenli olarak kontrol edin (/var/log/mysql/error.log, /var/log/syslog, NDB’ye özgü loglar).
* Harici İzleme Araçları: Zabbix, Prometheus veya Grafana gibi araçlarla MySQL Cluster metriklerini toplayarak daha kapsamlı bir izleme ve uyarı sistemi kurabilirsiniz.
Sorun Giderme
Kurulum veya çalışma sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözüm önerileri:
* Düğümler Bağlanmıyor (Not Connected):
* ndb-connectstring: my.cnf veya config.ini dosyasındaki ndb-connectstring parametresinin doğru yönetim düğümü IP adresini işaret ettiğinden emin olun.
* Güvenlik Duvarı: Tüm düğümler arasında gerekli portların (özellikle 1186) açık olduğundan emin olun.
* /etc/hosts: Düğümler arası isim çözümlemesinin doğru çalıştığını doğrulayın.
* Loglar: İlgili düğümün log dosyalarını kontrol edin (/var/log/mysql/error.log, /var/log/syslog).
* MGM Düğümü Başlamıyor:
* config.ini dosyasındaki sözdizimi hatalarını kontrol edin.
* /var/lib/mysql-cluster dizininin var olduğundan ve doğru izinlere sahip olduğundan emin olun.
* ndb_mgmd komutunu --initial parametresiyle sadece ilk kurulumda veya yapılandırma sıfırlanırken kullanın.
* Veri Düğümleri Başlamıyor (Node ID Mismatch, etc.):
* config.ini ve my.cnf dosyalarındaki düğüm ID’lerinin benzersiz ve doğru olduğundan emin olun.
* DataMemory veya IndexMemory için yetersiz RAM olabilir.
* datadir dizininin var olduğundan ve MySQL kullanıcısının yazma izinlerine sahip olduğundan emin olun.
* Veri düğümünün loglarına bakın.
* SQL Düğümü NDB Tablolarını Oluşturamıyor:
* SQL düğümünün /etc/mysql/my.cnf dosyasında ndbcluster ve ndb-connectstring ayarlarının doğru olduğundan emin olun.
* MySQL servisini yeniden başlattığınızdan emin olun.
* SHOW ENGINES; komutuyla NDBCLUSTER motorunun etkin olduğunu doğrulayın.
Sonuç
Bu kapsamlı rehberde, Ubuntu 16.04 üzerinde çok düğümlü bir MySQL Cluster’ı sıfırdan kurmayı, yapılandırmayı ve test etmeyi öğrendiniz. MySQL Cluster, yüksek erişilebilirlik, ölçeklenebilirlik ve performans gerektiren kritik uygulamalar için güçlü bir çözümdür. Yönetim, veri ve SQL düğümlerinin doğru yapılandırılması, kümenizin sorunsuz çalışması için hayati öneme sahiptir.
Kurulum sürecinde dikkat edilmesi gereken en önemli noktalar; doğru paketlerin seçilmesi, tüm düğümlerde /etc/hosts dosyasının doğru yapılandırılması, güvenlik duvarı ayarları ve config.ini ile my.cnf dosyalarındaki parametrelerin dikkatli bir şekilde ayarlanmasıdır.
Artık temel bir MySQL Cluster kurulumuna sahipsiniz. Üretim ortamlarında kullanmadan önce, kümenizi uygulamanızın gerçek yükü altında test etmeniz, performans ayarlarını optimize etmeniz ve düzenli yedekleme stratejileri geliştirmeniz önemlidir. Bu adımlar, veritabanı altyapınızın dayanıklılığını ve verimliliğini sağlamlaştıracaktır. MySQL Cluster’ın sağladığı avantajlarla, yüksek performanslı ve kesintisiz çalışan uygulamalar geliştirebilirsiniz.
