EğitimMySQL

MySQL Cluster kurulumu

Bu makalemizde sizler ile MySQL Cluster kurulumunu göreceğiz.

MySQL Cluster nedir?

MySQL Cluster, veritabanında oluşan yükü birden fazla sunucuya dağıtarak çok daha yüksek performanslar elde etmenizi sağlayan sistemin adıdır. Bu sistem sunucunuzda yeni bir “ndbcluster” adlı InnoDB benzeri veritabanı tipi oluşturmaktadır. Bu tip ile oluşturulan tablolar cluster üzerinde çalışıp, çok daha yüksek performanslar sağlamaktadır. Performansın dışında güvenliği ile öne çıkmaktadır, sunuculardan birisinin hata vermesi durumunda diğer sunucular yerini alabiliyor, bu da %99.999 ulaşılabilirlik sağlamakta.
Normal bir sunucudan farkı bulunmamakta. Sadece mevcut sunucuya ndbcluster adlı bir veritabanı motoru ekliyor. Bu motorda oluşturulan tablolar birden fazla sunucuda paylaştırılıyor, güvene alınıyor, hızlandırılıyor.

Kurulum

Varsayalım ki 3 adet sunucumuz var ve yükü bunlar arasında dağıtmak istiyoruz. Ben VirtualBox ile yerelde çalışacağımdan ötürü yerel ip adreslerimi kullanacağım.
Kullanacağım ip adresleri, ve bu adreslerin işlevleri şunlardır:

  • 192.168.0.152 – Ana Sunucu ve ilk veri deposu
  • 192.168.0.121 – İkinci veri deposu
  • 192.168.0.184 – Üçüncü veri deposu

Ana sunucu, bizlerin bu cluster’ı yönetirken kullanacağımız sunucunun adıdır. Veri depoları ise, verinin depolanıp işleneceği diğer sunuculardır.

İlk Adım

İlk olarak, ana sunucu üzerinde güncel mysql paketlerinin yüklemesini yapıyoruz.

sudo wget "https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb"
sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
sudo apt update &&  sudo apt install mysql-cluster-community-server mysql-cluster-community-management-server

Açılan menüde aşağıda bulunan yere giriyoruz:

Ardından menüden güncel sürümü seçiyoruz:


Yüklemenin ilerleyen aşamasında sizden şifre belirlemenizi isteyecek.
Belirlediğiniz root şifresini not etmeyi unutmayın.
Yükleme bittikten sonra yapılandırma aşamasına geçiyoruz.

sudo mkdir /var/lib/mysql-cluster
sudo nano /var/lib/mysql-cluster/config.ini

Açılan dosya içerisine aşağıdaki kodu, kendi ip adresleriniz ile düzenleyerek, girip CTRL+X yapıp kaydedip çıkıyoruz.

[ndbd default]
# Bütün veri depolarındaki ndbd sunucularını etkileyen ayarlar:
NoOfReplicas=2  # Replika sayısı

[ndb_mgmd]
# Management process options:
hostname=192.168.0.158 # Yönetimin kurulu olduğu makine adresi
datadir=/var/lib/mysql-cluster  # Kayıt dosyaları için klasör

[ndbd]
hostname=192.168.0.121 # İLK VERİ DEPOSUNUN İP ADRESİ
NodeId=2            # VERİ DEPOSUNUN IDSİ
datadir=/usr/local/mysql/data   # UZAK SUNUCUDAKİ VERİ KLASÖRÜ

[ndbd]
hostname=192.168.0.184 # İLK VERİ DEPOSUNUN İP ADRESİ
NodeId=3            # VERİ DEPOSUNUN IDSİ
datadir=/usr/local/mysql/data   # UZAK SUNUCUDAKİ VERİ KLASÖRÜ

[mysqld]
# SQL node options:
hostname=192.168.0.158 # ANA SUNUCU IP ADRESİ, BENİM İÇİN BU 192.168.0.158

Ardından:

sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Komutunu gönderiyoruz. Eğer çıktı şuna benzer ise sorun yok demektir:
MySQL Cluster Management Server mysql-8.0.16 ndb-8.0.16-dmr

Şimdi otomatik başlangıç için servis dosyalarımızı oluşturalım.

sudo nano /etc/systemd/system/ndb_mgmd.service
[Unit]
Description=MySQL NDB Cluster Yonetim Sunucusu
After=network.target auditd.service

[Service]
Type=forking
ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo pkill -f ndb_mgmd
sudo systemctl daemon-reload
sudo systemctl enable ndb_mgmd
sudo systemctl start ndb_mgmd
sudo systemctl status ndb_mgmd

Eğer çıktıda şu şekilde görüyorsanız her şey yolunda demektir.

Veri deposu sunucularının ayarlanması

İlk olarak aşağıdaki komut ile veri deposu sunucusunun kurulumunu yapıyoruz. Öncelikle repository’i ekleyerek tabii ki.

