MySQL Cluster merupakan database terdistribusi untuk kondisi database dengan trafic yang tinggi. MySQL Cluster bekerja dengan melakukan sinkronisasi data antar server bukan replikasi data (replikasi berbeda dengan cluster). Cluster MySQL terdiri dari satu server manajemen (ndb_mgmd) yang menyimpan konfigurasi cluster dan mengontrol satu atau lebih node db server (ndbd).
MySQL Cluster dapat bekerja dengan banyak node sesuai dengan beban database, namun untuk ujicoba pada kesempatan ini hanya digunakan 2 server, 1 server sebagai manajer dan 1 server lain sebagai node server.
Tutorial Video:
Persiapan
Untuk mengikuti tutorial ini, pastikan memiliki minimal 2 server (boleh lebih) baik fisik, vps atau dalam bentuk virtual machine. Pastikan sistem operasi yang digunakan merupakan sistem operasi Ubuntuk versi 18.04 keatas, versi 20.04 yang direkomendasikan.
Catat IP dari masing-masing server yang digunakan, pada kasus ini, IP yang digunakan:
- 192.168.1.12 sebagai Cluster Manager / server utama
- 192.168.1.13 sebagai Node Server
* IP anda bisa saja berbeda, silahkan disesuaikan
Langkah 1 – Install dan Konfigurasi Cluster Manager / Server Utama
Langkah awal yang perlu kita lakukan adalah menginstall MySQL Cluster Manager (ndb_mgmd), paket ini bisa di download melalui laman download resmi MySQL: https://downloads.mysql.com/archives/cluster/
Pada laman awal, anda akan diminta memilih versi MySQL Cluster Manager, pada saat tutorial ini dibuat versinya adalah 8.0.26, biarkan deafault saja. Kemudian pilih OS server yang digunakan, pilih Ubuntu Linux seperti gambar dibawah:
Kemudian croll, cari paket DEB Pacakage NDB Management Server sesuai dengan versi Ubuntu yang digunakan:
Setelah ketemu, catat lokasi downloadnya.
Sekarang, silahkan login pada server utama (tutorial ini: 192.168.1.12) dan download file .deb tersebut:
$ cd ~
$ wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb
Install ndb_mgmd menggunakan dpkg:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb
Selanjutnya, kita harus mengkofigurasi dan memberitahukan mysql-cluster bahwa server utama harus menjadi server pertama yang menjalankan MySQL Cluster. Untuk melakukan hal tersebut, kita dapat membuat configurasi cluster dengan cara:
Buat folder mysql-cluster pada /var/lib:
$ sudo mkdir /var/lib/mysql-cluster
Buat file config.ini pada folder yang baru dibuat:
$ sudo nano /var/lib/mysql-cluster/config.ini
Pastekan text berikut pada file config.ini:
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=1 # Number of replicas
[ndb_mgmd]
# Management process options:
hostname=192.168.1.12 # Hostname of the manager
datadir=/var/lib/mysql-cluster # Directory for the log files
[ndbd]
hostname=192.168.1.13 # Hostname/IP of the first data node
NodeId=2 # Node ID for this data node
datadir=/usr/local/mysql/data # Remote directory for the data files
[mysqld]
# SQL node options:
hostname=192.168.1.12 # In our case the MySQL server/client is on the same Droplet as the cluster manager
Setelah melakukan paste, pastikan untuk mengubah hostname IP sesuai dengan IP server yang digunakan. Save dan keluar dari editor.
Selanjutnya, jalankan server manager dengan mengeksekusi ndb_mgmd dan memberitahukan file (-f) lokasi dari konfigurasi cluster:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Seharu kita melihat output seperti ini:
MySQL Cluster Management Server
2021-12-10 21:48:39 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2021-12-10 21:48:39 [MgmtSrvr] INFO -- Successfully created config directory
Ini menunjukkan bahwa server MySQL Cluster Management telah berhasil diinstal.
Selanjutnya, agar server Manajemen Cluster berjalan secara otomatis saat boot, kita harus membuat dan mengaktifkan layanan systemd.
Sebelum kita membuat layanan, kita perlu mematikan server yang sedang berjalan:
$ sudo pkill -f ndb_mgmd
Sekarang, buka dan edit file Unit systemd :
$ sudo nano /etc/systemd/system/ndb_mgmd.service
Pastekan code 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
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Di sini, kita telah menginstruksikan systemd tentang cara memulai, menghentikan, dan memulai kembali proses ndb_mgmd. Simpan dan tutup file.
Sekarang, muat ulang konfigurasi manajer systemd menggunakan daemon-reload:
$ sudo systemctl daemon-reload
Enable ndb_mgmd kembali:
$ sudo systemctl enable ndb_mgmd
Jalankan service ndb_mgmd:
$ sudo systemctl start ndb_mgmd
Verifikasi apakan NDB Cluster Management service sudah berjalan:
$ sudo systemctl status ndb_mgmd
Harusnya ada output seperti dibawah:
● ndb_mgmd.service - MySQL NDB Cluster Management Server
Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-12-10 21:23:37 UTC; 3s ago
Process: 11184 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS)
Main PID: 11193 (ndb_mgmd)
Tasks: 11 (limit: 4915)
CGroup: /system.slice/ndb_mgmd.service
└─11193 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Langkah terakhir untuk menyiapkan Cluster Manager adalah mengizinkan koneksi masuk dari node MySQL Cluster lain. Tambahkan aturan untuk mengizinkan koneksi masuk dari node server (192.168.1.13):
$ sudo ufw allow from 192.168.1.13
Langkah 2 – Install dan Konfigurasi Node Server
Pada server node, kita akan menginstall MySQL Cluster data node daemon dan mengkonfigurasi agar dapat berkomunikasi dengan Cluster Manager.
Lihat file MySQL Cluster data node daemon pada: https://downloads.mysql.com/archives/cluster/
Cari versi ubuntu yang digunkan dan file DEB Package NDB Data Node Binaries:
Setelah ketemu, copy link download .deb tersebut.
Login pada server node (pada tutorial ini: 192.168.1.13) dan download file Data Node Binaries:
$ cd ~
$ wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-community-data-node_8.0.26-1ubuntu20.04_amd64.deb
Sebelum kita menginstal Data Node Binaries, kita perlu menginstal dependensi, libclass-methodmaker-perl:
$ sudo apt update
$ sudo apt install libclass-methodmaker-perl
Install Data Node Binaries menggunakan dpkg:
$ sudo dpkg -i mysql-cluster-community-data-node_8.0.26-1ubuntu20.04_amd64.deb
Buat file konfigurasi untuk server node:
$ sudo nano /etc/my.cnf
Tambahkan teks berikut kedalam konfigurasi my.cnf:
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.1.12 # location of cluster manager
Pastikan untuk menyesuaikan IP dari server manager. Kemudian save.
Buat data directory pada /usr/local/mysql/data:
$ sudo mkdir -p /usr/local/mysql/data
Sekarang kita dapat menjalankan node server menggunakan perintah berikut:
$ sudo ndbd
Seharusnya ada output seperti dibawah ini:
2021-12-10 19:48:21 [ndbd] INFO -- Angel connected to '192.168.1.12:1186'
2021-12-10 19:48:21 [ndbd] INFO -- Angel allocated nodeid: 1
NDB data node daemon telah berhasil di install dan berjalan di server.
Selanjutnya berikan akses untuk server manager:
$ sudo ufw allow from 192.168.1.12
Berikutnya kita akan menambahkan data node daemon agar server node dapat menjalankan MySQL Cluster saat setelah reboot, prosesnya sama dengan server manager.
Matikan ndbd service terlebih dahulu:
$ sudo pkill -f ndbd
Sekarang, buka dan edit file Unit systemd:
$ sudo nano /etc/systemd/system/ndbd.service
Pastekan kode 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
Save dan keluar dari editor.
Reload kembali systemd manager dengan daemon-reload:
$ sudo systemctl daemon-reload
Mengaktifkan layanan yang baru saja dibuat sehingga daemon dapat dimulai saat reboot:
$ sudo systemctl enable ndbd
Jalankan service ndbd:
$ sudo systemctl start ndbd
Verifikasi bahwa Cluster server sudah jalan:
$ sudo systemctl status ndbd
Harusnya ada output seperti dibawah:
● ndbd.service - MySQL NDB Data Node Daemon
Loaded: loaded (/etc/systemd/system/ndbd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-12-10 20:56:29 UTC; 8s ago
Process: 11972 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS)
Main PID: 11984 (ndbd)
Tasks: 46 (limit: 4915)
CGroup: /system.slice/ndbd.service
├─11984 /usr/sbin/ndbd
└─11987 /usr/sbin/ndbd
* Jika server node lebih dari 1, silahkan ulangi langkah 2 diatas pada server node lainnya.
Langkah 3 – Konfigurasi dan Menjalankan MySQL Cluster
Pada dasarnya, MySQL Server standar yang ada di repository Ubuntu belum mendukung Clustering database. Oleh karena itu kita perlu menginstall custom paket SQL server. Paket tersebut bisa didownload di: https://downloads.mysql.com/archives/cluster/
Pada laman tersebut cari DEB Bundle yang sesuai dengan versi Ubuntu yang digunakan, copy link donwloadnya:
Login pada server manager (pada tutorial ini: 192.168.1.12) kemudian download deb-bundle:
$ cd ~
$ wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster_8.0.26-1ubuntu20.04_amd64.deb-bundle.tar
Buat folder dengan nama ‘install’:
$ mkdir install
Extract deb-bundle kedalam folder ‘install’:
$ tar -xvf mysql-cluster_8.0.26-1ubuntu20.04_amd64.deb-bundle.tar -C install/
Masuk ke dalam folder ‘install’:
$ cd install
Install dependensi MySQL Cluster:
$ sudo apt update
$ sudo apt install libaio1 libmecab2
Install dependensi tambahan yang ada pada folder ‘install’:
$ sudo dpkg -i mysql-common_8.0.26-1ubuntu20.04_amd64.deb
$ sudo dpkg -i mysql-cluster-community-client-pluggin_8.0.26-1ubuntu20.04_amd64.deb
$ sudo dpkg -i mysql-cluster-community-client-core_8.0.26-1ubuntu20.04_amd64.deb
$ sudo dpkg -i mysql-cluster-community-client_8.0.26-1ubuntu20.04_amd64.deb
$ sudo dpkg -i mysql-client_8.0.26-1ubuntu20.04_amd64.deb
$ sudo dpkg -i mysql-cluster-community-server-core_8.0.26-1ubuntu20.04_amd64.deb
$ sudo dpkg -i mysql-cluster-community-server_8.0.26-1ubuntu20.04_amd64.deb
Saat menginstall mysql-cluster-community-server, kita akan di minta uyntuk memasukkan password root daru database MySQL yang akan digunakan. Pastikan untuk mengingat password yang diinput tersebut kemudian <Ok>.
Install MySQL Server binary dengan dpkg:
$ sudo dpkg -i mysql-server_8.0.26-1ubuntu20.04_amd64.deb
Selanjutnya kita menambahkan konfigurasi mysql cluster pada configurasi mysql yang telah di install, buka my.cnf dari mysql:
$ sudo nano /etc/mysql/my.cnf
Tambahkan teks berikut pada bagian bawah file my.cnf:
. . .
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.1.12 # location of management server
Save file.
Restart MySQL server:
$ sudo systemctl restart mysql
MySQL secara default akan dimulai secara otomatis ketika service di restart. Jika tidak, jalankan perintah berikut:
$ sudo systemctl enable mysql
Langkah 4 – Verifikasi Instalasi MySQL Cluster
Untuk verifikasi MySQL Cluster, silahkan login pada server manager / node server.
Cara verifikasi pertama:
Setelah masuk, silahkan login pada MySQL:
$ mysql -u root -p
Masukkan password sesuai dengan yang di konfigurasi sebelumnya.
Setelah masuk pada MySQL, jalankan query berikut:
mysql> SHOW ENGINE NDB STATUS \G
Harusnya ada output seperti berikut:
*************************** 1. row ***************************
Type: ndbcluster
Name: connection
Status: cluster_node_id=4, connected_host=192.168.1.12, connected_port=1186, number_of_data_nodes=1, number_of_ready_data_nodes=1, connect_count=0
. . .
Outut diatas memperlihatkan bahwa cluster sudah berjalan dengan number_of_data_nodes=1, artinya, kita punya 1 server selain server manager yang dapat melayani permintaan data.
Keluar dari MySQL Promt dengan mengetik ‘quit‘ atau CTRL-D.
Cara verifikasi kedua:
Login pada server, kemudian ketikkan ndb_mgm:
$ ndb_mgm
Kemudian ketikkan SHOW:
ndb_mgm> SHOW
Harusnya ada ouput seperti berikut:
Connected to Management Server at: 192.168.1.12:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 1 node(s)
id=2 @192.168.1.13 (mysql-ver ndb-8.0.26, Nodegroup: 0, *)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.12 (mysql-ver ndb-8.0.26)
[mysqld(API)] 1 node(s)
id=3 @192.168.1.12 (mysql-ver ndb-8.0.26)
Informasi diatas memperlihatkan bahwa terdapat 1 server manager dan 1 server node pada cluster database saat ini, jumlah tersebut bisa bertambah sesuai dengan jumlah server yang digunakan.
Kita juga bisa melihat status dari masing-masing node dengan perintah:
ndb_mgm> 2 STATUS
Hasilnya kurang lebih:
Node 2: started (mysql-ver ndb-8.0.26)
Langkah 5 – Ujicoba Cluster Database MySQL
Ujicoba dapat dilakukan dengan melakukan manipulasi data pada salah satu server.
Pertama masuk ke MySQL di salah satu server:
$ mysql -u root -p
Kemudian buat database baru:
mysql> CREATE DATABASE minimarket;
Use database yang baru:
mysql> USE minimarket;
Buat sebuah table:
CREATE TABLE produk (nama VARCHAR(20), harga INT(11)) ENGINE=ndbcluster;
Kita harus secara eksplisit memberitahukan bahwa ENGINE yang digunakan ada ndbcluster.
Kemudian masukkan data:
mysql> INSERT INTO produk (nama,harga) VALUES('indomie',3000);
Lihat hasilnya:
mysql> SELECT * FROM produk;
Kesimpulan
Pada tutorial ini, kita telah membuat database terdistribusi bersifat cluster dengan MySQL. Server yang digunakan adalah Ubuntu 20.04. Perlu dipahami bahwa, tutorial ini menggunakan hanya 2 server, dimana pada kasus production bisa saja server yang dibutuhkan lebih banyak, jika demikian konfigurasi hanya perlu di tambahkan dan disesuaikan saja sesuai jumlah server yang ada.
Informasi ini bagus