← Back to list

High Availability Database using NDB MYSQL Cluster

High Availability Database using NDB MYSQL Cluster

Melodys · 2024-01-15 08:24 · 1 claps · 7.8 min read
#ndb #mysql-ndb-cluster #high-availability #database #mysql
Open on Medium ↗

High Availability Database using NDB MYSQL Cluster

https://dev.mysql.com/blog-archive/mysqlhighavailability/wp-content/uploads/2015/12/MySQL_Cluster.png

https://dev.mysql.com/blog-archive/mysqlhighavailability/wp-content/uploads/2015/12/MySQL_Cluster.png

Pengertian

MySQL NDB Cluster adalah database terdistribusi yang menggabungkan skalabilitas linier dan ketersediaan tinggi. Ini memberikan akses real-time dalam memori dengan konsistensi transaksional di seluruh kumpulan data yang dipartisi dan didistribusikan.

MySQL NDB Cluster menyimpan banyak salinan kumpulan datanya untuk ketersediaan maksimum. MySQL NDB Cluster telah terbukti memberikan ketersediaan 99,999% yang memastikan ketahanan terhadap kegagalan dan kemampuan untuk melakukan pemeliharaan terjadwal tanpa downtime.

Cara Kerja

MYSQL Manager = berfungsi untuk memanagement dan memberikan akses terhadap SQL Node

Data Node = berfungsi untuk menyimpan setiap data yang dibuat SQL Node

SQL Node = berfungsi untuk memberikan data kepada Data Node untuk disimpan, dan meminta Request handshake ke SQL Node yang lain melalui akses MYSQL Manager

Topologi

Topologi

Topologi

Kita menggunakan 12 mesin, 2 mesin untuk Cluster Manager, 6 mesin untuk Node, 3 mesin untuk User, dan 1 mesin untuk HAProxy
192.168.56.6  = sebagai MYSQL Cluster Manager 1
192.168.56.21 = sebagai MYSQL Cluster Manager 2
192.168.56.7  = sebagai Data Node 1
192.168.56.8  = sebagai Data Node 2
192.168.56.22 = sebagai Data Node 3
192.168.56.23 = sebagai Data Node 4
192.168.56.24 = sebagai Data Node 5
192.168.56.25 = sebagai Data Node 6
192.168.56.9  = sebagai SQL Node 1
192.168.56.10 = sebagai SQL Node 2
192.168.56.26 = sebagai SQL Node 3
192.168.56.27 = sebagai HAProxy

MYSQL Cluster Manager

  1. Download package MYSQL Clulster terlebih dahulu

wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.31-1ubuntu22.04_amd64.deb-bundle.tar

wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.31-1ubuntu22.04_amd64.deb-bundle.tar

  1. Download MYSQL Cluster Management

wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.31-1ubuntu22.04_amd64.deb

  1. Buat folder untuk menyimpan MYSQL Cluster dan MYSQL Cluster Manager dan pindahkan MYSQL Cluster dan MYSQL Manager kedalam folder yang sudah dibuat

mkdir /mysql-manager
mv mysql-cluster_8.0.31-1ubuntu22.04_amd64.deb-bundle.tar /mysql-cluster
mv mysql-cluster-community-management-server_8.0.31-1ubuntu22.04_amd64.deb /mysql-cluster
  1. Masuk kedalam folder yang sudah dibuat dan cek apakah package yang didownload sudah ada atau belum

cd /mysql-manager
ll
  1. Install MYSQL Cluster Manager

dpkg -i mysql-cluster-community-management-server_8.0.31–1ubuntu22.04_amd64.deb

dpkg -i mysql-cluster-community-management-server_8.0.31–1ubuntu22.04_amd64.deb

  1. Buat folder mysql-cluster dalam folder /var/lib/

mkdir /var/lib/mysql-cluster

mkdir /var/lib/mysql-cluster

  1. Buat file config.ini dalam folder /var/lib/mysql-cluster

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

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

NDB MYSQL Cluster secara default membaca config bernama config.ini

  1. Isi file config.ini seperti berikut

[ndbd default]
NoOfReplicas=3                  # Number of replicas

#Manager Node
[ndb_mgmd]  
NodeId=101                      # Node ID manager 1
hostname=192.168.56.6           # Hostname of the manager 1
datadir=/var/lib/mysql-cluster  # Directory for the log files

#backup ndb_mgmd
[ndb_mgmd]
NodeId=102                      # Node ID manager 2
hostname=192.168.56.21          # Hostname of the manager 2
datadir=/var/lib/mysql-cluster  # Directory for the log file

