Прокси-сервер MariaDB MaxScale

Создав кластер на базе MariaDB Galera задаёшься вопросом: что делать с тремя IP-адресами?

Принято решение поставить специализированный прокси-сервер для этих целей. Подходящие кандидаты:

  1. Oracle MySQL Proxy — проект почти не развивается;
  2. Severalnines ClusterControl — интересный продукт с красивой графической оболочкой, но работающий на уровне IP-трафика, что снижает число доступных плюшек;
  3. Galera Load Balancer — проект похоже заброшен;
  4. ProxySQL — нашёл только недавно (намного позже написания данной статьи), по описанию крут, но руки до него не дошли;
  5. MariaDB MaxScale — от создателей MariaDB.

Для начала решил поиграться с последним продуктом.

Ставится давольно просто:

  1. Зарегистрироваться на сайте MariaDB;
  2. Перейти в секцию Download;
  3. Установить репозиторий и сам maxscale согласно инструкции на сайте.

Традиционно в начале понижаем уровень безопасности:

# setenforce 0
# systemctl stop firewalld

Приводим настройки /etc/maxscale.cnf к следующему виду:

[maxscale]
threads=4
[Galera Monitor]
type=monitor
module=galeramon
servers=server1,server2,server3
user=sst_user
passwd=dbpass
monitor_interval=10000
disable_master_failback=1
[qla]
type=filter
module=qlafilter
options=/tmp/QueryLog
[fetch]
type=filter
module=regexfilter
match=fetch
replace=select
[hint]
type=filter
module=hintfilter
[Read Connection Router]
type=service
router=readconnroute
servers=server1,server2,server3
user=sst_user
passwd=dbpass
router_options=slave
[RW Split Router]
type=service
router=readwritesplit
servers=server1,server2,server3
user=sst_user
passwd=dbpass
max_slave_connections=100%
router_options=slave_selection_criteria=LEAST_CURRENT_OPERATIONS
[Debug Interface]
type=service
router=debugcli
[CLI]
type=service
router=cli
[Read Connection Listener]
type=listener
service=Read Connection Router
protocol=MySQLClient
port=4008
socket=/var/lib/maxscale/readconn.sock
[RW Split Listener]
type=listener
service=RW Split Router
protocol=MySQLClient
port=3306
[Debug Listener]
type=listener
service=Debug Interface
protocol=telnetd
address=127.0.0.1
port=4442
[CLI Listener]
type=listener
service=CLI
protocol=maxscaled
port=6603
[server1]
type=server
address=10.0.0.1
port=3306
protocol=MySQLBackend
[server2]
type=server
address=10.0.0.2
port=3306
protocol=MySQLBackend
[server3]
type=server
address=10.0.0.3
port=3306
protocol=MySQLBackend

В итоге получили следующие данные по портам:

  • 3306 — MaxScale автоматически назначил один из серверов мастером и будет направлять на него все запросы на запись, а остальным запросы на чтение;
  • 4008 — работает в режиме round-robin;

Если зайти локально по ssh, можно получить полезную информацию о состоянии кластера:

# maxadmin -u admin
Password: mariadb
MaxScale> show servers

При использовании прокси-серверов авторизация на серверах БД идёт с прокси-сервера, а значит это надо предусмотреть при настройках пользователей в БД.