Il existe différentes raisons d'ajouter un équilibreur de charge entre votre application et votre base de données. Si vous avez un trafic élevé (et que vous souhaitez équilibrer le trafic entre différents nœuds de base de données) ou si vous souhaitez utiliser l'équilibreur de charge comme point de terminaison unique (donc en cas de basculement, cet équilibreur de charge fera face à ce problème en envoyant le trafic vers le nœud disponible/sain.) Il se peut également que vous souhaitiez utiliser différents ports pour écrire et lire des données dans votre base de données.
Dans tous ces cas, un équilibreur de charge vous sera utile, et si vous avez un cluster MariaDB, une option pour cela consiste à utiliser MaxScale qui est un proxy de base de données pour les bases de données MariaDB.
Dans ce blog, nous allons vous montrer comment l'installer et le configurer manuellement, et comment ClusterControl peut vous aider dans cette tâche. Pour cet exemple, nous utiliserons un cluster de réplication MariaDB avec 1 nœud maître et 1 nœud esclave, et CentOS8 comme système d'exploitation.
Comment installer MaxScale
Nous supposerons que votre base de données MariaDB est opérationnelle, ainsi qu'une machine (virtuelle ou physique) pour installer MaxScale. Nous vous recommandons d'utiliser un hôte différent, donc en cas de défaillance du maître, MaxScale peut basculer vers le nœud esclave, sinon, MaxScale ne peut prendre aucune mesure si le serveur sur lequel il s'exécute tombe en panne.
Il existe différentes façons d'installer MaxScale, dans ce cas, nous utiliserons les référentiels MariaDB. Pour l'ajouter au serveur MaxScale, vous devez exécuter :
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
[info] Adding trusted package signing keys...
[info] Successfully added trusted package signing keys
Maintenant, installez le package MaxScale :
$ yum install maxscale
Maintenant que votre nœud MaxScale est installé, avant de commencer, vous devez le configurer.
Comment configurer MaxScale
Alors que MaxScale effectue des tâches telles que l'authentification, la surveillance, etc., vous devez créer un utilisateur de base de données avec certains privilèges spécifiques :
MariaDB [(none)]> CREATE USER 'maxscaleuser'@'%' IDENTIFIED BY 'maxscalepassword';
MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscaleuser'@'%';
Gardez à l'esprit que les versions 10.2.2 à 10.2.10 de MariaDB nécessitent également :
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Maintenant que l'utilisateur de la base de données est prêt, voyons les fichiers de configuration. Lorsque vous installez MaxScale, le fichier maxscale.cnf sera créé sous /etc/. Il existe plusieurs variables et différentes manières de le configurer, voyons donc un exemple :
$ cat /etc/maxscale.cnf
# Global parameters
[maxscale]
threads = auto
log_augmentation = 1
ms_timestamp = 1
syslog = 1
# Server definitions
[server1]
type=server
address=192.168.100.126
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=192.168.100.127
port=3306
protocol=MariaDBBackend
# Monitor for the servers
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=maxscaleuser
password=maxscalepassword
monitor_interval=2000
# Service definitions
[Read-Only-Service]
type=service
router=readconnroute
servers=server2
user=maxscaleuser
password=maxscalepassword
router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=maxscaleuser
password=maxscalepassword
# Listener definitions for the services
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
Dans cette configuration, nous avons 2 nœuds de base de données, 192.168.100.126 (Maître) et 192.168.100.127 (Esclave), comme vous pouvez le voir dans la section Définition des serveurs.
Nous avons également 2 services différents, un pour la lecture seule, où se trouve le nœud esclave, et un autre pour la lecture-écriture où se trouve le nœud maître.
Enfin, nous avons 2 écouteurs, un pour chaque service. L'écouteur en lecture seule, à l'écoute sur le port 4008, et celui en lecture-écriture, à l'écoute sur le port 4006.
Ceci est un fichier de configuration de base. Si vous avez besoin de quelque chose de plus spécifique, vous pouvez suivre la documentation officielle de MariaDB.
Vous êtes maintenant prêt à le démarrer, alors lancez :
$ systemctl start maxscale.service
Et vérifiez :
$ maxctrl list services
ff $ maxctrl list servers
Vous pouvez trouver une liste de commandes maxctrl ici, ou vous pouvez même utiliser maxadmin pour le gérer.
Testons maintenant la connexion. Pour cela, vous pouvez essayer d'accéder à votre base de données en utilisant l'adresse IP MaxScale et le port que vous souhaitez tester. Dans notre cas, le trafic sur le port 4006 doit être envoyé au serveur1, et le trafic sur le port 4008 au serveur2.
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4006 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server1 |
+------------+
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4008 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server2 |
+------------+
Ça marche !
Comment déployer MaxScale avec ClusterControl
Voyons maintenant comment vous pouvez utiliser ClusterControl pour simplifier cette tâche. Pour cela, nous supposerons que vous avez ajouté votre cluster MariaDB à ClusterControl.
Allez dans ClusterControl -> Sélectionnez le cluster MariaDB -> Actions du cluster -> Ajouter un équilibreur de charge -> MaxScale.
Ici, vous pouvez déployer un nouveau nœud MaxScale ou vous pouvez également importer un nœud existant une. Si vous le déployez, vous devez ajouter l'adresse IP ou le nom d'hôte, les informations d'identification MaxScale de l'administrateur et de l'utilisateur, le nombre de threads et les ports (écriture et lecture seule). Vous pouvez également spécifier le nœud de base de données que vous souhaitez ajouter à la configuration MaxScale.
Vous pouvez surveiller la tâche dans la section Activité de ClusterControl. Une fois terminé, vous aurez un nouveau nœud MaxScale dans votre cluster MariaDB.
Et exécuter les commandes MaxScale à partir de l'interface utilisateur ClusterControl sans avoir besoin d'accéder au serveur via SSH.
Cela semble plus facile que de le déployer manuellement, non ?
Conclusion
Avoir un équilibreur de charge est une bonne solution si vous souhaitez équilibrer ou diviser votre trafic, ou même pour des actions de basculement, et MaxScale, en tant que produit MariaDB, est une bonne option pour les bases de données MariaDB.
L'installation est facile, mais la configuration et l'utilisation peuvent être difficiles s'il s'agit de quelque chose de nouveau pour vous. Dans ce cas, vous pouvez utiliser ClusterControl pour le déployer, le configurer et le gérer plus facilement.