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: //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 //downloads.mysql.com/archives/get/p/14/file/mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.debInstall ndb_mgmd menggunakan dpkg:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.debSelanjutnya, 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-clusterBuat file config.ini pada folder yang baru dibuat:
$ sudo nano /var/lib/mysql-cluster/config.iniPastekan 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 managerSetelah 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.iniSeharu 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 directoryIni 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_mgmdSekarang, buka dan edit file Unit systemd :
$ sudo nano /etc/systemd/system/ndb_mgmd.servicePastekan 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.targetDi 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 dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 0Enable ndb_mgmd kembali:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 1Jalankan service ndb_mgmd:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 2Verifikasi apakan NDB Cluster Management service sudah berjalan:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 3Harusnya ada output seperti dibawah:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 4Langkah 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 dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 5Langkah 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: //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:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 6Sebelum kita menginstal Data Node Binaries, kita perlu menginstal dependensi, libclass-methodmaker-perl:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 7Install Data Node Binaries menggunakan dpkg:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 8Buat file konfigurasi untuk server node:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 9Tambahkan teks berikut kedalam konfigurasi my.cnf:
$ sudo mkdir /var/lib/mysql-cluster 0Pastikan untuk menyesuaikan IP dari server manager. Kemudian save.
Buat data directory pada /usr/local/mysql/data:
$ sudo mkdir /var/lib/mysql-cluster 1Sekarang kita dapat menjalankan node server menggunakan perintah berikut:
$ sudo mkdir /var/lib/mysql-cluster 2Seharusnya ada output seperti dibawah ini:
$ sudo mkdir /var/lib/mysql-cluster 3NDB data node daemon telah berhasil di install dan berjalan di server.
Selanjutnya berikan akses untuk server manager:
$ sudo mkdir /var/lib/mysql-cluster 4Berikutnya 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 mkdir /var/lib/mysql-cluster 5Sekarang, buka dan edit file Unit systemd:
$ sudo mkdir /var/lib/mysql-cluster 6Pastekan kode berikut:
$ sudo mkdir /var/lib/mysql-cluster 7Save dan keluar dari editor.
Reload kembali systemd manager dengan daemon-reload:
$ sudo dpkg -i mysql-cluster-community-management-server_8.0.26-1ubuntu20.04_amd64.deb 0Mengaktifkan layanan yang baru saja dibuat sehingga daemon dapat dimulai saat reboot:
$ sudo mkdir /var/lib/mysql-cluster 9Jalankan service ndbd:
$ sudo nano /var/lib/mysql-cluster/config.ini0Verifikasi bahwa Cluster server sudah jalan:
$ sudo nano /var/lib/mysql-cluster/config.ini1Harusnya ada output seperti dibawah:
$ sudo nano /var/lib/mysql-cluster/config.ini2* 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: //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:
$ sudo nano /var/lib/mysql-cluster/config.ini3Buat folder dengan nama ‘install’:
$ sudo nano /var/lib/mysql-cluster/config.ini4Extract deb-bundle kedalam folder ‘install’:
$ sudo nano /var/lib/mysql-cluster/config.ini5Masuk ke dalam folder ‘install’:
$ sudo nano /var/lib/mysql-cluster/config.ini6Install dependensi MySQL Cluster:
$ sudo nano /var/lib/mysql-cluster/config.ini7Install dependensi tambahan yang ada pada folder ‘install’:
$ sudo nano /var/lib/mysql-cluster/config.ini8Saat 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 nano /var/lib/mysql-cluster/config.ini9Selanjutnya kita menambahkan konfigurasi mysql cluster pada configurasi mysql yang telah di install, buka my.cnf dari mysql:
[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 manager0Tambahkan teks berikut pada bagian bawah file my.cnf:
Save file.
Restart MySQL server:
[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 manager2MySQL secara default akan dimulai secara otomatis ketika service di restart. Jika tidak, jalankan perintah berikut:
[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 manager3Langkah 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:
[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 manager4Masukkan password sesuai dengan yang di konfigurasi sebelumnya.
Setelah masuk pada MySQL, jalankan query berikut:
[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 manager5Harusnya ada output seperti berikut:
[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 manager6Outut 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:
[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 manager7Kemudian ketikkan SHOW:
[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 manager8Harusnya ada ouput seperti berikut:
[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 manager9Informasi 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:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini0Hasilnya kurang lebih:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini1Langkah 5 – Ujicoba Cluster Database MySQL
Ujicoba dapat dilakukan dengan melakukan manipulasi data pada salah satu server.
Pertama masuk ke MySQL di salah satu server:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini2Kemudian buat database baru:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini3Use database yang baru:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini4Buat sebuah table:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini5Kita harus secara eksplisit memberitahukan bahwa ENGINE yang digunakan ada ndbcluster.
Kemudian masukkan data:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini6Lihat hasilnya:
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini7Kesimpulan
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.