Не простой прокси
Когда речь заходит о MaxScale, первый рефлекс — сравнить его с HAProxy или классическим балансировщиком нагрузки. Это фундаментальная ошибка. MaxScale — это не прокси уровня 4 (TCP). Это прокси уровня 7, который понимает протокол SQL. Он парсит запросы, анализирует их тип и принимает интеллектуальные решения о маршрутизации.
Разница сравнима с той, что существует между почтальоном, разносящим почту по адресам (L4), и помощником, который читает ваши письма, сортирует их по приоритету, фильтрует спам и показывает только то, что актуально (L7). MaxScale читает SQL.
Аутентификация: больше, чем просто пароль
MaxScale поддерживает полный набор механизмов аутентификации:
- MariaDBAuth: нативная аутентификация MariaDB / MySQL с локальным кэшем учётных данных
- PAM: интеграция с корпоративными каталогами (LDAP, Active Directory) через Pluggable Authentication Modules
- GSSAPI/Kerberos: SSO-аутентификация для сред Windows / Active Directory
- Ed25519: аутентификация по открытому ключу от MariaDB, более безопасная, чем классический хеш SHA
Аутентификация управляется на уровне listener. Поэтому можно использовать разные методы аутентификации на разных портах: PAM для внутренних приложений, Ed25519 для административных подключений, MariaDBAuth для устаревшей совместимости.
Протоколы: не только SQL
MaxScale полиглот. Он поддерживает несколько входных и выходных протоколов:
MariaDBClient / MariaDBBackend
Нативный протокол MariaDB / MySQL. Это основной случай использования: приложения подключаются к MaxScale как к стандартному серверу баз данных.
CDC / AVRO
Протокол Change Data Capture позволяет стримить изменения binlog в формате AVRO. Это идеальный инструмент для построения конвейеров данных в реальном времени, наполнения data lake или синхронизации внешних систем.
NoSQL / MongoDB
MaxScale может предоставлять интерфейс, совместимый с MongoDB. Приложения, работающие по протоколу MongoDB, могут взаимодействовать с базой MariaDB через MaxScale. Это нишевая, но мощная функциональность для миграций.
PostgreSQL (экспериментальный)
Поддержка входящего протокола PostgreSQL находится в разработке. Цель — позволить приложениям PostgreSQL подключаться к бэкендам MariaDB.
Мониторы: интеллект топологии
Мониторы — это глаза MaxScale. Они регулярно опрашивают бэкенд-серверы для автоматического обнаружения топологии и состояния здоровья кластера.
mariadbmon
Основной монитор для топологий репликации MariaDB / MySQL. Он обнаруживает мастер, слейвы, реле и состояние репликации. Он управляет автоматическим отказоустойчивым переключением: если мастер падает, слейв повышается, а остальные слейвы перенастраиваются для репликации с нового мастера.
galeramon
Монитор, предназначенный для кластеров Galera. Он обнаруживает состояние кластера (Primary, Non-Primary, Disconnected), количество узлов, state UUID и управляет маршрутизацией соответственно.
Маршрутизаторы: интеллект маршрутизации
Маршрутизаторы — это мозг MaxScale. Они решают, куда отправить каждый запрос в зависимости от его типа и обнаруженной топологии.
readwritesplit
Наиболее используемый маршрутизатор. Запросы на запись (INSERT, UPDATE, DELETE, CREATE и т.д.) отправляются на мастер. Запросы на чтение (SELECT) распределяются по слейвам. Транзакции целиком отправляются на мастер.
readconnroute
Более простой маршрутизатор, который распределяет соединения (не запросы) по доступным серверам. Полезен для интенсивного чтения, не требующего разделения чтения/записи на уровне запроса.
schemarouter
Маршрутизирует запросы к серверу, который хостит запрашиваемую схему. Идеален для шардинга по базам данных: client_europe на сервере A, client_asia на сервере B.
binlogrouter
Превращает MaxScale в реле репликации. MaxScale ведёт себя как слейв мастера, а настоящие слейвы подключаются к MaxScale вместо мастера. Это снижает нагрузку на мастер и позволяет централизовать распределение binlog.
kafkarouter (CDC)
Отправляет события binlog в Apache Kafka. Каждое изменение базы публикуется как Kafka-сообщение, позволяя потребителям реагировать в реальном времени.
Фильтры: более 15 модулей
Фильтры перехватывают и трансформируют SQL-поток между клиентом и сервером. MaxScale предлагает более 15:
- qlafilter: полное журналирование запросов (аудит)
- regexfilter: переписывание запросов по регулярным выражениям
- cache: кэш запросов с автоматической инвалидацией
- throttlefilter: ограничение скорости запросов по пользователю
- masking: динамическое маскирование конфиденциальных данных (email-адреса, номера карт)
- topfilter: сбор самых медленных запросов
- commentfilter: внедрение SQL-комментариев для трейсинга
- tee: дублирование потока на второй бэкенд (теневое тестирование)
- namedserverfilter: маршрутизация к конкретному серверу на основе правил
- hintfilter: интерпретация SQL-хинтов для принудительной маршрутизации
- luafilter: выполнение Lua-скриптов для пользовательской логики
- binlogfilter: фильтрация событий binlog по схеме или таблице
Развёртывание: готов к Docker и Kubernetes
MaxScale доступен как официальный Docker-образ:
docker run -d --name maxscale \
-v /path/to/maxscale.cnf:/etc/maxscale.cnf \
-p 4006:4006 -p 8989:8989 \
mariadb/maxscale:latest
Для Kubernetes MaxScale развёртывается как StatefulSet или Deployment в зависимости от сценария. REST API упрощает интеграцию с health checks и readiness-пробами.
Бизнес-ценность
Помимо технических возможностей, MaxScale приносит конкретную бизнес-ценность:
- Высокая доступность: автоматическое переключение за несколько секунд, прозрачное для приложения
- Масштабируемость чтения: добавление слейвов без изменения кода приложения
- Безопасность: SQL-фильтрация, маскирование данных, централизованная аутентификация
- Наблюдаемость: журналирование, метрики, REST API для мониторинга
- Упрощение миграции: поддержка нескольких протоколов для технологических переходов
MaxScale — это не простой reverse proxy. Это слой интеллектуальной инфраструктуры, который встраивается между приложениями и базами MariaDB / MySQL, обеспечивая устойчивость, безопасность и гибкость без изменения ни одной строки кода приложения.
Эта статья была первоначально опубликована на Medium.
Комментарии (0)
Комментариев пока нет.
Оставить комментарий