Страницы

Сохранить статью у себя в соцсети:

понедельник, 17 июня 2013 г.

§ Twemproxy: Memcached/Redis proxy.

Twemproxy (Nutcracker) - Memcached/Redis proxy.

Давно ничего не писал, времени совсем нет... - Держись студент, сессия!!! Сказал черт размахивая ведром гвоздей. Ходят слухи что смена деятельности только полезна. Но отбросим лирику и перейдем к делу...
Совсем недавно озадачился вопросом, а как масштабируется memcached? А никак)))  Но что делать если одного сервера недостаточно. Сходу подумалось о repcached, но там репликация, да и больше чем на 2 узла не разгонишься. Поиски привели к трем инструментам: memagent, moxi и twemproxyВсе эти инструменты представляют собой прокси с более-менее разным набором функций и качеств. Потестировав все три, остановился на twemproxy. О нем и пойдет речь.
nutcracker
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

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. Держите нос по ветру, грудь - колесом, а хвост - пистолетом! Конец связи.

На главную "Virtualizing Linux"

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика