Memerlukan ClusterControl 1.6 atau yang lebih baru. Berlaku untuk instance/cluster berbasis MySQL.
Pada beberapa kesempatan, Anda mungkin ingin menjalankan beberapa instance MySQL pada satu mesin. Anda mungkin ingin memberi pengguna yang berbeda akses ke server MySQL mereka sendiri yang mereka kelola sendiri, atau Anda mungkin ingin menguji rilis MySQL baru sambil menjaga penyiapan produksi yang ada tidak terganggu.
Dimungkinkan untuk menggunakan biner server MySQL yang berbeda per instance, atau menggunakan biner yang sama untuk beberapa instance (atau kombinasi dari dua pendekatan). Misalnya, Anda mungkin menjalankan server dari MySQL 5.6 dan satu dari MySQL 5.7, untuk melihat bagaimana versi yang berbeda menangani beban kerja tertentu. Atau Anda dapat menjalankan beberapa instance dari versi MySQL terbaru, masing-masing mengelola kumpulan database yang berbeda.
Baik Anda menggunakan biner server yang berbeda atau tidak, setiap instans yang Anda jalankan harus dikonfigurasi dengan nilai unik untuk beberapa parameter operasi. Ini menghilangkan potensi konflik antar instance. Anda dapat menggunakan MySQL Sandbox untuk membuat beberapa instance MySQL. Atau Anda dapat menggunakan mysqld_multi yang tersedia di MySQL untuk memulai atau menghentikan sejumlah proses mysqld terpisah yang berjalan pada port TCP/IP dan soket UNIX yang berbeda.
Dalam posting blog ini, kami akan menunjukkan cara mengonfigurasi ClusterControl untuk memantau beberapa instance MySQL yang berjalan di satu host.
Batasan Kontrol Cluster
Pada saat penulisan, ClusterControl tidak mendukung pemantauan beberapa instance pada satu host per grup cluster/server. Ini mengasumsikan praktik terbaik berikut:
- Hanya satu instance MySQL per host (server fisik atau mesin virtual).
- Redundansi data MySQL harus dikonfigurasi pada server N+1.
- Semua instance MySQL berjalan dengan konfigurasi seragam di seluruh grup cluster/server, misalnya, port mendengarkan, log kesalahan, datadir, basedir, soket identik.
Berkenaan dengan poin yang disebutkan di atas, ClusterControl mengasumsikan bahwa dalam grup cluster/server:
- Instance MySQL dikonfigurasi secara seragam di seluruh cluster; port yang sama, lokasi log yang sama, direktori basis/data, dan konfigurasi penting lainnya.
- Ini memantau, mengelola, dan menyebarkan hanya satu instance MySQL per host.
- Klien MySQL harus diinstal pada host dan tersedia di jalur yang dapat dieksekusi untuk pengguna OS yang sesuai.
- MySQL terikat ke alamat IP yang dapat dijangkau oleh node ClusterControl.
- Itu terus memantau statistik host, mis. CPU/RAM/disk/jaringan untuk setiap instance MySQL satu per satu. Dalam lingkungan dengan beberapa instance per host, Anda akan mengharapkan statistik host yang berlebihan karena memantau host yang sama beberapa kali.
Dengan asumsi di atas, fitur ClusterControl berikut tidak berfungsi untuk host dengan banyak instance:
Backup - Percona Xtrabackup tidak mendukung banyak instance per host dan mysqldump yang dijalankan oleh ClusterControl hanya terhubung ke soket default.
Manajemen proses - ClusterControl menggunakan standar 'pgrep -f mysqld_safe' untuk memeriksa apakah MySQL berjalan pada host tersebut. Dengan beberapa contoh MySQL, ini adalah pendekatan positif palsu. Dengan demikian, pemulihan otomatis untuk node/cluster tidak akan berfungsi.
Manajemen konfigurasi - ClusterControl menyediakan direktori konfigurasi MySQL standar. Biasanya berada di bawah /etc/ dan /etc/mysql.
Solusi
Memantau beberapa instance MySQL pada mesin masih dimungkinkan dengan ClusterControl dengan solusi sederhana. Setiap instance MySQL harus diperlakukan sebagai satu entitas per grup server.
Dalam contoh ini, kami memiliki 3 instance MySQL pada satu host yang dibuat dengan MySQL Sandbox:
ClusterControl memantau beberapa instance pada host yang samaKami membuat instance MySQL kami menggunakan perintah berikut:
$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
Secara default, MySQL Sandbox membuat instance mysql yang mendengarkan 127.0.0.1. Penting untuk mengonfigurasi setiap node dengan tepat agar mereka mendengarkan semua alamat IP yang tersedia. Berikut adalah ringkasan instance MySQL kami di host:
[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json
{
"node1":
{
"host": "master",
"port": "15024",
"socket": "/tmp/mysql_sandbox15024.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node2":
{
"host": "master",
"port": "15025",
"socket": "/tmp/mysql_sandbox15025.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node3":
{
"host": "master",
"port": "15026",
"socket": "/tmp/mysql_sandbox15026.sock",
"username": "[email protected]%",
"password": "msandbox"
}
}
Langkah selanjutnya adalah memodifikasi konfigurasi instance yang baru dibuat. Buka my.cnf untuk masing-masing dan hash variabel bind_address:
[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox 13086 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox 13805 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox 14065 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1
Kemudian instal mysql pada master node Anda dan mulai ulang semua instance menggunakan skrip restart_all.
[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started
Dari ClusterControl, kita perlu melakukan 'Impor' untuk setiap instance karena kita perlu mengisolasinya dalam grup yang berbeda untuk membuatnya berfungsi.
ClusterControl mengimpor server yang adaUntuk node1, masukkan informasi berikut di ClusterControl> Import:
ClusterControl mengimpor server yang adaPastikan untuk menempatkan port yang tepat (berbeda untuk instance yang berbeda) dan host (sama untuk semua instance).
Anda dapat memantau perkembangannya dengan mengeklik ikon Aktivitas/Pekerjaan di menu atas.
ClusterControl mengimpor detail server yang adaAnda akan melihat node1 di UI setelah ClusterControl menyelesaikan pekerjaan. Ulangi langkah yang sama untuk menambahkan dua node lain dengan port 15025 dan 15026. Anda akan melihat sesuatu seperti di bawah ini setelah ditambahkan:
Dasbor Kontrol ClusterIni dia. Kami baru saja menambahkan instance MySQL kami yang ada ke ClusterControl untuk pemantauan. Selamat memantau!
PS.:Untuk memulai ClusterControl, klik di sini!