Настройка активной георепликации для экземпляров Управляемого Redis в Azure

Из этой статьи вы узнаете, как настроить кэш с активной георепликацией с помощью портала Azure.

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

Замечание

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

  • Синхронизация данных между репликами соответствует конечной согласованности. Служба не предоставляет соглашение об уровне обслуживания во время синхронизации. Создайте систему без учета времени синхронизации данных.

Как работает активная георепликация

Активная георепликация использует реплицированные типы данных без конфликтов (CRDTs) для бесшовного распределения данных между экземплярами Redis, которые можно распределять по континентам. Эти экземпляры подключены в конфигурации active-active, где записи в один экземпляр автоматически отражаются в других экземплярах в той же группе георепликации. Эта двунаправленная репликация данных отличается от подходов к однонаправленной активно-пассивной репликации, где данные реплицируются от первичной базы на геореплику, но не в обратном направлении. Это мощный инструмент, который часто используется несколькими способами:

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

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

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

Более подробную информацию о том, как работает активная георепликация, см. в разделе "Активно-активное геораспространение" (на основе CRDTS)

Область доступности

Уровень Оптимизированный для памяти, сбалансированный, оптимизированный для вычислений Оптимизированный для флеш-технологий
В наличии Да (кроме B0 и B1) нет

Это важно

SKU Balanced B0 и B1 и SKU, оптимизированные для Flash, не поддерживают активную георепликацию.

Условия для использования активной георепликации

Активная георепликация имеет ряд ограничений:

  • Активная георепликация поддерживается только в том случае, если Управляемый Redis Azure находится в конфигурации высокой доступности, то есть использует репликацию.

  • Поддерживаются только модули RediSearch и RedisJSON

  • При использовании RediSearch можно использовать только политику без вытеснения. Все политики вытеснения поддерживаются на других уровнях.

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

  • У всех кэшей, входящих в группе георепликации, должна совпадать конфигурация. Например, у всех кэшей должны совпадать SKU, емкость, политика вытеснения и кластеризации, модули и настройки TLS.

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

  • При использовании активной георепликации нельзя использовать команды Redis FLUSHALL и FLUSHDB. Запрет на использование команд предотвращает непреднамеренное удаление данных. Вместо них следует использовать операцию очистки.

Создание или присоединение группы активной георепликации

  1. При создании нового ресурса Управляемого Redis в Azure выберите вкладку "Активная георепликация ". В рабочей области выберите "Создать новую группу " или "Присоединиться к существующей группе". Заполните формы по мере необходимости.

    1. Создайте новую группу репликации для первого экземпляра кэша. Или выберите существующую из списка.
  2. Нажмите кнопку Настроить, чтобы завершить процесс.

  3. Дождитесь успешного создания первого кэша. После завершения вы увидите Настроено для Активной георепликации. Повторите предыдущие шаги для каждого экземпляра кэша в группе георепликации.

Добавление существующего экземпляра в активную группу георепликации

Чтобы добавить существующий экземпляр кэша в активную группу георепликации, вы можете принудительно установить связь с помощью REST API.

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

Удалите из группы активной георепликации

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

Активная георепликация — это эффективная функция повышения доступности при использовании Redis под управлением Azure. Но в случае регионального сбоя вам необходимо выполнить определенные инструкции для подготовки кэшей.

Например, следуйте этим советам:

  • Заранее определите, на какой кэш в группе георепликации вы будете переключаться при сбое региона.

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

  • У каждого кэша, состоящего в группе георепликации, есть собственный ключ доступа. Определите, как приложение переключается на разные ключи доступа при выборе кэша для резервного копирования.

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

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

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

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

  1. Перейдите на портал Azure и выберите в группе репликации один из доступных кэшей.

  2. В меню ресурсов слева выберите Активная георепликация, чтобы просмотреть параметры в рабочей области.

  3. Выберите кэш, связь с которым требуется принудительно отменить, установив флажок.

  4. Выберите Принудительная отмена связи и нажмите ОК для подтверждения.

  5. Когда доступность региона восстановится, нужно будет удалить его кэш и повторно создать его, чтобы снова добавить в группу репликации.