#Data Node
[ndbd]
hostname=192.168.56.7           # Hostname/IP of the data node 1
NodeId=2                        # Node ID for data node 1

[ndbd]
hostname=192.168.56.22          # Hostname/IP of the data node 3
NodeId=6                        # Node ID for data node 3

[ndbd]
hostname=192.168.56.23          # Hostname/IP of the data node 4
NodeId=7                        # Node ID for data node 4

[ndbd]
hostname=192.168.56.8           # Hostname/IP of the data node 2
NodeId=3                        # Node ID for data node 2

[ndbd]
hostname=192.168.56.24          # Hostname/IP of the data node 5
NodeId=8                        # Node ID for data node 5

[ndbd]
hostname=192.168.56.25          # Hostname/IP of the data node 6
NodeId=9                        # Node ID for data node 6

#SQL Node
[mysqld]
NodeId=4                        # Node ID for sql node 1
hostname=192.168.56.9           # Hostname/IP of the sql node 1

[mysqld]
NodeId=5                        # Node ID for sql node 2
hostname=192.168.56.10          # Hostname/IP of this sql node 2

[mysqld]
NodeId=10                       # Node ID for sql node 3
hostname=192.168.56.26          # Hostname/IP of this sql  node 3
  1. Simpan file untuk menjalankan konfigurasi yang sudah dibuat

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

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

Anda juga bisa menambahkan beberapa perintah seperti, — reload ataupun — initial pada bagian akhir perintah.

— reload berfungsi untuk membaca ulang file konfigurasi dan tidak menghapus cache

— initial berfungsi untuk menghapus cache dan membaca ulang file konfigurasi

  1. Sebelum membuat service untuk ndb_mgmd, kill dulu proses ndb_mgmd

pkill -f ndb_mgmd

pkill -f ndb_mgmd

  1. Buat file service untuk MYSQL Cluster Manager

nano /etc/systemd/system/ndb_mgmd.service

nano /etc/systemd/system/ndb_mgmd.service

  1. Isi file service seperti berikut

[Unit]
Description=MySQL NDB Cluster Management Server
After=network.target auditd.service

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

[Install]
WantedBy=multi-user.target
  1. Start service yang sudah dibuat

systemctl start ndb_mgmd

systemctl start ndb_mgmd

  1. Enable service yang sudah dibuat

systemctl enable ndb_mgmd

systemctl enable ndb_mgmd

  1. Cek status service

systemctl status ndb_mgmd

systemctl status ndb_mgmd

  1. Setelah berhasil, buat folder untuk package MYSQL

mkdir manager

mkdir manager

  1. Ekstrak file package MYSQL kedalam folder yang sudah dibuat

tar -xvf mysql-cluster_8.0.31–1ubuntu22.04_amd64.deb-bundle.tar -C manager

tar -xvf mysql-cluster_8.0.31–1ubuntu22.04_amd64.deb-bundle.tar -C manager

  1. Masuk kedalam folder dan install beberapa package yang diperlukan

cd manager && apt install libaio1 libmecab2

cd manager && apt install libaio1 libmecab2

  1. Install semua file deb

dpkg -i *.deb

dpkg -i .deb*

  1. Install juga package yang tidak bisa diinstall menggunakan dpkg

apt-get install -f

apt-get install -f

Node

  1. Buat folder untuk menyimpan MYSQL Data Node dan masuk dalam folder tersebut

mkdir /mysql && cd /mysql

mkdir /mysql && cd /mysql

  1. Download package MYSQL Data Node

wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.31-1ubuntu22.04_amd64.deb

  1. Install package MYSQL Data Node yang sudah didownload

dpkg -i mysql-cluster-community-data-node_8.0.31–1ubuntu22.04_amd64.deb

dpkg -i mysql-cluster-community-data-node_8.0.31–1ubuntu22.04_amd64.deb

  1. Buat file my.cnf dalam folder /etc

nano /etc/my.cnf

nano /etc/my.cnf

  1. Isi file my.cnf sebagai berikut

[mysqld]
ndb-connectstring=192.168.56.6,192.168.56.21

[mysql_cluster]
ndb-connectstring=192.168.56.6,192.168.56.21  # location of cluster manager
  1. Start MYSQL Data Node untuk menguhubungkan ke MYSQL Manager

ndbd

ndbd

  1. Sebelum membuat service untuk ndbd, kill dulu proses ndbd

pkill -f ndbd

pkill -f ndbd

  1. Buat file service untuk ndbd

nano /etc/systemd/system/ndbd.service

nano /etc/systemd/system/ndbd.service

  1. Isi file service ndbd sebagai berikut

