Basis data terdistribusi MySQL Cluster menyediakan ketersediaan dan throughput tinggi untuk sistem manajemen basis data MySQL. MySQL Cluster terdiri dari satu atau lebih node manajemen (ndb_mgmd
) yang menyimpan konfigurasi cluster dan mengontrol data node (ndbd
), tempat data cluster disimpan. Setelah berkomunikasi dengan node manajemen, klien (klien MySQL, server, atau API asli) terhubung langsung ke node data ini.
Dengan MySQL Cluster biasanya tidak ada replikasi data, tetapi sinkronisasi data node. Untuk tujuan ini, mesin data khusus harus digunakan - NDBCluster (NDB). Sangat membantu untuk menganggap cluster sebagai lingkungan MySQL logis tunggal dengan komponen yang berlebihan. Dengan demikian, MySQL Cluster dapat berpartisipasi dalam replikasi dengan MySQL Clusters lainnya.
MySQL Cluster bekerja paling baik di lingkungan shared-nothing. Idealnya, tidak ada dua komponen yang berbagi perangkat keras yang sama. Untuk tujuan kesederhanaan dan demonstrasi, kami akan membatasi diri untuk hanya menggunakan tiga server. Kami akan menyiapkan dua server sebagai simpul data yang menyinkronkan data di antara mereka. Server ketiga akan digunakan untuk Cluster Manager dan juga untuk server MySQL / klien. Jika ingin memutar server tambahan, dapat ditambahkan lebih banyak data node ke cluster, memisahkan manajer cluster dari server MySQL / klien, dan mengkonfigurasi lebih banyak server sebagai Manajer Cluster dan server MySQL / klien.
Arsitektur terdiri dari 8 server, masing-masing server memiliki spesifikasi sebagai berikut:
- 512 MB RAM
- Ubuntu 18.04
Pembagian IP server sebagai berikut:
- NDB Management server:
192.168.16.190
- NDB Data server:
192.168.16.184
192.168.16.185
192.168.16.186
- MySQL Server:
192.168.16.187
192.168.16.188
192.168.16.189
- ProxySQL:
192.168.16.191
- Pertama-tama akan dimulai dengan mengunduh dan menginstal MySQL Cluster Manager,
ndb_mgmd
. - Login pada server
192.168.16.190
dan download file.deb
berikut:
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-community-management-server_7.6.6-1ubuntu18.04_amd64.deb
- Install
ndb_mgmd
menggunakan dpkg:
sudo dpkg -i mysql-cluster-community-management-server_7.6.6-1ubuntu18.04_amd64.deb
- Kita sekarang perlu mengkonfigurasi
ndb_mgmd
sebelum menjalankannya; konfigurasi yang tepat akan memastikan sinkronisasi dan memuat distribusi yang benar di antara node data. - Cluster Manager harus menjadi komponen pertama yang diluncurkan di setiap cluster MySQL. Ini membutuhkan file konfigurasi, diteruskan sebagai argumen untuk dieksekusi. Kami akan membuat dan menggunakan file konfigurasi berikut:
/var/lib/mysql-cluster/config.ini
. - Pada cluster manager, buat
/var/lib/mysql-cluster
yang akan diisi:
sudo mkdir /var/lib/mysql-cluster
- Selanjutnya buat dan ubah file konfigurasi:
sudo nano /var/lib/mysql-cluster/config.ini
- Kemudian tempelkan:
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=3 # Number of replicas
[ndb_mgmd]
# Management process options:
hostname=192.168.16.190 # Hostname of the manager
datadir=/var/lib/mysql-cluster # Directory for the log files
[ndbd]
hostname=192.168.16.184 # 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
[ndbd]
hostname=192.168.16.185 # Hostname/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
[ndbd]
hostname=192.168.16.186 # Hostname/IP of the second data node
NodeId=4 # Node ID for this data node
datadir=/usr/local/mysql/data # Remote directory for the data files
[mysqld]
# SQL node options:
hostname=192.168.16.187 # In our case the MySQL server/client is on the same Droplet as the cluster manager
[mysqld]
# SQL node options:
hostname=192.168.16.188 # In our case the MySQL server/client is on the same Droplet as the cluster manager
[mysqld]
# SQL node options:
hostname=192.168.16.189 # In our case the MySQL server/client is on the same Droplet as the cluster manager
- Setelah menempel di teks ini, pastikan untuk mengganti nilai
hostname
di atas dengan alamat IP yang benar dari IP yang telah Anda konfigurasikan. Mengatur parameterhostname
ini adalah ukuran keamanan penting yang mencegah server lain dari terhubung ke Cluster Manager. - Simpan file dan tutup editor teks Anda.
- Ini adalah file konfigurasi minimal yang diperkecil untuk MySQL Cluster. Anda harus menyesuaikan parameter dalam file ini tergantung pada kebutuhan produksi Anda. Untuk sampel, file konfigurasi
ndb_mgmd
yang sepenuhnya dikonfigurasi, bacalah dokumentasi MySQL Cluster. - Dalam file di atas Anda dapat menambahkan komponen tambahan seperti data node (
ndbd
) atau server MySQL (mysqld
) dengan menambahkan instance ke bagian yang sesuai. - Kita sekarang dapat memulai manajer dengan mengeksekusi binary
ndb_mgmd
dan menentukan file konfigunya menggunakan flag-f
:
sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini
MySQL Cluster Management Server mysql-5.7.22 ndb-7.6.6
2019-12-09 08:09:35 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2019-12-09 08:09:35 [MgmtSrvr] INFO -- Sucessfully created config directory
- Ini menunjukkan bahwa server MySQL Cluster Management telah berhasil diinstal.
- Idealnya, setiap ingin memulai server Manajemen Cluster secara otomatis saat boot. Untuk melakukan ini, kami akan membuat dan mengaktifkan layanan systemd.
- Sebelum kita membuat layanan, kita perlu mematikan server yang berjalan:
sudo pkill -f ndb_mgmd
- Lalu buka dan ubah systemd unit file
sudo nano /etc/systemd/system/ndb_mgmd.service
- Tempelkan potongan kode 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 menambahkan sekumpulan opsi yang menginstruksikan
systemd
tentang cara memulai, menghentikan, dan memulai kembali prosesndb_mgmd
. Untuk mempelajari lebih lanjut tentang opsi yang digunakan dalam konfigurasi unit ini, bacalah manualsystemd
. - Simpan dan tutup file.
- Sekarang, muat ulang konfigurasi manajer
systemd
menggunakandaemon-reload
:
sudo systemctl daemon-reload
- Kita akan mengaktifkan layanan yang baru saja kami buat sehingga MySQL Cluster Manager dimulai saat reboot:
sudo systemctl enable ndb_mgmd
- Eksekusi service tersebut:
sudo systemctl start ndb_mgmd
- Anda dapat memverifikasi bahwa layanan NDB Cluster Management sedang berjalan:
sudo systemctl status ndb_mgmd
Jika berhasil akan mengeluarkan output sebagai berikut:
● ndb_mgmd.service - MySQL NDB Cluster Management Server
Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-12-09 08:13:03 UTC; 8s ago
Process: 13244 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS)
Main PID: 13253 (ndb_mgmd)
Tasks: 11 (limit: 504)
CGroup: /system.slice/ndb_mgmd.service
└─13253 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Dec 09 08:13:03 server190 systemd[1]: Starting MySQL NDB Cluster Management Server...
Dec 09 08:13:03 server190 ndb_mgmd[13244]: MySQL Cluster Management Server mysql-5.7.22 ndb-7.6.6
Dec 09 08:13:03 server190 systemd[1]: Started MySQL NDB Cluster Management Server.
- Yang menunjukkan bahwa server MySQL Cluster Management
ndb_mgmd
sekarang berjalan sebagai layanansystemd
. - Langkah terakhir untuk mengatur Cluster Manager adalah mengizinkan koneksi masuk dari node MySQL Cluster lainnya di jaringan pribadi kami.
- Jika Anda tidak mengonfigurasi ufw firewall saat mengatur server ini, Anda dapat langsung beralih ke bagian selanjutnya.
- Kami akan menambahkan aturan untuk memungkinkan koneksi masuk lokal dari kedua node data:
sudo ufw allow from 192.168.16.184
sudo ufw allow from 192.168.16.185
sudo ufw allow from 192.168.16.186
- Setelah menjalankan perintah tersebut, seharusnya akan terlihat output sebagai berikut:
#Output
Rule added
- Cluster Manager sekarang seharusnya sudah aktif dan berjalan, dan dapat berkomunikasi dengan node Cluster lainnya melalui jaringan pribadi.
Note: Semua perintah disini harus dijalankan disemua data nodes.
- Sekarang, masuk ke node pertama Anda (dalam tutorial ini, 192.168.16.184), dan unduh file deb ini:
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-community-data-node_7.6.6-1ubuntu18.04_amd64.deb
- Sebelum menginstall data node binary, kita perlu menginstall
libclass-methodmaker-perl
sudo apt update
sudo apt install libclass-methodmaker-perl
- Lalu install data node binary menggunakan
dpkg
:
sudo dpkg -i mysql-cluster-community-data-node_7.6.6-1ubuntu18.04_amd64.deb
- Node data menarik konfigurasinya dari lokasi standar MySQL,
/etc/my.cnf
. Buat file ini menggunakan editor teks favorit Anda dan mulai mengeditnya:
sudo nano /etc/my.cnf
- Tambahkan parameter konfigurasi berikut ke file:
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.16.190 # location of cluster manager
-
Menentukan lokasi node Cluster Manager adalah satu-satunya konfigurasi yang diperlukan untuk memulai ndbd. Konfigurasi lainnya akan ditarik langsung dari manajer.
-
Simpan dan keluar dari file.
-
Dalam contoh kami, simpul data akan mengetahui bahwa direktori datanya adalah / usr / local / mysql / data, sesuai konfigurasi manajer. Sebelum memulai daemon, kami akan membuat direktori ini pada simpul:
sudo mkdir -p /usr/local/mysql/data
- Sekarang kita bisa memulai node menggunakan perintah dibawah ini:
sudo ndbd
- Seharusnya akan mengeluarkan berikut:
2019-12-09 08:41:29 [ndbd] INFO -- Angel connected to '192.168.16.190:1186'
2019-12-09 08:41:29 [ndbd] INFO -- Angel allocated nodeid: 2
-
Daemon node data NDB telah berhasil diinstal dan sekarang berjalan di server Anda.
-
Kita juga perlu mengizinkan koneksi masuk dari node MySQL Cluster lainnya melalui jaringan pribadi.
-
Jika Anda tidak mengonfigurasi firewall ufw saat mengatur server ini, Anda dapat langsung beralih ke menyiapkan layanan systemd untuk ndbd.
-
Kami akan menambahkan aturan untuk mengizinkan koneksi masuk dari Cluster Manager dan node data lainnya:
sudo ufw allow from 192.168.16.185
sudo ufw allow from 192.168.16.186
-
Server node data MySQL Anda sekarang dapat berkomunikasi dengan Cluster Manager dan simpul data lainnya melalui jaringan pribadi.
-
Terakhir, kami juga ingin daemon simpul data dijalankan secara otomatis ketika server melakukan booting. Kami akan mengikuti prosedur yang sama dengan yang digunakan untuk Cluster Manager, dan membuat layanan systemd.
-
Sebelum kami membuat layanan, kami akan mematikan proses ndbd yang sedang berjalan:
sudo pkill -f ndbd
- Buka dan edit systemd unit file
sudo nano /etc/systemd/system/ndbd.service
- Lalu tempelkan potongan 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
-
Di sini, kami telah menambahkan sekumpulan opsi yang menginstruksikan systemd tentang cara memulai, menghentikan, dan memulai kembali proses ndbd. Untuk mempelajari lebih lanjut tentang opsi yang digunakan dalam konfigurasi unit ini, bacalah manual sistemd.
-
Simpan dan tutup file.
-
Sekarang, muat ulang konfigurasi manajer systemd menggunakan daemon-reload:
sudo systemctl daemon-reload
- Untuk mengaktifkan service yang baru kita buat sehingga dapat berjalan ketika reboot
sudo systemctl enable ndbd
- Memulai service
sudo systemctl start ndbd
- Untuk memverifikasi apakah NDB Cluster Management berjalan
sudo systemctl status ndbd
-
Yang menunjukkan bahwa daemon node data MySQL Cluster ndbd sekarang berjalan sebagai layanan systemd. Node data Anda sekarang harus berfungsi penuh dan dapat terhubung ke MySQL Cluster Manager.
- Server MySQL standar, seperti yang tersedia di repositori APT Ubuntu, tidak mendukung mesin MySQL Cluster NDB. Ini berarti kita perlu menginstal server SQL khusus yang dikemas dengan perangkat lunak MySQL Cluster lain yang telah kita instal dalam tutorial ini.
- Login di setiap server mysql yaitu di
192.168.187
,192.168.16.188
,192.168.16.189
dan lakukan langkah berikut Download MySQL Cluster
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster_7.6.6-1ubuntu18.04_amd64.deb-bundle.tar
Extract file tersebut kedalam file install
mkdir install
tar -xvf mysql-cluster_7.6.6-1ubuntu18.04_amd64.deb-bundle.tar -C install/
cd install
sudo apt update
sudo apt install libaio1 libmecab2
sudo dpkg -i mysql-common_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-cluster-community-client_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-client_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-cluster-community-server_7.6.6-1ubuntu18.04_amd64.deb
- Kemudian aakan diminta password untuk akses admin. Simpan ini.
sudo dpkg -i mysql-server_7.6.6-1ubuntu18.04_amd64.deb
sudo nano /etc/mysql/my.cnf
- Masukkan file konfigurasi berikut kedalam my.cnf
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Cluster Community Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.16.190 # location of management server
- Restart service
sudo systemctl restart mysql
- Kemudian aktifkan kembali mysql
sudo systemctl enable mysql
- Akses kedalam mysql dengan cara
mysql -u root -p
Didalam MySQL Client jalankan:
SHOW ENGINE NDB STATUS \G
Untuk memastikan bahwa semua server terhubung ke server manager
ndb_mgm
-
Disini kami menggunakan MySQL Workbench untuk memasukkan data kedalam server MySQL dengan konfigurasi berikut
-
Telah dimasukkan seluruh data, dan berikut hasilnya. Di kedua server.
- Untuk melakukan monitoring grafana perlu dilakukan instalasi terhadap MySQL Exporter, Prometheus dan Grafana itu sendiri. Berikut instalasinya
- Membuat service user
sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
- Set user dan group ownership ke direktory baru ke prometheus user
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
- Download prometheus
cd ~
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.0.0/prometheus-2.0.0.linux-amd64.tar.gz
- Unpack hasil download
tar xvf prometheus-2.0.0.linux-amd64.tar.gz
- Copy dua binaries tersebut
sudo cp prometheus-2.0.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.0.0.linux-amd64/promtool /usr/local/bin/
- Set user dan group ownership
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
- Copy files
sudo cp -r prometheus-2.0.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.0.0.linux-amd64/console_libraries /etc/prometheus
- Set user dan group ownership pada folder
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
- Konfigurasi prometheus
sudo nano /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- Jalankan prometheus
sudo -u prometheus /usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
- Download MySQL Exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz
- Extract file tersebut
tar xvzf mysqld_exporter-0.11.0.linux-amd64.tar.gz
- Pindahkan ke
cd mysqld_exporter-0.11.0.linux-amd64/
sudo mv mysqld_exporter /usr/local/bin/
- Buat user baru di MySQL
sudo mysql
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';