В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик b cейчас я его и настрою.
Обновим систему
# apt update
# apt upgrade -y
Установка ProxySQL
Добавляем репозитарий и устанавливаем пакет.
# curl -fsSL https://repo.proxysql.com/ProxySQL/repo_pub_key | sudo gpg --dearmor -o /usr/share/keyrings/proxysql-archive-keyring.gpg
# echo "deb [signed-by=/usr/share/keyrings/proxysql-archive-keyring.gpg] https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/$(lsb_release -sc)/ ./" | sudo tee /etc/apt/sources.list.d/proxysql.list
# apt-get update
# apt-get install proxysql
Проверка установки
Убедитесь, что ProxySQL установлен и работает:
# systemctl status proxysql
Если сервис не запущен, запустите его:
# systemctl start proxysql
# systemctl enable proxysql
Подключение к интерфейсу администрирования ProxySQL
ProxySQL имеет два интерфейса:
- Admin interface (по умолчанию порт 6032) — для настройки;
- MySQL interface (по умолчанию порт 6033) — для клиентских подключений.
Подключитесь к интерфейсу администрирования:
# mysql -u admin -p -h 127.0.0.1 -P 6032
Пароль по умолчанию — admin.
Настройка backend-серверов MySQL
Внутри интерфейса администрирования добавьте серверы MySQL, к которым будет проксировать запросы.
- Посмотрите текущие серверы:
SELECT * FROM mysql_servers;
- Добавьте ваш MySQL-сервер:
INSERT INTO mysql_servers (hostgroup_id, hostname, port, max_connections) VALUES (1, '127.0.0.1', 3306, 1000);
- Примените изменения:
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
Настройка пользователей и прав
- Добавьте пользователя, который будет использоваться для подключения к MySQL через ProxySQL:
INSERT INTO mysql_users (username, password, default_hostgroup, active)
VALUES ('proxy_user', 'proxy_password', 1, 1);
- Смените пароль пользователя admin запросом
UPDATE global_variables SET variable_value='admin:NewStrongPassword' WHERE variable_name='admin-admin_credentials'; - Примените изменения:
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;
Настройка маршрутизации запросов (опционально)
ProxySQL позволяет маршрутизировать запросы на разные серверы в зависимости от правил.
- Добавьте правила маршрутизации:
INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup, apply)
VALUES (1, 1, '^SELECT.*FOR UPDATE$', 1, 1);
- Примените изменения:
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
Настройка MySQL-сервера для работы с ProxySQL
- Подключитесь к MySQL естественно на мастере:
# mysql -u root -p
- Создайте пользователя для ProxySQL (если ещё не создан):
CREATE USER 'proxy_user'@'%' IDENTIFIED BY 'proxy_password';
GRANT ALL PRIVILEGES ON *.* TO 'proxy_user'@'%';
FLUSH PRIVILEGES;
EXIT;
Важно: ограничьте права пользователя в соответствии с требованиями безопасности.
Тестирование подключения через ProxySQL
- Попробуйте подключиться через ProxySQL:
# mysql -u proxy_user -p -h 127.0.0.1 -P 6033
- Выполните тестовый запрос:
SELECT VERSION();
Мониторинг и анализ работы ProxySQL
- Проверьте статус серверов:
SELECT * FROM runtime.mysql_servers;
- Посмотрите статистику запросов:
SELECT * FROM stats.mysql_query_digest;
- Проверьте активные сессии:
SELECT * FROM stats.mysql_connections;
Настройка firewall (если используется)
Если используется firewall, разрешите подключения к портам ProxySQL:
# ufw allow 6032/tcp
# ufw allow 6033/tcp
# ufw reload
Настройка дополнительных параметров (опционально)
- Изменение портов по умолчанию. Отредактируйте конфигурационный файл
/etc/proxysql.cnf, чтобы изменить порты или другие параметры. - Настройка балансировки нагрузки. Распределите нагрузку между несколькими серверами, добавив их в одну hostgroup:
INSERT INTO mysql_servers (hostgroup_id, hostname, port, max_connections)
VALUES (1, '192.168.1.10', 3306, 1000),
(1, '192.168.1.11', 3306, 1000);
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
- Настройка мониторинга и автоматического переключения. ProxySQL поддерживает мониторинг состояния серверов и автоматическое переключение при отказе.
Настройка резервного копирования конфигурации
Регулярно сохраняйте конфигурацию ProxySQL:
sudo cp /etc/proxysql.cnf /backup/proxysql.cnf.backup
sudo cp /var/lib/proxysql/proxysql.db /backup/proxysql.db.backup
Важные замечания
- Безопасность: не используйте учётную запись
rootдля подключения через ProxySQL. Создайте отдельного пользователя с ограниченными правами. - Производительность: ProxySQL оптимизирован для высокой производительности, но следите за нагрузкой на сервер.
- Обновления: регулярно проверяйте наличие обновлений ProxySQL.
- Резервное копирование: перед изменениями делайте резервные копии конфигурационных файлов и базы данных ProxySQL.
- Мониторинг: используйте встроенные инструменты мониторинга ProxySQL для отслеживания состояния системы.
Полезные команды для администрирования
- Просмотр текущих настроек:
SELECT * FROM runtime.*;
- Применение изменений из конфигурации в runtime:
LOAD * TO RUNTIME;
- Сохранение изменений в диск:
SAVE * TO DISK;