Настройка активной георепликации с помощью Azure CLI или PowerShell

Azure CLI (Интерфейс командной строки для Azure)

Azure CLI позволяет создать кэш и группу георепликации или добавить новый кэш в существующую группу георепликации. Дополнительные сведения см. в разделе az redisenterprise create.

Создание нового экземпляра Redis под управлением Azure в новой группе георепликации с помощью Azure CLI

В этом примере создается новый сбалансированный экземпляр Redis под управлением Azure B10 под названием Cache1 в регионе "Восточная часть США". Затем кэш добавляется в новую группу активной георепликации replicationGroup:

az redisenterprise create --location "East US" --cluster-name "Cache1" --sku "Balanced_B10" --resource-group "myResourceGroup" --group-nickname "replicationGroup" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"

Чтобы правильно настроить активную георепликацию, добавьте идентификатор создаваемого экземпляра кэша с параметром --linked-databases. Идентификатор имеет следующий формат.

/subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Cache/redisEnterprise/<your-cache-name>/databases/default

Создание нового экземпляра Redis под управлением Azure в существующей группе георепликации с помощью Azure CLI

В этом примере создается новый сбалансированный экземпляр кэша B10 под названием Cache2 в регионе "Западная часть США". Затем скрипт добавляет этот кэш в активную группу георепликации replicationGroup, которая была создана в рамках предыдущей процедуры. Таким образом, он соединён в активной-активной конфигурации с Cache1.

az redisenterprise create --location "West US" --cluster-name "Cache2" --sku "Balanced_B10" --resource-group "myResourceGroup" --group-nickname "replicationGroup" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache2/databases/default"

Как и ранее, необходимо перечислить Cache1 и Cache2 с использованием параметра --linked-databases.

Azure PowerShell

PowerShell позволяет создать кэш и группу георепликации или добавить новый кэш в существующую группу георепликации. Дополнительные сведения см. в статье New-AzRedisEnterpriseCache.

Создание нового экземпляра Redis под управлением Azure в новой группе георепликации с помощью PowerShell

В этом примере создается новый сбалансированный экземпляр кэша Redis под управлением Azure B10 под названием Cache1 в регионе "Восточная часть США". Затем кэш добавляется в новую группу активной георепликации replicationGroup:

New-AzRedisEnterpriseCache -Name "Cache1" -ResourceGroupName "myResourceGroup" -Location "East US" -Sku "Balanced_B10" -GroupNickname "replicationGroup" -LinkedDatabase '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"}'

Чтобы правильно настроить активную георепликацию, добавьте идентификатор создаваемого экземпляра кэша с параметром -LinkedDatabase. Идентификатор имеет следующий формат.

/subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Cache/redisEnterprise/<your-cache-name>/databases/default

Создание нового экземпляра Redis под управлением Azure в существующей группе георепликации с помощью PowerShell

В этом примере создается новый сбалансированный экземпляр кэша B10 под названием Cache2 в регионе "Западная часть США". Затем скрипт добавляет кэш в активную группу георепликации, репликацияGroup, созданную в предыдущей процедуре. В результате мы получаем два кэша, Cache1 и Cache2, которые связаны в конфигурации "активный — активный".

New-AzRedisEnterpriseCache -Name "Cache2" -ResourceGroupName "myResourceGroup" -Location "West US" -Sku "Balanced_B10" -GroupNickname "replicationGroup" -LinkedDatabase '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"}', '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache2/databases/default"}'

Как и ранее, необходимо перечислить Cache1 и Cache2 с использованием параметра -LinkedDatabase.

Масштабирование экземпляров в группе георепликации

