hostprofi.ru
Подобрать хостинг
Термин·буква P

ProxySQL

краткое определение

ProxySQL — высокопроизводительный SQL-прокси для MySQL и MariaDB: анализирует запросы и направляет записи на мастер, а чтения — на реплики (read/write splitting), поддерживает пул соединений и кэширование запросов.

ProxySQL — open-source прокси-сервер, понимающий протокол MySQL. Размещается между приложением и кластером баз данных, прозрачно перехватывая SQL-трафик. Приложение подключается к ProxySQL как к обычному MySQL-серверу, а ProxySQL самостоятельно решает, на какой backend-сервер направить запрос — и всё это без изменения кода приложения.

Как работает

Ключевые возможности ProxySQL:

  • Read/Write Splitting — операции INSERT, UPDATE, DELETE, REPLACE автоматически направляются на primary (мастер), а SELECT — на один из read-реплик по round-robin или взвешенному алгоритму. Настраивается через правила маршрутизации (mysql_query_rules) с использованием регулярных выражений.
  • Пул соединений (Connection Pooling) — ProxySQL поддерживает постоянные соединения к backend-серверам. Вместо 1000 соединений от приложения к БД — 20–50 постоянных соединений ProxySQL к MySQL, что снижает overhead рукопожатий.
  • Кэширование запросовSELECT-запросы, совпадающие с правилом, кэшируются в памяти ProxySQL. TTL настраивается отдельно для каждого правила.
  • Failover — при падении мастера ProxySQL может автоматически повысить реплику (в связке с MySQL Group Replication или Orchestrator). Мониторинг backend'ов — встроенный (proxysql_scheduler).
  • Мультиплексирование — одно backend-соединение обслуживает несколько клиентских соединений последовательно (при отсутствии транзакций).

Конфигурация ProxySQL ведётся через SQL-интерфейс (порт 6032). Все изменения применяются в runtime без перезапуска: LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;.

ProxySQL поддерживает Galera Cluster, Percona XtraDB Cluster, MySQL Group Replication. Для PostgreSQL аналогом является PgBouncer.

История

ProxySQL создан Рене Кэннаолой (René Cannao) и впервые опубликован на GitHub в 2015 году. Написан на C++. В 2016 году вышла версия 1.0. ProxySQL 2.0 (2019) добавил поддержку MySQL 8.0, GTID и улучшенный мониторинг. К 2020 году ProxySQL стал стандартным компонентом высоконагруженных MySQL-инфраструктур в компаниях типа Booking.com и Percona.

На что обращать внимание

ProxySQL не понимает семантику приложения: если запрос содержит SELECT ... FOR UPDATE или находится в явной транзакции — он направляется на мастер автоматически. Однако неявные транзакции (autocommit=0 у ORM) могут неожиданно блокировать read/write splitting. Мониторьте задержку репликации: при использовании replication_lag_action=pause запросы к запаздывающей реплике автоматически переводятся на мастер, но это создаёт нагрузку. ProxySQL сам должен быть высокодоступным — типовая схема: два ProxySQL-узла за keepalived с Virtual IP.

История ProxySQL

ProxySQL создан Рене Кэнновой в 2015 году как высокопроизводительный прокси для MySQL. ProxySQL 2.0 вышел в 2019 году с поддержкой MySQL 8.0 и шифрованием. К 2023 году используется в LinkedIn, GitHub, Dropbox. ProxySQL написан на C++ и обрабатывает более 1 миллиона запросов в секунду на одном сервере. Администрирование через MySQL-совместимый интерфейс на порту 6032. Конкурирует с MaxScale (MariaDB), MySQL Router, HAProxy (только L4).

Возможности ProxySQL

  • Read/Write splitting: SELECT → реплика, INSERT/UPDATE/DELETE → мастер.
  • Connection pooling: объединение соединений для снижения нагрузки на MySQL.
  • Query routing: направление запросов в разные бэкенды по правилам regex.
  • Query caching: кеширование SELECT-запросов в памяти.
  • Failover: автоматическое переключение при падении мастера.

Практическое применение на хостинге

На VPS ProxySQL устанавливается между приложением и MySQL-сервером. Конфигурация через SQL-интерфейс: INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES(0,'db-master',3306). ProxySQL Admin (порт 6032) — управляющий интерфейс. Мониторинг через таблицы stats.stats_mysql_query_digest — показывает самые медленные запросы. В связке с Galera Cluster обеспечивает высокодоступный MySQL без простоев.

Другие термины