Twemproxy (Nutcracker) - Memcached/Redis proxy.
Давно ничего не писал, времени совсем нет... - Держись студент, сессия!!! Сказал черт размахивая ведром гвоздей. Ходят слухи что смена деятельности только полезна. Но отбросим лирику и перейдем к делу...
Совсем недавно озадачился вопросом, а как масштабируется memcached? А никак))) Но что делать если одного сервера недостаточно. Сходу подумалось о repcached, но там репликация, да и больше чем на 2 узла не разгонишься. Поиски привели к трем инструментам: memagent, moxi и twemproxy. Все эти инструменты представляют собой прокси с более-менее разным набором функций и качеств. Потестировав все три, остановился на twemproxy. О нем и пойдет речь.
twemproxy (nutcracker) это быстрый и легковесный прокси для memcached и redis. Основное назначение снизить количество соединений к серверам с memcached или redis.
Разработанный в Twitter этот легковесный инструмент используется в таких проектах как Pinterest, Tumblr, Vine, Kiip, Wuaki.tv, Wanelo.
Преимущества twemproxy (в том числе и перед двумя другими конкурентами):
- быстрый и легкий (со слов разработчиков)));
- проксирование к redis и memcached серверам;
- включает полную поддержку memcached ascii и redis протоколов;
- поддерживает постоянное подключение к серверам;
- поддержка проксирования к нескольким серверам;
- возможность выставления весов серверам в пуле;
- одновременная поддержка нескольких пулов серверов;
- поддержка шардинга данных между серверами;
- настройка конфигурации через в файлы в YAML формате;
- поддержка нескольких режимов хэширования включая consistent hashing (ketama);
- поддержка временного игнорирования узлов в случае их сбоя;
- возможность вывода статистики.
Сам Twitter выставляет его между фронтенд-серверами с Unicorn'ом и кэширующими серверами, таким образом экономя на соединениях к кэш-серверам (прямая аналогия - pgBouncer).
Репозиторий проекта находится на гитхабе (что совсем не удивительно). Установка выполняется за несколько мгновений:
# git clone https://github.com/twitter/twemproxy.git
# cd twemproxy/
# autoreconf -fvi
# ./configure
# make && make install
Параметров конфигурации не много и вся настройка сводится к формированию пулов и заданию настроек для этих пулов. В данном примере сделано 2 пула, в одном пуле сервера memcached в другом сервера redis. В каждом пуле мы определяем адрес и порт для прослушивания, режим хэширования и способ распределения ключей. Также определяются настройки для автоматического отключения сбойных узлов, при обнаружении таковых запросы будут отправлены на оставшиеся сервера в пуле. Ну и конечно же определяем сами сервера и назначаем им вес.
# vi /etc/twemproxy.conf
alpha:
listen: 0.0.0.0:11211
backlog: 1024
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 172.31.55.2:11211:1
- 172.31.17.42:11211:1
- 172.31.57.2:11211:1
- 172.31.57.2:11211:1
beta:
listen: 0.0.0.0:6379
backlog: 1024
hash: fnv1a_64
distribution: ketama
redis: true
auto_eject_hosts: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 172.31.17.42:6379:1
- 172.31.55.2:6379:1
- 172.31.57.2:6379:1
После создания конфигурации запускаем.
# nutcracker -d -c /etc/twemproxy.conf
Готово, теперь можно направить сервера приложений на запущенный twemproxy.
Также стоит отметить что по умолчанию twemproxy, каждые 30 секунд сбрасывает статистику которую можно получить подключившись к определенному порту (по-умолчанию 22222). Интервал обновления и порт могут быть переопределены в конфигурации. Отдается статистика в JSON формате. Описание полей можно получить через nutcracker --describe-stats.
В следующей статье будем рассматривать moxi - это аналог twemproxy. Держите нос по ветру, грудь - колесом, а хвост - пистолетом! Конец связи.
Комментариев нет:
Отправить комментарий