MySQL Router e' il tool che sostituisce funzionalmente
MySQL Proxy
che, come il nome suggerisce, era un proxy di un server MySQL
ora non piu' supportato.
MySQL Router e' uno dei componenti dell'architettura
dell'InnoDB Cluster.
MySQL Router non ha un linguaggio di programmazione
come MySQL Proxy ma utilizza semplici direttive contenute in file di configurazione
ed e' facilmente utilizzabile per indirizzare gli accessi
verso un database MySQL in replica.
Il documento e' aggiornato alla versione 2.1.3, versione disponibile al momento del rilascio in GA di InnoDB Cluster [NdE 12 Aprile 2017].
Nel seguito sono riportate alcune informazioni di interesse organizzate in paragrafi specifici: Introduzione, Configurazione, Avvio, Utilizzo, ...
MySQL Router e' un tool
che opera come proxy di un server MySQL.
In pratica un utente o un'applicazione si collegano a MySQL Router
come se dovessero connettersi ad server MySQL e vengono rediretti
ai server MySQL definiti nel file di configurazione di MySQL Router.
E' possibile installare MySQL Router su qualsiasi sistema ma la configurazione consigliata, per diminuire la latenza e fornire il massimo dell'affidabilita', e' quella di installarlo sugli Application Server.
Sono disponibili diverse modalita' di routing adatte alle connessioni in scrittura/lettura o in sola lettura come spesso avviene nelle configurazioni di MySQL in replica.
Effettuata l'installazione, che generalmente viene svolta copiando i binari
relativi alla piattaforma utilizzata o utilizzando i repository
scaricati dal sito ufficiale,
e' necessario effettuare la configurazione.
Il file di configurazione di default e' /etc/mysqlrouter/mysqlrouter.conf
[NdA era .ini fino alla versione 2.0]
e contiene le semplici direttive di impostazione di SQL Router.
Ecco la configurazione per effettuare una redirect:
[DEFAULT] logging_folder=/opt/routers/myrouter/log runtime_folder=/opt/routers/myrouter/run data_folder=/opt/routers/myrouter/data keyring_path=/opt/routers/router/data/keyring master_key_path=/opt/routers/myrouter/mysqlrouter.key [logger] level = INFO [routing:basic_redirect] bind_address = 0.0.0.0 bind_port = 3307 mode = read-write destinations = db1:3306,db3:3306,db3:3306
Con questa configurazione MySQL Router risulta in ascolto sulla porta 3307 e ridirige verso 3 diversi nodi che ospitano un database MySQL attivo sulla porta 3306.
Per ottenere un livello maggiore di logging e' possibile impostare il relativo parametro level = DEBUG. Il parametro mode determina la schedulazione: nel caso read-only viene utilizzato il round-robin mentre con il valore read-write viene utilizzato il first-availabile. Quando il parametro bind_address e' impostato a 0.0.0.0 il proxy e' in ascolto su tutti gli indirizzi; per accettare connessioni solo da un IP o da localhost basta indicare l'IP desiderato.
Piu' complessa e' la configurazione necessaria per operare con MySQL InnoDB Cluster ma in questo caso si utilizza il comando di bootstrap [NdA funzionalita' introdotta dalla versione 2.1] per far generare automaticamente la configurazione:
La configurazione creata e' la seguente:
# File automatically generated during MySQL Router bootstrap [DEFAULT] name=system user=mysqlrouter logging_folder=/opt/routers/myrouter/log runtime_folder=/opt/routers/myrouter/run data_folder=/opt/routers/myrouter/data keyring_path=/opt/routers/router/data/keyring master_key_path=/opt/routers/myrouter/mysqlrouter.key [logger] level = DEBUG [metadata_cache:myCluster] router_id=3 bootstrap_server_addresses=mysql://db01.xenialab.it:3306,mysql://db02.xenialab.it:3306,mysql://db03.xenialab.it:3306 user=mysql_router3_xxxxxxxxxxxx metadata_cluster=myCluster ttl=300 [routing:myCluster_default_rw] bind_address=0.0.0.0 bind_port=6446 destinations=metadata-cache://myCluster/default?role=PRIMARY mode=read-write protocol=classic [routing:myCluster_default_ro] bind_address=0.0.0.0 bind_port=6447 destinations=metadata-cache://myCluster/default?role=SECONDARY mode=read-only protocol=classic [routing:myCluster_default_rr] bind_address=0.0.0.0 bind_port=6448 destinations=metadata-cache://myCluster/default?role=ALL mode=read-only protocol=classic [routing:myCluster_default_x_rw] bind_address=0.0.0.0 bind_port=64460 destinations=metadata-cache://myCluster/default?role=PRIMARY mode=read-write protocol=x [routing:myCluster_default_x_ro] bind_address=0.0.0.0 bind_port=64470 destinations=metadata-cache://myCluster/default?role=SECONDARY mode=read-only protocol=x
La configurazione generata dal comando di boostrap e' completa e puo' essere utilizzata
senza variazioni semplicemente attivando il proxy con:
nohup mysqlrouter &
Nel caso di configurazione Multi Primary la configurazione ricavata e' leggermente piu' semplice: sono presenti solo le sezioni di routing read-write.
E' possibile utilizzare il parametro --directory in fase di bootstrap e --config (ed anche --extra-config) i fase di esecuzione per definire piu' configurazioni ed istanze di MySQL Router.
Anche se e' possibile attivare manualmente MySQL Router e' consigliabile attivarlo come servizio. Su RH/OL/CentOS 7.x i comandi sono:
Connettersi ad un database MySQL utilizzando MySQL Router e' banale:
Per determinare su quale DB si e' stati indirizzati e' possibile utilizzare questa semplice query:
Il sito ufficiale MySQL contiene tutta la relativa documentazione; e' utile anche la documentazione relativa alla mysqlsh.
Titolo: MySQL Router
Livello: Avanzato
Data:
1 Aprile 2016
Versione: 1.0.1 - 12 Aprile 2017
Autore: mail [AT] meo.bogliolo.name