Шардирование в Managed Service for Redis
Шардирование в Managed Service for Redis реализовано с помощью Redis Cluster
Преимущества шардирования
Шардирование предлагает распределить нагрузку по хостам базы данных — это позволяет преодолеть ограничения ресурсов одного сервера, что особенно актуально при больших объемах данных или необходимости в интенсивных вычислениях.
Горизонтальное масштабирование включает в себя распределение набора данных и нагрузки по нескольким узлам. Емкость одной машины или ее скорость могут быть невысокими, но в горизонтально масштабируемом кластере каждая машина обрабатывает лишь часть общей нагрузки и хранит лишь часть общих данных. Это делает систему потенциально эффективнее, чем единственный сервер с большой емкостью.
Более подробно шардирование баз Redis рассмотрено в документации Redis
Структура Redis Cluster
Redis Cluster позволяет создать инсталляцию Redis с автоматическим шардированием данных между хостами. Redis Cluster включает в себя набор хостов, на которых хранятся данные. Redis Cluster делится на шарды, каждый из которых состоит из мастера и набора реплик. На мастер-хосты записываются данные от клиентов, которые затем реплицируются.
В каждом кластере находятся 16348 хеш-слота, которые равномерно распределяются между шардами. Слоты определяют набор данных, который хранится в том или ином шарде.
Отказоустойчивость
Все хосты кластера связаны между собой служебными соединениями, через которые хосты обмениваются информацией о находящихся на них слотах и регулярно запрашивают друг у друга статусы.
Если при опросах большинство мастер-хостов не смогло получить ответ от опрашиваемого хоста, то считается что хост вышел из строя. Если из строя вышел мастер-хост, то мастером будет назначена одна из его реплик. Если все реплики вышли из строя или переключиться на них не удалось, запросы к шарду перестанут приниматься. При этом потеря целого шарда в кластере с двумя или более шардами не означает отказа всего Redis Cluster — остальные шарды по-прежнему будут доступны для записи и чтения данных.
Чтобы обеспечить стабильную работу кластера, нужно создать минимум один хост-мастер, у которого будет одна реплика. Мастеры и их реплики должны находиться в разных зонах доступности вне зависимости от их количества.
Шардированные кластеры с типом диска local-ssd, в которых на каждый шард приходится только один хост, не считаются отказоустойчивыми. Создать такой кластер нельзя.
Масштабирование
При необходимости горизонтального масштабирования кластера, в него можно добавлять новые шарды.
Новый шард создается без хеш-слотов. Чтобы перераспределить данные, необходимо выполнить ребалансировку кластера. После этого на новый шард переместится часть уже существующих слотов.
Перемещение слотов между шардами не требует остановки работы кластера. Если клиент отправил запрос к мастеру на данные, которые были перемещены на другой шард, этот запрос будет переадресован на новый шард, куда переместились данные. Сами хосты не проксируют запросы, а только перенаправляют клиента на правильный шард.
Managed Service for Redis может содержать от 1 до 10 шардов, каждый из которых, в свою очередь, может включать в себя разное количество хостов. Минимальное количество хостов в шарде зависит от выбранного типа диска.
Допустимо создать кластер либо с одним шардом, либо с тремя и более шардами. Кластер с двумя шардами нельзя создать, но можно изменить количество шардов в уже существующем кластере.
Подробнее об ограничениях на количество хостов в шарде см. в разделе Квоты и лимиты.