High Availability Database using NDB MYSQL Cluster
High Availability Database using NDB MYSQL Cluster
High Availability Database using NDB MYSQL Cluster

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
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
- Download package MYSQL Clulster terlebih dahulu

- Download MYSQL Cluster Management
- 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
- Masuk kedalam folder yang sudah dibuat dan cek apakah package yang didownload sudah ada atau belum

cd /mysql-manager
ll
- Install MYSQL Cluster Manager

dpkg -i mysql-cluster-community-management-server_8.0.31–1ubuntu22.04_amd64.deb
- Buat folder mysql-cluster dalam folder /var/lib/

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

nano /var/lib/mysql-cluster/config.ini
NDB MYSQL Cluster secara default membaca config bernama config.ini
- 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
- Simpan file untuk menjalankan konfigurasi yang sudah dibuat

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
- Sebelum membuat service untuk ndb_mgmd, kill dulu proses ndb_mgmd

pkill -f ndb_mgmd
- Buat file service untuk MYSQL Cluster Manager

nano /etc/systemd/system/ndb_mgmd.service
- 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
- Start service yang sudah dibuat

systemctl start ndb_mgmd
- Enable service yang sudah dibuat

systemctl enable ndb_mgmd
- Cek status service

systemctl status ndb_mgmd
- Setelah berhasil, buat folder untuk package MYSQL

mkdir manager
- Ekstrak file package MYSQL kedalam folder yang sudah dibuat

tar -xvf mysql-cluster_8.0.31–1ubuntu22.04_amd64.deb-bundle.tar -C manager
- Masuk kedalam folder dan install beberapa package yang diperlukan

cd manager && apt install libaio1 libmecab2
- Install semua file deb

dpkg -i .deb*
- Install juga package yang tidak bisa diinstall menggunakan dpkg

apt-get install -f
Node
- Buat folder untuk menyimpan MYSQL Data Node dan masuk dalam folder tersebut

mkdir /mysql && cd /mysql
- Download package MYSQL Data Node
- Install package MYSQL Data Node yang sudah didownload

dpkg -i mysql-cluster-community-data-node_8.0.31–1ubuntu22.04_amd64.deb
- Buat file my.cnf dalam folder /etc

nano /etc/my.cnf
- 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
- Start MYSQL Data Node untuk menguhubungkan ke MYSQL Manager

ndbd
- Sebelum membuat service untuk ndbd, kill dulu proses ndbd

pkill -f ndbd
- Buat file service untuk ndbd

nano /etc/systemd/system/ndbd.service
- 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
- Reload daemon untuk apply service yang sudah dibuat

systemctl daemon-reload
- Start service ndbd yang sudah dibuat

systemctl start ndbd
- Enable service ndbd

systemctl enable ndbd
- Cek status ndbd

systemctl status ndbd
SQL Node
- 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
- Setelah terdownload, ekstrak file tar kedalam folder yang di

tar -xvf mysql-cluster_8.2.0–1ubuntu22.04_amd64.deb-bundle.tar -C bundle
- Masuk kedalam folder dan install semua package nya

dpkg -i .deb*

apt install -f
- Buka file /etc/mysql/my.cnf dan tambahkan perintah berikut

nano /etc/mysql/my.cnf
[mysqld]
ndbcluster
default_storage_engine=ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.56.6,192.168.56.21
- Restart mysql pada SQL Node

systemctl restart mysql
HAProxy
- Install HAProxy terlebih dahulu

apt install haproxy
- Edit file /etc/haproxy/haproxy.cfg

nano /etc/haproxy/haproxy.cfg
- 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
- Restart HAProxy

systemctl restart haproxy
Testing Client
Client disini menggunakan mesin lain yang tidak terdaftar dalam list mesin diatas!
- 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;
- MYSQL client mencoba untuk mengakses SQL Node dengan IP Haproxy

mysql -u root -p -h IPHAProxy
- Client mencoba untuk membuat database baru

- 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?
- Matikan salah satu MYSQL Manager

init 0
- Matikan salah satu SQL Node

init 0
- Pada SQL Node yang lain buat database baru

- Hidupkan MYSQL Manager yang tadi dimatikan dan cek koneksinya

ndb_mgm -e show
- 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