[Redis] Высокая степень параллелизма и высокая доступность Redis (репликация «главный-подчиненный», дозорный механизм)

Redis: высокий уровень параллелизма и высокая доступность

копировать

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

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

Реплицируемая топология

Топология репликации Redis может поддерживать одноуровневые или многоуровневые отношения репликации. В зависимости от сложности топологии ее можно разделить на следующие три типа: один главный и один подчиненный, один главный и несколько подчиненных и древовидная структура «главный-подчиненный». , которые представлены ниже.

Одна главная и одна подчиненная структура

Структура «один главный-подчиненный» представляет собой простейшую топологию репликации и используется для обеспечения поддержки аварийного переключения с подчиненного узла при выходе из строя главного узла.

изображение.png

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

Поскольку главный узел раньше не включал функцию сохранения, набор данных будет пуст после автоматического перезапуска. В это время, если подчиненный узел продолжает копировать главный узел, данные подчиненного узла также будут очищены, и значение настойчивость будет потеряна. Безопасный способ — выполнить команду «slaveof noone» на подчиненном узле, чтобы отключить связь репликации с главным узлом, а затем перезапустить главный узел, чтобы избежать этой проблемы.

Структура «один хозяин и много рабов»

Структура «один главный-несколько подчиненных» (также известная как топология «звезда») позволяет стороне приложения использовать несколько подчиненных узлов для достижения разделения чтения и записи.

изображение.png

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

Древовидная структура «главный-подчиненный»

Древовидная структура «главный-подчиненный» (также известная как древовидная топология) позволяет подчиненному узлу не только копировать данные главного узла, но также служить главным узлом для других подчиненных узлов, продолжая копирование на нижний уровень. . Внедряя средний уровень репликации, можно эффективно снизить нагрузку на главный узел и объем данных, которые необходимо передать на подчиненные узлы.

изображение.png

После того, как данные записаны на узел A, они будут синхронизированы с узлами B и C. Узел B затем синхронизирует данные с узлами D и E. Данные будут реплицироваться слой за слоем. Когда главному узлу необходимо установить несколько подчиненных узлов, чтобы избежать помех в работе главного узла, можно использовать древовидную структуру «главный-подчиненный» для снижения нагрузки на главный узел.

Скопированная конфигурация

Создать копию

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

Существует три способа настройки репликации:

  • 1) Добавьте подчиненный{masterHost} {masterPort} в файл конфигурации, чтобы он вступил в силу при запуске Redis.
  • 2) Добавьте --slaveof{masterHost} {masterPort} после команды запуска redis-server, чтобы она вступила в силу.
  • 3) Непосредственно используйте команду: подчиненный {masterHost} {masterPort}, чтобы изменения вступили в силу.

Подводя итог, можно сказать, что когда используется команда подчиненного устройства, ее можно настроить динамически во время выполнения или заранее записать в файл конфигурации.

Например: я запустил на машине 2 Redis с портами 6379 и 6380 соответственно.

изображение.png

изображение.png

"Slaveof" сама по себе является асинхронной командой. При выполнении команды "slaveof" узел сохраняет только информацию о главном узле и возвращает его. Последующий процесс репликации выполняется асинхронно внутри узла. Подробности см. ниже. После успешного установления репликации главного-подчиненного узла вы можете использовать команду info replication для просмотра статуса репликации.

Отключить репликацию

Команда «slaveof» может не только установить репликацию, но также выполнить команду «slaveof noone» на подчиненном узле, чтобы разорвать отношения репликации с главным узлом. Например, выполните команду «slaveof noone» на узле 6881, чтобы отключить репликацию.

изображение.png

"Slaveof" сама по себе является асинхронной командой. При выполнении команды "slaveof" узел сохраняет только информацию о главном узле и возвращает его. Последующий процесс репликации выполняется асинхронно внутри узла. Подробности см. ниже. После успешного установления репликации главного-подчиненного узла вы можете использовать команду info replication для просмотра статуса репликации.

Отключите основной процесс копирования:

1) Отключите связь репликации с основным узлом.

2) Повысьте статус подчиненного узла до главного.

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

        Операцию переключения ведущего устройства также можно реализовать с помощью команды подчиненного узла.Так называемое переключение ведущего устройства относится к переключению репликации текущего ведомого узла на главный узел на другой главный узел.

        Просто выполните команду подчиненного {newMasterIp} {newMasterPort}, например, измените узел 6881 с исходного узла реплики 6880 на узел реплики 6879.

изображение.png

Внутренний процесс огранки мастера выглядит следующим образом:

1) Отключите связь репликации со старым основным узлом.

2) Установите отношения репликации с новым основным узлом.

3) Удалить все текущие данные с ведомого узла.

4) Выполните операции репликации на новом первичном узле.

только чтение

По умолчанию подчиненные узлы настраиваются в режиме «только для чтения», используя параметр «slave-read-only=yes». Поскольку репликация может осуществляться только с главного узла на подчиненный узел, главный узел не может обнаружить никаких изменений в подчиненном узле.Изменение подчиненного узла приведет к несогласованности данных «главный-подчиненный». Поэтому рекомендуется не изменять режим «только чтение» подчиненного узла в режиме онлайн.

изображение.png

изображение.png

おすすめ

転載: blog.csdn.net/weixin_38996079/article/details/134725535