Погляд на MySQL proxy
Останнім часом я аж дві статті присвятив СУБД PosgreSQL. Як Ви могли помітити, мені дуже подобається ця СУБД. Хоча й MySQL моєю увагою в щоденній роботі необділена. А ось інформацією про неї я не ділився. Просто нічого цікавого, про що б не написали на кожному кроці на думку не спадало. І ось я мені випала можливість познайомитись з не дуже освітленими аспектами роботи з MySQL, а саме побудовою систем проксювання запитів для MySQL та утилітою MySQL proxy.
Взагалі матеріалів з цього приводу доволі мало, не те що українською, а навіть і англійською мовою, тому з гордістю хочу розпочати написання невеличкої серії статей про те, як можна зменшити навантаження на СУБД MySQL, шляхом проксювання запитів через MySQL proxy
Короткий огляд
MySQL proxy - невелика програма, що приймає конекти від кінцевих користувачів (програм) та в залежності від умов обирає бекенд MySQL-сервер (backend) та під'єднується до нього. В подальшому кожен запит (в тому числі і на авторизацію) передається спочатку до проксі-сервера, а вже він передає його одному з серверів-бекендів. Так само і результат проходить через проксі на шляху від серверу до програми, що з ним працює.Що можна досягнути таким чином? Коротко перелічу:
- балансування навантаження між декількома серверами
- аналіз запитів, збереження їх в лог
- модифікація запитів перед виконанням (наприклад, з метою виправлення типових помилок, чи внаслідом зміни труктури БД)
- обробка та модифікація результатів запитів
- обробка помилок
І в усих цих випадках немає жодної необхідності модифікувати програмний код, для роботи через проксі. Достатньо лише сконфігурувати програму на конект до проксі, як до звичайного MySQL-серверу. Або у випадку, якщо навіть до файлів конфігурації доступу немає, за адресою де було попередньо встановлено БД, встановити та запустити MySQL proxy та використовуючи iptables перенаправити всі конекти з порту серверу MySQL (за замовчуванням 3306) на порт проксі (за замовчуванням 4040). Доволі зручно, особливо для підтримки систем, написаних кимось іншим.
Зрозуміло, що така система вимагає опису правил роботи. Для цього використовується скриптова мова програмування Lua, про яку я вже писав раніше. Написанню скриптів для проксювання запитів я планую присвятити окрему статтю, а поки що розповім про встановлення та початкову конфігурацію.
Початок роботи з MySQL proxy
Як вже стало традиційним для мене, буду розповідати переважно на прикладі Linux (основаних на Debian дистрибутивах), однак впевнений, що проблем з встановленням не виникне.
Можна обрати один з двох шляхів: скористатись бінарним пакетом, чи зібрати власноруч. Під Red Hat, SuSe, Windows бінарні пакети з останньою актуальною версією (на сьогодні це 0.7.2) можна з оф-сайту. Вихідні тексти можна отримати там чи на Launchpad.net, де можна отримати інформацію про всі зміни, нововведення та процес розробки.
Однак якщо виникає бажання встановити все з репозиторіїв, то тут отримуємо проблему у застарілій версії пакету. Однак я з цим змирився:
Тепер настав час конфігурування mysql-proxy. Зазвичай в системі буде присутній файл для запуску програми, аналогічний наведеному тут. І запустити проксі можна однією командою:
Це добре, однак слід ознайомитись за параметрами виконання програми, так як таким чином можна легко проводити конфігурацію. Ключі для налаштувань перераховані нижче:
--admin-address=host:port
Адреса MySQL-proxy для адміністративних целій. За замовчуванням ":4041".
--proxy-address=host:port
Адреса MySQL-proxy для вхідних з'єднань. Саме цю адресу слід використовувати під час конфігурування клієнтів. По умолчанию значение ":4040"
--proxy-read-only-backend-addresses=host:port
Адреса MySQL серверу, що працює в режимі "тільки для читання".
--proxy-backend-addresses=host:port
Адреса MySQL севреру, якому будуть передаватись всі запити від клиенту. Може бути вказаний декілька разів, якщо необхідно мати підтримку декількох серверів. За замовчуванням "127.0.0.1:3306".
--proxy-skip-profiling
Вимикання профілювання запитів. За замовчуванням ввімкнене.
--proxy-fix-bug-25371
Виправляє помилку #25371 для старих версій libmysql
--proxy-lua-script=файл
Вказує скрипт мовою lua, який використовується для тонкої конфігурації.
--no-proxy
Не запускати проксі-сервер
--daemon
MySQL-proxy в режимі демону (в фоновому режимі)
--pid-file=файл
Вказує місцезнаходження pid-файлу MySQL proxy.
Якщо у Вас встановлено локально сервер MySQL, то достатньо буде виконати таку команду для запуску проксі:
, де замість ip буде ваша ip-адреса. Чому я рекомендую використовувати ip-адресу, а не 127.0.0.1 чи localhost? Тому що при зверненні до localhost створюється трошки нестандартний сокет, через який mysql буде працювати в будь-якому разі саме з сервером, а не з проксі, що не дозволить перевірити, як працює програма. Тепер можна скористатись будь-яким клієнтом для MySQL та приэднатись до MySQL-proxy, користуючись іменем користувача та паролем, що використовувались для доступу до БД. І все - можна працювати з базою данних через проксі.
Далі буде...
Ну а після того, як проксі було встановлено та налаштовано на одну БД, починаються найбільш цікаві моменти роботи з MySQL через проксі - написання скриптів для нього, які б дозволяли розширити можливості та вирішувати різноманітні задачі. Ну про все це мова йтиме в наступним моїх дописах.
Дякую за увагу!



