MySQL adalah sistem manajemen database relasional, open-source, dan gratis. Ini digunakan untuk menyimpan data dalam berbagai tujuan termasuk, pergudangan data, e-commerce, dan aplikasi logging. MySQL Cluster adalah teknologi yang menyediakan skalabilitas dan ketersediaan dengan biaya rendah.
Dalam tutorial ini, kita akan menggunakan satu node master untuk menyimpan konfigurasi cluster dan dua node data untuk menyimpan data cluster. Alamat IP setiap node ditunjukkan di bawah ini:
- Node Master atau Manajer - 104.245.33.61
- Data Node1 - 104.245.32.195
- Data Node2 - 69.87.218.169
Prasyarat
- Tiga server menjalankan Debian 10, satu untuk node manajer dan yang lainnya adalah node data.
- Kata sandi root disiapkan di setiap server.
Memulai
Pertama, Anda perlu memperbarui semua server ke versi terbaru. Anda dapat memperbarui semua dengan perintah berikut:
apt-get update -y
Setelah semua server diperbarui, Anda dapat melanjutkan ke langkah berikutnya.
Instal dan Siapkan Manajer Cluster MySQL
Pertama, Anda perlu menginstal paket manajemen cluster MySQL pada node Master. Secara default, paket ini tidak disertakan dalam repositori default Debian 10. Jadi, Anda perlu mengunduhnya dari situs web resmi MySQL.
Anda dapat mengunduhnya dengan perintah berikut:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
Setelah mengunduh file deb, instal menggunakan perintah berikut:
dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
Setelah instalasi selesai, buat direktori untuk menyimpan konfigurasi cluster dengan perintah berikut:
mkdir /var/lib/mysql-cluster
Selanjutnya, buat file konfigurasi baru dengan perintah berikut:
nano /var/lib/mysql-cluster/config.ini
Tambahkan baris berikut:
[ndbd default] NoOfReplicas=2 # Number of replicas [ndb_mgmd] # Management process options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager datadir=/var/lib/mysql-cluster [ndbd] hostname=104.245.32.195 #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 [ndbd] hostname=69.87.218.169 #IP of the second data node NodeId=3 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [mysqld] # SQL node options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager
Simpan dan tutup file jika sudah selesai kemudian jalankan cluster manager dengan perintah berikut:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Anda akan mendapatkan output berikut:
MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 2021-05-10 08:23:05 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it... 2021-05-10 08:23:05 [MgmtSrvr] INFO -- Sucessfully created config directory
Sekarang, matikan server yang sedang berjalan dengan perintah berikut:
pkill -f ndb_mgmd
Selanjutnya, buat file layanan systemd untuk MySQL Cluster Manager untuk mengelola layanan:
nano /etc/systemd/system/ndb_mgmd.service
Tambahkan baris 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
Simpan dan tutup file kemudian muat ulang daemon systemd dengan perintah berikut:
systemctl daemon-reload
Selanjutnya, mulai Cluster Manager dan aktifkan untuk memulai pada sistem reboot dengan perintah berikut:
systemctl start ndb_mgmd
systemctl enable ndb_mgmd
Anda sekarang dapat memeriksa status layanan dengan perintah berikut:
systemctl status ndb_mgmd
Anda akan mendapatkan output berikut:
? ndb_mgmd.service - MySQL NDB Cluster Management Server Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:23:53 UTC; 6s ago Process: 984 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS) Main PID: 985 (ndb_mgmd) Tasks: 12 (limit: 2359) Memory: 6.5M CGroup: /system.slice/ndb_mgmd.service ??985 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini May 10 08:23:53 master systemd[1]: Starting MySQL NDB Cluster Management Server... May 10 08:23:53 master ndb_mgmd[984]: MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 May 10 08:23:53 master systemd[1]: Started MySQL NDB Cluster Management Server.
Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.
Instal dan Konfigurasi Node Data
Selanjutnya, kita akan membuat paket data node di server lain dan mengkonfigurasinya untuk berkomunikasi dengan MySQL Cluster Manager.
Pertama, instal dependensi yang diperlukan pada kedua node data dengan perintah berikut:
apt-get install libclass-methodmaker-perl -y
Setelah semua dependensi terinstal, unduh file deb MySQL Data Nodes versi terbaru dengan perintah berikut:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
Setelah unduhan selesai, instal file yang diunduh dengan perintah berikut:
dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
Secara default, node data menyimpan semua konfigurasi di file /etc/my.cnf.
Jadi buat file /etc/my.cnf baru di kedua node data dengan perintah berikut:
nano /etc/my.cnf
Tambahkan IP cluster seperti yang ditunjukkan di bawah ini:
[mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Simpan dan tutup file kemudian buat direktori data pada kedua node data:
mkdir -p /usr/local/mysql/data
Sekarang, mulai node data dengan perintah berikut:
ndbd
Anda akan mendapatkan output berikut:
2021-05-10 08:27:13 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' 2021-05-10 08:27:13 [ndbd] INFO -- Angel allocated nodeid: 2
Selanjutnya, matikan proses ndbd yang sedang berjalan dengan perintah berikut:
pkill -f ndbd
Selanjutnya, buat file layanan systemd untuk ndbd di kedua node data dengan perintah berikut:
nano /etc/systemd/system/ndbd.service
Tambahkan baris 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
Simpan dan tutup file kemudian muat ulang daemon systemd dengan perintah berikut:
systemctl daemon-reload
Selanjutnya, jalankan layanan ndbd dan buat untuk memulai pada sistem reboot dengan perintah berikut:
systemctl start ndbd
systemctl enable ndbd
Anda juga dapat memeriksa status layanan ndbd menggunakan perintah berikut:
systemctl status ndbd
Anda akan mendapatkan output berikut:
? ndbd.service - MySQL NDB Data Node Daemon Loaded: loaded (/etc/systemd/system/ndbd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:28:28 UTC; 12s ago Process: 740 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS) Main PID: 741 (ndbd) Tasks: 46 (limit: 2359) Memory: 827.1M CGroup: /system.slice/ndbd.service ??741 /usr/sbin/ndbd ??742 /usr/sbin/ndbd May 10 08:28:28 data1 systemd[1]: Starting MySQL NDB Data Node Daemon... May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel allocated nodeid: 2 May 10 08:28:28 data1 systemd[1]: Started MySQL NDB Data Node Daemon.
Instal dan Konfigurasi Server MySQL
Selanjutnya kita akan mendownload dan menginstal paket MySQL Server dan Client pada MySQL Cluster Manager Node.
Pertama, unduh versi terbaru MySQL Cluster Bundle menggunakan perintah berikut:
wget https://cdn.mysql.com/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar
Selanjutnya, ekstrak file yang diunduh di dalam direktori /opt dengan perintah berikut:
tar -xvf mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar -C /opt
Selanjutnya, ubah direktori ke /opt dan instal dependensi yang diperlukan dengan perintah berikut:
cd /opt
apt-get install libaio1 libmecab2 libnuma1 psmisc -y
Selanjutnya, instal file MySQL Common deb dengan perintah berikut:
dpkg -i mysql-common*
Selanjutnya, instal paket MySQL Client dengan perintah berikut:
dpkg -i mysql-cluster-community-client_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-core_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-plugins_8.0.24-1debian10_amd64.deb
dpkg -i mysql-client_8.0.24-1debian10_amd64.deb
dpkg -i mysql-cluster-community-server*
Jika Anda mendapatkan kesalahan ketergantungan, jalankan perintah berikut:
apt-get install -f
Selanjutnya, instal paket MySQL Server dengan perintah berikut:
dpkg -i mysql-server_8.0.24-1debian10_amd64.deb
Selama instalasi, Anda akan diminta untuk menyetel kata sandi root MySQL.
Setelah menginstal server MySQL, Anda perlu mengedit file konfigurasi utama MySQL dan menentukan IP cluster:
nano /etc/mysql/my.cnf
Tambahkan baris berikut:
[mysqld] # Options for mysqld process: ndbcluster # run NDB storage engine [mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Simpan dan tutup file setelah Anda selesai. Selanjutnya, restart layanan MySQL dan aktifkan untuk memulai pada sistem reboot:
systemctl restart mysql
systemctl enable mysql
Anda dapat memeriksa status server MySQL dengan perintah berikut:
systemctl status mysql
Anda akan melihat output berikut:
? mysql.service - MySQL Cluster Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:35:04 UTC; 7s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1950 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 1985 (mysqld) Status: "Server is operational" Tasks: 47 (limit: 2359) Memory: 372.0M CGroup: /system.slice/mysql.service ??1985 /usr/sbin/mysqld May 10 08:35:01 master systemd[1]: Starting MySQL Cluster Community Server... May 10 08:35:04 master systemd[1]: Started MySQL Cluster Community Server.
Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.
Uji Cluster MySQL
Sekarang, kami telah berhasil menginstal dan mengkonfigurasi Cluster MySQL tiga node. Selanjutnya, Anda perlu memverifikasi apakah itu berfungsi atau tidak.
Pertama, login ke node MySQL Cluster Manager dan login ke MySQL dengan perintah berikut:
mysql -u root -p
Berikan kata sandi root MySQL Anda kemudian periksa informasi cluster dengan perintah berikut:
mysql> SHOW ENGINE NDB STATUS \G
Jika semuanya baik-baik saja, Anda akan mendapatkan output berikut:
*************************** 1. row *************************** Type: ndbclus Name: connection Status: cluster_node_id=4, connected_host=104.245.33.61, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0 *************************** 2. row *************************** Type: ndbclus Name: NdbTransaction Status: created=2, free=2, sizeof=392 *************************** 3. row *************************** Type: ndbclus Name: NdbOperation Status: created=4, free=4, sizeof=944 *************************** 4. row *************************** Type: ndbclus Name: NdbIndexScanOperation Status: created=0, free=0, sizeof=1152 *************************** 5. row *************************** Type: ndbclus Name: NdbIndexOperation Status: created=0, free=0, sizeof=952 *************************** 6. row *************************** Type: ndbclus Name: NdbRecAttr Status: created=0, free=0, sizeof=88 *************************** 7. row *************************** Type: ndbclus Name: NdbApiSignal Status: created=16, free=16, sizeof=144 *************************** 8. row *************************** Type: ndbclus Name: NdbLabel Status: created=0, free=0, sizeof=200 *************************** 9. row *************************** Type: ndbclus Name: NdbBranch Status: created=0, free=0, sizeof=32 *************************** 10. row *************************** Type: ndbclus Name: NdbSubroutine Status: created=0, free=0, sizeof=72 *************************** 11. row *************************** Type: ndbclus Name: NdbCall Status: created=0, free=0, sizeof=24 *************************** 12. row *************************** Type: ndbclus Name: NdbBlob Status: created=0, free=0, sizeof=592 *************************** 13. row *************************** Type: ndbclus Name: NdbReceiver Status: created=0, free=0, sizeof=128 *************************** 14. row *************************** Type: ndbclus Name: NdbLockHandle Status: created=0, free=0, sizeof=48 *************************** 15. row *************************** Type: ndbclus Name: binlog Status: latest_epoch=897648164875, latest_trans_epoch=820338753551, latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0, latest_applied_binlog_epoch=0 15 rows in set (0.00 sec)
Sekarang, keluar dari shell MySQL dengan perintah berikut:
mysql> exit
Sekarang, kami akan melakukan pengujian lain untuk memastikan bahwa cluster berfungsi dengan baik.
Hubungkan konsol manajemen Cluster dengan perintah berikut:
ndb_mgm
Anda akan melihat output berikut:
-- NDB Cluster -- Management Client -- ndb_mgm>
Sekarang, jalankan perintah berikut untuk memeriksa semua data ndoes:
ndb_mgm> SHOW
Anda akan mendapatkan output berikut:
Connected to Management Server at: 104.245.33.61:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @104.245.32.195 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0, *) id=3 @69.87.218.169 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24) [mysqld(API)] 1 node(s) id=4 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24)
Untuk memeriksa status node data pertama, jalankan perintah berikut:
ndb_mgm> 2 STATUS
Anda akan melihat output berikut:
Node 2: started (mysql-8.0.24 ndb-8.0.24)
Untuk memeriksa status node data kedua, jalankan perintah berikut:
ndb_mgm> 3 STATUS
Anda akan melihat output berikut:
Node 3: started (mysql-8.0.24 ndb-8.0.24)
Kesimpulan
Selamat! Anda telah berhasil menginstal dan menyiapkan Cluster MySQL tiga node di server Debian 10. Anda sekarang dapat menggunakan penyiapan ini di lingkungan produksi untuk mencapai skalabilitas dan ketersediaan.