Table des matières

Introduction

MariaDB MaxScale est un proxy de base de données qui étend la haute disponibilité, l'évolutivité et la sécurité du serveur MariaDB tout en simplifiant le développement d'applications en le découplant de l'infrastructure de base de données sous-jacente.

MariaDB MaxScale est conçu avec une architecture extensible pour supporter des plugins, étendant ses fonctionnalités au-delà de l'équilibrage de charge transparent pour devenir, par exemple, un pare-feu de base de données. Grâce à des plugins intégrés pour plusieurs routeurs, filtres et protocoles, MariaDB MaxScale peut être configuré pour transmettre des demandes de base de données et modifier les réponses de la base de données en fonction des exigences commerciales et techniques - par exemple, pour masquer les données sensibles ou les lectures de balances.

Architecture

Pré-requis

1 Cluster MariaDB

1 Server maxscale

Installation

Nous allons tout d'abord ajouter le repositorie officiel pour bénéficier du package “maxscale”.

$ 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

Une fois le repositorie déclaré sur le server, on lance l'installation de maxscale.

$ yum makecache fast
$ yum install -y maxscale

Configuration de MaxScale

Avant de configurer “maxscale”, il va nous falloir créer l'utilisateur (maxscale) ainsi que positionner certains droits sur le cluster de base de données MariaDB.

Création des comptes pour “maxScale” pour le monitoring et pour les applications.

MariaDB [(none)]> CREATE USER 'maxscale'@'%' IDENTIFIED BY 'maxscalepassword';
MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscale'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscale'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscale'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%';
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscale'@'%';

Maintenant, il nous reste plus qu'a configurer “maxscale” et ajouter les nœuds du cluster MariaDB.

Éditer le fichier “/etc/maxscale/maxscale.cnf”

# MaxScale documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-24/

# Global parameters
#
# Complete list of configuration options:
# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-maxscale-configuration-guide/

[maxscale]
threads=auto

# LOG
#
logdir=/var/log/maxscale/
syslog=0 #log to syslog
maxlog=1 #log to /var/log/maxscale
log_warning=1 #log warnings
log_notice=1 #log notices
#log_info=1 #log info
#log_debug=1 #log full debug for dev only


# Server definitions
#
# Set the address of the server to the network
# address of a MariaDB server.
#

[server1]
type=server
address=192.168.1.214
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=192.168.1.66
port=3306
protocol=MariaDBBackend

[server3]
type=server
address=192.168.1.84
port=3306
protocol=MariaDBBackend

# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MariaDB Monitor documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-monitor/

[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2,server3
user=maxscale
password=123
monitor_interval=2000

# Service definitions
#
# Service Definition for a read-only service and
# a read/write splitting service.
#

# ReadConnRoute documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-24-readconnroute/

[Read-Only-Service]
type=service
router=readconnroute
servers=server1,server2,server3
user=maxscale
password=123
router_options=slave

# ReadWriteSplit documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-24-readwritesplit/

[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=maxscale
password=123
master_failure_mode=fail_on_write
disable_sescmd_history=true
max_slave_connections=100%

# Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
#

[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=3306

[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=3307

Une fois “maxscale” configuré, on démarre le service et on l'active au lancement du système.

$ systemctl enabled maxscale.service
$ systemctl start maxscale.service

On vérifie l'état des services.

[root@maxscale maxscale]# maxctrl list services
┌────────────────────┬────────────────┬─────────────┬───────────────────┬───────────────────────────┐
│ Service            │ Router         │ Connections │ Total Connections │ Servers                   │
├────────────────────┼────────────────┼─────────────┼───────────────────┼───────────────────────────┤
│ Read-Only-Service  │ readconnroute  │ 0           │ 0                 │ server1, server2, server3 │
├────────────────────┼────────────────┼─────────────┼───────────────────┼───────────────────────────┤
│ Read-Write-Service │ readwritesplit │ 0           │ 0                 │ server1, server2, server3 │
└────────────────────┴────────────────┴─────────────┴───────────────────┴───────────────────────────┘

On vérifie l'état des servers.

[root@maxscale maxscale]# maxctrl list servers
┌─────────┬───────────────┬──────┬─────────────┬─────────────────┬──────┐
│ Server  │ Address       │ Port │ Connections │ State           │ GTID │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼──────┤
│ server1 │ 192.168.1.214 │ 3306 │ 0           │ Master, Running │      │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼──────┤
│ server2 │ 192.168.1.66  │ 3306 │ 0           │ Running         │      │
├─────────┼───────────────┼──────┼─────────────┼─────────────────┼──────┤
│ server3 │ 192.168.1.84  │ 3306 │ 0           │ Running         │      │
└─────────┴───────────────┴──────┴─────────────┴─────────────────┴──────┘

Annexe

https://mariadb.com/kb/en/mariadb-maxscale-24/

https://mariadb.com/kb/en/mariadb-maxscale-24-maxctrl/

https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-maxscale-installation-guide/

https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-maxscale-configuration-guide/

https://mariadb.com/kb/en/mariadb-maxscale-24-maxscale-failover-with-keepalived-and-maxctrl/

https://mariadb.com/kb/en/mariadb-maxscale-24-automatic-failover-with-mariadb-monitor/

https://mariadb.com/resources/blog/database-firewall-filter-in-maxscale-1-4-1/