Масштабирование геореплицированных кэшей находится в общедоступной предварительной версии.

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

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

Пример масштабирования

Например, в группе георепликации может быть три экземпляра, все экземпляры, оптимизированные для памяти M10:

Имя экземпляра Redis00 Redis01 Redis02
Тип Оптимизированный для операций в памяти экземпляр M10 Оптимизированный для операций в памяти экземпляр M10 Оптимизированный для операций в памяти экземпляр M10

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

Имя экземпляра Redis00 Redis01 Redis02
Тип Оптимизированный для вычислений экземпляр X20 Оптимизированный для операций в памяти экземпляр M10 Оптимизированный для операций в памяти экземпляр M10

На этом этапе экземпляры Redis01 и Redis02 можно масштабировать только до оптимизированного для вычислений экземпляра X20. Все прочие операции масштабирования заблокированы.

Замечание

Экземпляр Redis00 не заблокирован для дальнейшего масштабирования на этом этапе. Но он блокируется, как только Redis01 или Redis02 масштабируется до вычислительно оптимизированного X20.

После масштабирования каждого экземпляра до одного уровня и размера все блокировки масштабирования удаляются:

Имя экземпляра Redis00 Redis01 Redis02
Тип Оптимизированный для вычислений экземпляр X20 Оптимизированный для вычислений экземпляр X20 Оптимизированный для вычислений экземпляр X20

Операция очистки

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

Метрика георепликации

Метрика Geo Replication Healthy в Azure Managed Redis помогает отслеживать состояние геореплицированных кластеров. Эта метрика используется для отслеживания состояния синхронизации между георепликами.

Чтобы отслеживать метрику Работоспособность георепликации в портале Azure.

  1. Откройте портал Azure и выберите экземпляр управляемого Redis в Azure.

  2. В меню "Ресурс" выберите метрики в разделе "Мониторинг ".

  3. Выберите Добавить метрику и выберите метрику Работоспособность георепликации.

  4. При необходимости примените фильтры для определенных геореплик.

  5. Вы можете настроить оповещение, чтобы уведомить вас, если метрика Георепликация: работоспособность передает недопустимое значение (0) в течение 60 минут или дольше.

    1. Выберите Новое правило генерации оповещений.

    2. Определите условие для активации, если значение метрики равно 0 не менее 60 минут, как рекомендуется.

    3. Добавьте группы действий для уведомлений, например электронной почты, SMS и других.

    4. Сохраните оповещение.

    5. Дополнительные сведения о настройке оповещений для кэша Redis Enterprise см. в разделе "Мониторинг кэшей Redis".

Это важно

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

Распространенные проблемы на стороне клиента, которые могут вызвать проблемы синхронизации между георепликами

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

  • Большой размер ключа. Большие ключи могут создавать проблемы синхронизации между георепликами. Чтобы обеспечить плавную производительность и надежную репликацию, рекомендуется сохранить размеры ключей до 500 МБ при использовании георепликации. Если размер отдельного ключа приближается к 2 ГБ, кэш сталкивается с проблемами с работоспособностью георепликации.

  • Недостаточно памяти (OOM) — для работы синхронизации георепликации необходимо некоторое количество свободной памяти. Когда кэш находится под давлением памяти или достиг предела памяти, синхронизация приостанавливается. Уменьшите нагрузку на память, задав TTLs или изменив политику вытеснения.

Очистка кэшей с помощью Azure CLI или PowerShell

Чтобы активировать операцию очистки, можно также воспользоваться Azure CLI и PowerShell. Дополнительную информацию о применении Azure CLI см. в разделе az redisenterprise database flush. Подробнее о применении PowerShell см. в статье об Invoke-AzRedisEnterpriseCacheDatabaseFlush.

Это важно

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

Для управления доступом к этой функции воспользуйтесь функцией Управление доступом на основе ролей Azure. Доступ к функции очистки всех кэшей следует предоставлять только авторизованным пользователям.