Mysql
 sql >> Database >  >> RDS >> Mysql

Come monitorare più istanze MySQL in esecuzione sulla stessa macchina - Suggerimenti e trucchi per ClusterControl

Richiede ClusterControl 1.6 o successivo. Si applica a istanze/cluster basati su MySQL.

In alcune occasioni, potresti voler eseguire più istanze di MySQL su una singola macchina. Potresti voler consentire a diversi utenti di accedere ai propri server MySQL che gestiscono autonomamente, oppure potresti voler testare una nuova versione di MySQL mantenendo indisturbata una configurazione di produzione esistente.

È possibile utilizzare un diverso binario del server MySQL per istanza o utilizzare lo stesso binario per più istanze (o una combinazione dei due approcci). Ad esempio, potresti eseguire un server da MySQL 5.6 e uno da MySQL 5.7, per vedere come le diverse versioni gestiscono un determinato carico di lavoro. Oppure potresti eseguire più istanze dell'ultima versione di MySQL, ognuna gestendo un diverso set di database.

Indipendentemente dal fatto che utilizzi file binari del server distinti, ciascuna istanza eseguita deve essere configurata con valori univoci per diversi parametri operativi. Ciò elimina il potenziale conflitto tra le istanze. Puoi utilizzare MySQL Sandbox per creare più istanze MySQL. Oppure puoi utilizzare mysqld_multi disponibile in MySQL per avviare o interrompere un numero qualsiasi di processi mysqld separati in esecuzione su diverse porte TCP/IP e socket UNIX.

In questo post del blog, ti mostreremo come configurare ClusterControl per monitorare più istanze MySQL in esecuzione su un host.

Limitazione del controllo del cluster

Al momento della scrittura, ClusterControl non supporta il monitoraggio di più istanze su un host per gruppo di cluster/server. Presuppone le seguenti best practice:

  • Solo un'istanza MySQL per host (server fisico o macchina virtuale).
  • La ridondanza dei dati MySQL deve essere configurata su N+1 server.
  • Tutte le istanze MySQL vengono eseguite con una configurazione uniforme nel gruppo di cluster/server, ad esempio porta di ascolto, log degli errori, datadir, basedir, socket sono identici.

Per quanto riguarda i punti sopra menzionati, ClusterControl presuppone che in un gruppo di cluster/server:

  • Le istanze MySQL sono configurate in modo uniforme in un cluster; stessa porta, stessa posizione dei registri, directory di base/dati e altre configurazioni critiche.
  • Controlla, gestisce e distribuisce solo un'istanza MySQL per host.
  • Il client MySQL deve essere installato sull'host e disponibile nel percorso eseguibile per l'utente del sistema operativo corrispondente.
  • Il MySQL è legato a un indirizzo IP raggiungibile dal nodo ClusterControl.
  • Continua a monitorare le statistiche dell'host, ad esempio CPU/RAM/disco/rete per ciascuna istanza MySQL individualmente. In un ambiente con più istanze per host, dovresti aspettarti statistiche sull'host ridondanti poiché monitora lo stesso host più volte.

Con i presupposti precedenti, le seguenti funzionalità ClusterControl non funzionano per un host con più istanze:

Backup - Percona Xtrabackup non supporta più istanze per host e mysqldump eseguito da ClusterControl si connette solo al socket predefinito.

Gestione dei processi - ClusterControl utilizza lo standard "pgrep -f mysqld_safe" per verificare se MySQL è in esecuzione su quell'host. Con più istanze MySQL, questo è un approccio falso positivo. Pertanto, il ripristino automatico per il nodo/cluster non funzionerà.

Gestione della configurazione - ClusterControl fornisce la directory di configurazione standard di MySQL. Di solito risiede in /etc/ e /etc/mysql.

Soluzione alternativa

Il monitoraggio di più istanze MySQL su una macchina è ancora possibile con ClusterControl con una semplice soluzione alternativa. Ogni istanza MySQL deve essere trattata come una singola entità per gruppo di server.

In questo esempio, abbiamo 3 istanze MySQL su un singolo host creato con MySQL Sandbox:

ClusterControl che monitora più istanze sullo stesso host

Abbiamo creato le nostre istanze MySQL utilizzando i seguenti comandi:

$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

Per impostazione predefinita, MySQL Sandbox crea istanze mysql che ascoltano 127.0.0.1. È necessario configurare ogni nodo in modo appropriato per fargli ascoltare tutti gli indirizzi IP disponibili. Ecco il riepilogo delle nostre istanze MySQL nell'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"
    }
}

Il passaggio successivo consiste nel modificare la configurazione delle istanze appena create. Vai a my.cnf per ciascuno di essi e hash bind_address variabile:

[[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

Quindi installa mysql sul tuo nodo principale e riavvia tutte le istanze usando lo script 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

Da ClusterControl, dobbiamo eseguire l'"Importazione" per ogni istanza poiché dobbiamo isolarle in un gruppo diverso per farlo funzionare.

ClusterControl importa il server esistente

Per il nodo1, immettere le seguenti informazioni in ClusterControl> Importa:

ClusterControl importa il server esistente

Assicurati di inserire le porte appropriate (diverse per le diverse istanze) e l'host (uguale per tutte le istanze).

Puoi monitorare lo stato di avanzamento facendo clic sull'icona Attività/Lavori nel menu in alto.

ClusterControl importa i dettagli del server esistente

Vedrai node1 nell'interfaccia utente una volta che ClusterControl ha terminato il lavoro. Ripeti gli stessi passaggi per aggiungere altri due nodi con le porte 15025 e 15026. Una volta aggiunti, dovresti vedere qualcosa di simile al seguente:

Dashboard ClusterControl

Ecco qua. Abbiamo appena aggiunto le nostre istanze MySQL esistenti in ClusterControl per il monitoraggio. Buon monitoraggio!

PS.:Per iniziare con ClusterControl, fai clic qui!