sudo wget "https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb"
sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
sudo apt update &&  sudo apt install mysql-cluster-community-data-node

Ayar dosyasını düzenleyelim:

sudo nano /etc/my.cnf

İçerisine de aşağıdaki yapılandırmayı düzenleyip CTRL+X ile kaydedip çıkalım:

[mysql_cluster]
ndb-connectstring=192.168.0.158  # cluster yöneticisinin adresi
sudo mkdir -p /usr/local/mysql/data
sudo ndbd
sudo pkill -f ndbd

Eğer çıktı şunun gibi ise sorun yok demektir.

2018-07-18 19:48:21 [ndbd] INFO     -- Angel connected to '192.168.0.158:1186'
2018-07-18 19:48:21 [ndbd] INFO     -- Angel allocated nodeid: 2

Servisimizi oluşturalım:

sudo nano /etc/systemd/system/ndbd.service
[Unit]
Description=MySQL NDB Veri Deposu Sunucusu
After=network.target auditd.service

[Service]
Type=forking
ExecStart=/usr/sbin/ndbd
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable ndbd
sudo systemctl start ndbd
sudo systemctl status ndbd

Eğer çıktıda servisin çalıştığı gösteriliyor ise, sunucunuz hazır demektir. Bu adımın aynısını diğer veri sunuccunuzda da yapmanız yeterli olacaktır.

Ancak yönetim için yapmanız gereken son bir adım daha vardır.

Yönetim sunucusunun yapılandırılması

[mysqld]
# Options for mysqld process:
ndbcluster                      # NDB depolama motorunu aktifleştir

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.0.158  # yönetim sunucusunun adresi

Yukarıdaki yapılandırmayı /etc/my.cnf dosyasının en altına ekliyoruz. Ardından ise:

sudo systemctl restart mysql
sudo systemctl enable mysql

komutları ile uygulayıp, mysql’in başlangıçta çalıştığından emin oluyoruz.

Şimdi bütün sunucuların çalıştığından tamamen emin olmak için konsola girelim. MySQL’in clienti olduğu gibi ndb’nin de bir clienti mevcut. Ancak öncelikle normal mysql konsoluna girelim.

mysql -u root -p 

Girdikten sonra sunucu bağ durumlarını kontrol etmek için:

SHOW ENGINE NDB STATUS \G

ready_data_nodes adlı değerin verisi, bizim hazırda bekleyen sunucularımızın verisidir. Onayladıktan, “create database test;” komutu ile test adında bir veritabanı oluşturabilirsiniz. NDB motorunda çalışacak olan bir tablo oluşturmak için aşağıdaki komutu kullanabilirsiniz.

CREATE TABLE rand_numbers (
    number INT NOT NULL
) ENGINE = ndbcluster;
DELIMITER $$
CREATE PROCEDURE InsertRand(IN NumRows INT, IN MinVal INT, IN MaxVal INT)
    BEGIN
        DECLARE i INT;
        SET i = 1;
        START TRANSACTION;
        WHILE i <= NumRows DO
            INSERT INTO rand_numbers VALUES (MinVal + CEIL(RAND() * (MaxVal - MinVal)));
            SET i = i + 1;
        END WHILE;
        COMMIT;
    END$$
DELIMITER ;
CALL InsertRand(10000, 2222, 5555);

Performansı test etmek için bu komut ile InsertRand adlı bir prosedür oluşturup, oluşturulan tabloya 10000 adet yeni veri eklemesi yaptırabiliyorsunuz. Bende bu ndb olmayan bir motorda çalıştığı ile karşılaştırıldığında, 12 saniyeden 6 saniyeye düştü. Çok ciddi bir yükseliş söz konusu.

NDB konsoluna girmek için aşağıdaki komutu kullanabilirsiniz.

ndb_mgm

Düğümleri listelemek için “SHOW” komutunu kullanabilirsiniz. Çıkan veri deposu sunucularının durumlarını idlerini kullanarak kontrol edebilirsiniz. Bunun için de “{id} STATUS” komutunu kullanabilirsiniz. Örneğin “2 STATUS”.

Sonuç

MySQL Cluster kurulumumuzu yaptık, test ettik. Eklenen veri deposu düğümü sayısınca performansta katlanarak artık gerçekleşecektir. Bu sistemi yüksek trafikli sitelerde, yoğun veritabanı işlemi gerektiren uygulamalarda kullanabilirsiniz.

Etiketler

Ahmet Emin Koçal

Uzun yıllar bilgisayar teknolojileri ile ilgilenmiş, PHP alanında iyi miktarda bilgiye sahip bir destekçi arkadaşınız/hocanız.

Alakadar Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca bak

Close
Close

Adblock tespit edildi

Lütfen Adblock'unuzu devre dışı bırakıp bizlere destek olun ki sizlere yardımcı olmaya devam edebilelim