[Unit]
Description=MySQL NDB Data Node Daemon
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
  1. Reload daemon untuk apply service yang sudah dibuat

systemctl daemon-reload

systemctl daemon-reload

  1. Start service ndbd yang sudah dibuat

systemctl start ndbd

systemctl start ndbd

  1. Enable service ndbd

systemctl enable ndbd

systemctl enable ndbd

  1. Cek status ndbd

systemctl status ndbd

systemctl status ndbd

SQL Node

  1. Install package MYSQL Cluster pada SQL Node

wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.2/mysql-cluster_8.2.0-1ubuntu22.04_amd64.deb-bundle.tar atau kalian dapat menginstall versi lain disini

  1. Setelah terdownload, ekstrak file tar kedalam folder yang di

tar -xvf mysql-cluster_8.2.0–1ubuntu22.04_amd64.deb-bundle.tar -C bundle

tar -xvf mysql-cluster_8.2.0–1ubuntu22.04_amd64.deb-bundle.tar -C bundle

  1. Masuk kedalam folder dan install semua package nya

dpkg -i *.deb

dpkg -i .deb*

apt install -f

apt install -f

  1. Buka file /etc/mysql/my.cnf dan tambahkan perintah berikut

nano /etc/mysql/my.cnf

nano /etc/mysql/my.cnf

[mysqld]
ndbcluster
default_storage_engine=ndbcluster

[mysql_cluster]
ndb-connectstring=192.168.56.6,192.168.56.21
  1. Restart mysql pada SQL Node

systemctl restart mysql

systemctl restart mysql

HAProxy

  1. Install HAProxy terlebih dahulu

apt install haproxy

apt install haproxy

  1. Edit file /etc/haproxy/haproxy.cfg

nano /etc/haproxy/haproxy.cfg

nano /etc/haproxy/haproxy.cfg

  1. Tambahkan perintah berikut

listen mysql-cluster
        bind *:3306
        mode tcp
        balance roundrobin
        server mysql-1 192.168.56.9:3306 check
        server mysql-2 192.168.56.10:3306 check
        server mysql-3 192.168.56.26:3306 check
  1. Restart HAProxy

systemctl restart haproxy

systemctl restart haproxy

Testing Client

Client disini menggunakan mesin lain yang tidak terdaftar dalam list mesin diatas!

  1. Buat user pada SQL Node untuk client akses

create username 'root'@'%' identified by 'password';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
  1. MYSQL client mencoba untuk mengakses SQL Node dengan IP Haproxy

mysql -u root -p -h IPHAProxy

mysql -u root -p -h IPHAProxy

  1. Client mencoba untuk membuat database baru

  1. Cek pada SQL Node apakah database yang dibuat client ada atau tidak

Testing High Availability

Untuk testing High Availability NDB MYSQL Cluster kita akan mematikan satu management dan satu SQL Node dan SQL Node yang lain akan membuat database, apakah SQL Node yang mati tadi saat dinyalakan akan tetap menyimpan data dari SQL Node yang lain?

  1. Matikan salah satu MYSQL Manager

init 0

init 0

  1. Matikan salah satu SQL Node

init 0

init 0

  1. Pada SQL Node yang lain buat database baru

  1. Hidupkan MYSQL Manager yang tadi dimatikan dan cek koneksinya

ndb_mgm -e show

ndb_mgm -e show

  1. Hidupkan juga SQL Node yang tadi dimatikan dan cek databasenya

Kesimpulan

Dari praktek diatas dapat disimpulkan Multi Node Mysql Cluster menyediakan High Availability untuk MYSQL sehingga dapat menyimpan banyak salinan kumpulan datanya untuk ketersediaan maksimum dan memberikan akses real-time dalam memori dengan konsistensi transaksional di seluruh kumpulan data yang dipartisi dan didistribusikan.

Dari test High Availability dapat ditunjukan bahwa walau management mati namun SQL Node sudah terdapat hubungan handshake maka jika management mati itu tidak menjadi masalah sampai SQL Node meminta request terhadap MYSQL Manager yang mati.

Referensi dapat anda lihat di MYSQL NDB Cluster.


메타데이터
post_id
d91c34e38346
slug
high-availability-database-using-ndb-mysql-cluster-d91c34e38346
url
https://medium.com/@melowsdiy/high-availability-database-using-ndb-mysql-cluster-d91c34e38346
canonical_url
https://medium.com/@melowsdiy/high-availability-database-using-ndb-mysql-cluster-d91c34e38346
author_url
https://medium.com/@melowsdiy
status
ok
fetched_at
2026-06-12 10:20:10