Шардирование

Шардирование в Managed Service for Redis реализовано с помощью Redis Cluster.

Преимущества шардирования

Шардирование предлагает распределить нагрузку по хостам базы данных — это позволяет преодолеть ограничения ресурсов одного сервера, что особенно актуально при больших объемах данных или необходимости в интенсивных вычислениях.

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

Более подробно шардирование баз Redis рассмотрено в документации Redis.

Структура Redis Cluster

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

В каждом кластере находятся 16348 хэш-слота, которые равномерно распределяются между шардами. Слоты определяют набор данных, который хранится в том или ином шарде.

Отказоустойчивость

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

Если при опросах большинство мастер-хостов не смогло получить ответ от опрашиваемого хоста, то считается что хост вышел из строя. Если из строя вышел мастер-хост, то мастером будет назначена одна из его реплик. Если у хоста не осталось реплик или перенести его не удалось, запросы к хосту перестанут приниматься. При этом потеря целого шарда не означает отказа всего Redis Cluster — остальные шарды по-прежнему будут доступны для записи и чтения данных.

Чтобы обеспечить стабильную работу кластера, нужно создать минимум три хоста-мастера в разных зонах доступности, у каждого из которых будет по одной реплике. Мастеры и их реплики дожны находиться в разных зонах доступности.

Масштабирование

При необходимости горизонтального масштабирования кластера, в него можно добавлять новые шарды.

Новый шард создается без хэш-слотов. Чтобы перераспределить данные, необходимо выполнить ребалансировку кластера. После этого на новый шард переместится часть уже существующих слотов.

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

Managed Service for Redis позволяет создать от 3 до 10 шардов, каждый из которых может включать в себя от 1 до 7 хостов.