В этой статье я расскажу о MySQL-proxy, специальном прокси-сервере, предназначенном для работы с сервером баз данных MySQL. В отличие от других статей на эту тему, я сделаю некоторые дополнения, касательно работы MySQL-proxy в CentOS 5.x и расскажу о некоторых ограничениях данного инструмента Автор: Виктор Вислобоков О возможностях MySQL-proxyИтак. MySQL-proxy это прокси-сервер, который работает между клиентом сервера MySQL и самим сервером. При этом клиент даже не догадывается, что работает с прокси-сервером, а не с самим сервером MySQL. Вы можете разместить, например, MySQL-proxy на локальном сервере, а сам сервер MySQL на каком-либо другом сервере, а клиент тем не менее будет работать только с локальным сервером, не подозревая об этом. Более того, вы можете в качестве MySQL-сервера указать ещё один MySQL-прокси и это будет работать! Благодаря такому прозрачному проксированию MySQL, прокси-сервер предоставляет несколько интересных возможностей:
Все эти возможости делают MySQL-proxy очень полезным инструментом. Почти все из вышеперечисленных возможностей реализуются за счёт встроенного языка lua. Таким образом, это не какой-то предопределённый набор условий, это возможность использовать полноценный язык программирования, чтобы удовлетворить ваши потребности. Ограничения MySQL-proxyВажным замечением, которое сразу же накладывает определённые ограничения на работу схемы клиент <-> прокси <-> серверявляется работа только по TCP/IP. Т.е. MySQL-proxy не умеет работать через файл сокета. Ещё одним ограничением, о котором следует упомянуть является работа только с веткой MySQL 5.0.x и выше. Вполне возможно, что MySQL-proxy будет работать и с MySQL 4.1.x, но на официальном сайте MySQL написано, что таковое тестирование не производилось и цель совместимости с MySQL 4.1.x разработчиками не преследовалась! Вы не можете изменить порядок выполнения предопределённых функций на языке lua, что приводит к невозможности изменить поведение вашего скрипта на lua в той функции, которая следует перед функцией, где могло бы быть такое условие. см. ниже Установка MySQL-proxyЖелающие посмотреть доступные сборки и получить наисвежайшие исходники могут посетить страницу загрузки MySQL-proxy и посмотреть там. Желающим установить MySQL-proxy на CentOS 5.x могу сразу сказать, что там им ничего не обломится, а предлагаю перейти в конец статьи и либо взять готовые и собранные мной RPM-пакеты, либо там же взять SRPM-пакеты lua и mysql-proxy и собрать их самим. Пакет lua взять из дистрибутива Fedora 10, потому что в CentOS нужной версии нет, а mysql-proxy взять именно версии 0.6.1, потому что 0.7.x у меня не собралась, но если соберёте - честь вам и хвала и не забудьте прислать мне :) После установки, советую привести в соответствие с вашими условиями конфигурационный файл /etc/sysconfig/mysql-proxy, читайте о настройках ниже. Настройка MySQL-proxyВся настройка MySQL-proxy осуществляется с помощью ключей командной строки. Никаких конфигурационных файлов не предусмотрено. Мы не будем останавливаться на ключах помощи, вы их посмотрите сами (-?, --help и т.д.) Остальные ключи следующие:
Если вы ставили MySQL-proxy в CentOS из пакета, как было описано в разделе Установка MySQL-proxy, то вы можете снова вернуться к файлу /etc/sysconfig/mysql-proxy и отредактировать его в соответствии с пояснениями по ключам. Остальным предлогается самостоятельно подготовить shell-скрипт для запуска MySQL-proxy. Административный интерфейс MySQL-proxyАдминистративный интерфейс, адрес которого задаётся соответствующей опцией командной строки, служит для получения некоторой полезной информации о работе MySQL-proxy и работает по стандартому MySQL протоколу. Вы можете зайти по заданному вами адресу с помощью обычного клиента MySQL. Вы можете получить информацию о текущих открытых соединениях MySQL-proxy командой: mysql> select * from proxy_connections; +------+--------+-------+------+ | id | type | state | db | +------+--------+-------+------+ | 0 | server | 0 | | | 1 | proxy | 0 | | | 2 | server | 10 | | +------+--------+-------+------+ 3 rows in set (0.00 sec) или запросить текущую конфигурацию MySQL-proxy командой: mysql> select * from proxy_config; +----------------------------+----------------------+ | option | value | +----------------------------+----------------------+ | admin.address | :4041 | | proxy.address | :4040 | | proxy.lua_script | mc.lua | | proxy.backend_addresses[0] | mysql:3306 | | proxy.fix_bug_25371 | 0 | | proxy.profiling | 1 | +----------------------------+----------------------+ 6 rows in set (0.01 sec) Как работает MySQL-proxyДля реализации вышеописанных возможностей на языке lua для работы выделенн ряд предопределённых функций, каждая их которых запускается в определённое время. Ниже все они перечислены в порядке их выполнения:
Важно!Следствием фиксированного порядка выполнения функций являются некоторые ограничения. Например, вы не можете исходя из запроса выбрать для подключения нужный сервер, потому что подключение к серверу осуществляется раньше, чем вы получаете доступ к самому запросу. По этой же причине вы не сможете передать запрос другому серверу MySQL, если результаты этого запроса, полученные от какого-либо одного MySQL-сервера вас, по каким-либо причинам, не устроили. Итак, чтобы реализовать все те вкусности, о которых говорилось ранее, необходимо написать собственный lua-скрипт и указать его при запуске MySQL-proxy. Начать писать свои скрипты лучше всего с примеров, которые идут в комплекте к MySQL-proxy. Если вы ставили MySQL-proxy в CentOS из пакета, как было описано в разделе Установка MySQL-proxy, то вы можете найти их в каталоге /usr/share/mysql-proxy. ЗаключениеДополнительную информацию о MySQL-proxy вы можете найти на официальном сайте
|
|||||||||||||
Кеширование
С его помощю получится кешировать запросы?
вопросы
Немного не понятно с какими параметрами соединятся, чтобы выполнить запросы:
select * from proxy_connections;
select * from proxy_config;
И еще интересно было бы почитать решение при настройке серверов БД master-master. При падение master1, как при помощи MySQL-proxy переключить мастера на master2, ну и соответственно когда master1 оживает, то вернуть все на круги своя.
Спасибо.
1. С параметрами подключения
1. С параметрами подключения к АДМИНИСТРАТИВНОМУ интерфейсу - читайте ключи командной строки в тексте.
2. Нет такого решения. В статье по-моему довольно ясно описан алгоритм работы: принимается решение о том какой сервер юзать с помощью lua-скрипта, если такового нет, то первый из заданного списка. Если он не ответил - второй и т.д. Балансировку нагрузки опять-таки средствами означенного lua-скрипта.