Рекомендации по использованию#

В этом разделе приводится рекомендации по использованию сервиса кеширования в К2 Облаке.

Memcached#

Варианты запуска сервиса#

  • Одиночный экземпляр сервиса, развёрнутый на одной виртуальной машине в выбранной зоне доступности.

При необходимости вы можете запустить несколько одиночных экземпляров в разных зонах доступности и объединить их в единый пул сторонними средствами, такими как mcrouter или twemproxy.

Подключение к Memcached#

После успешного запуска PaaS-сервиса на его странице в веб-интерфейсе облака будут отображаться адрес и порт, который прослушивает Memcached. Стандартно сервис Memcached прослушивает порт tcp/11211.

Мониторинг сервиса#

Для мониторинга сервиса мы рекомендуем использовать облачный сервис мониторинга Prometheus. Если вы хотите подключить свой собственный сервер мониторинга, то для контроля состояния экземпляров и проверки их работоспособности можно использовать mcrouter.

Redis#

Варианты запуска сервиса#

  • Одиночный экземпляр сервиса, развёрнутый на одной виртуальной машине в выбранной зоне доступности.

  • Отказоустойчивый сервис, развёрнутый в кластере из трёх виртуальных машин в трёх зонах доступности.

Архитектура отказоустойчивого решения#

Для Redis доступны два варианта отказоустойчивой архитектуры — с использованием мониторингового сервиса Sentinel и, начиная с версии Redis 3.0, cо встроенной кластеризацией (native clustering в терминологии Redis). Первый позволяет реализовать высокую доступность для небольших инсталляций. Второй обеспечивает лучшую масштабируемость и производительность для крупных инсталляций.

Redis Sentinel#

В К2 Облаке реализована конфигурация с Sentinel из трёх узлов, на одном их которых работает мастер, а на двух других — реплики. На каждом узле помимо сервера Redis запущен также процесс Redis Sentinel. При сбоях и других неполадках сервис Sentinel запускает процедуру автоматического переключения (failover). Подробнее о функциональности Sentinel можно прочитать в официальной документации.

Процессы Sentinel взаимодействуют друг с другом и следят за работоспособностью узлов Redis. При сбое узла, сервера Redis или сервиса Sentinel доступные процессы Sentinel устраивают перевыборы, чтобы определить, какому из узлов будет назначена роль мастера. Далее запускается процедура автоматического переключения: выбранная реплика становится новым мастером, оставшаяся реплика переконфигурируется для работы с этим мастером, а использующие сервер Redis приложения информируются о новом адресе для подключения.

Примечание

Redis использует асинхронную репликацию, поэтому такая распределённая система из узлов Redis и процессов Sentinel не гарантирует, что подтверждённые операции записи будут действительно сохранены при сбое.

Отказоустойчивый сервис Redis#

Отказоустойчивый сервис Redis развёртывается в кластере из трёх экземпляров виртуальных машин и на каждом узле работают по одному мастеру и реплике, причём реплика работает с мастером из другого узла (кросс-репликация).

Высокая производительность и линейная масштабируемость кластера обеспечивается благодаря нескольким мастер-узлам, а высокая доступность достигается наличием как минимум одной реплики для каждого мастера. С подробной информацией можно ознакомиться в официальной документации Redis.

Все мастер-узлы делят между собой единое пространство для данных, которое в свою очередь разделено на слоты. Таким образом, каждый мастер содержит часть слотов (sharding).

При работе с сервисом Redis обращения обрабатываются мастерами. Для операций чтения и записи можно обращаться к любому мастеру. Если при чтении искомые данные находятся в слоте на другом мастере, то Redis сам перенаправит клиента к нужному экземпляру.

В случае сбоя мастер-экземпляра или всего узла, на котором работает экземпляр, происходит автоматическое переключение (failover) на соответствующую реплику, которая берёт на себя роль мастера.

Распределение запросов с помощью HAProxy#

Для простоты и удобства использования кластеризованного сервиса Redis мы встроили в него инсталляцию HAProxy, которая отслеживает статус и роли узлов и автоматически распределяет запросы только на экземпляры виртуальных машин в роли мастера. HAProxy работает на всех узлах кластера на порту tcp/5000. Таким образом, к этому порту можно обратиться с любого узла и механизм HAProxy направит запрос на один из мастеров.

Чтобы обеспечить максимальную доступность — главное преимущество отказоустойчивого сервиса, — используйте порты HAProxy всех узлов, а не одного конкретного. Удобнее всего это делать через ещё один сервис балансировки, настроенный на стороне вашего приложения. Вы можете использовать интегрированный балансировщик нагрузки К2 Облака или развернуть свой собственный.

Подключиться к сервису кеширования#

После успешного запуска прослушиваемые адреса и порты можно найти на странице сервиса кеширования Redis. В случае одиночного сервиса для подключения доступна всего одна точка приёма запросов (endpoint), в случае же отказоустойчивого сервиса их несколько (точное количество зависит от выбранной архитектуры).

Мастер-экземпляры Redis прослушивают порт tcp/6379, реплики — tcp/6380. При сбое мастер-экземпляра или всего узла, на котором работает экземпляр, происходит автоматическое переключение: реплика становится мастером, но продолжает работать на порту tcp/6380. Поэтому одного номера порта недостаточно, чтобы понять, является ли экземпляр мастером или репликой в работающем продолжительное время кластере.

Важно

Кластер позволяет сохранить доступность сервиса кеширования при отказе одного из узлов, но только если вы используете не одну, а все точки приёма запросов кластера (endpoints).

Аутентификация в Redis#

При работе в закрытых контурах нет необходимости включать аутентификацию в Redis, но в недоверенной среде может потребоваться защитить вашу инсталляцию паролем.

Пароль можно задать при создании сервиса БД. После того как сервис был запущен с заданным паролем, обратиться к нему можно после аутентификации (команда AUTH).

Вы можете управлять развёрнутым сервисом Redis как через стандартный консольный клиент redis-cli в Linux, так и использовать для этого графические инструменты. Хороший обзор графических инструментов можно найти в блоге.

Если вы хотите подключиться к сервису Redis удалённо, не забудьте назначить Elastic IP экземпляру с развёрнутым сервисом и разрешить подключения к портам tcp/6379-6380 в соответствующей группе безопасности.

Важно

Будьте осторожны, открывая доступ к Redis из интернета. Рекомендуем ограничить доступ конкретными IP-адресами, а также использовать сложные пароли.