Использование Redis Replication на разных компьютерах (мультимастер)
Я хочу использовать Redis в качестве распределенного кэша в моем приложении. Одним из требований является наличие доступности Active Active, что означает, что у меня есть один центр обработки данных в одном месте, а другой - в другом. Если один центр обработки данных выходит из строя, я хочу, чтобы мой пользователь ничего не чувствовал и имел возможность получить все данные из первого центра обработки данных на втором сайте и продолжить работу, а также иметь мастера на втором сайте. Является ли это возможным?
1 ответ
Вы запрашиваете решение Active-Active, известное как multi master, но ваш вопрос говорит о том, что оно может вам не понадобиться.
Если вам требуется, чтобы для записи была доступна только одна из баз данных, т. Е. Все записи всегда выполняются, вы можете добиться этого с помощью стандартной репликации master-slave в Redis. Поручите вашему приложению использовать мастер для записи и (возможно), чтобы ваш подчиненный также обслуживал некоторые операции чтения. Если мастер выходит из строя, назначьте ведомого во 2-м DC как нового мастера и перенаправьте ваше приложение / клиенты на его использование. Мониторинг и продвижение могут быть достигнуты с помощью Redis' Sentinel.
Есть несколько вещей, которые вы должны принять во внимание при реализации этого типа установки. Прежде всего обратите внимание, что репликация Redis является асинхронной, поэтому в зависимости от нагрузки вашего мастера, объема записей и качества сетевого соединения репликации вы можете потерять некоторые из последних обновлений в случае сбоя. Во-вторых, и по той же теме, сетевой канал между DC может быть подвержен ограниченной полосе пропускания и увеличению задержки - вы должны настроить Redis для обработки этого и, возможно, использовать сжатие для этого трафика (например, через туннель SSH). Наконец, для точного обнаружения сбоев вы должны иметь как минимум 3 часовых в разных местах. Но, несмотря на эти проблемы, это все выполнимо.
Тем не менее, в настоящее время Redis не поддерживает произвольную установку нескольких мастеров для записи в любую базу данных. Если это действительно то, что вам нужно, подумайте об использовании другого решения.
Примечание: в зависимости от ваших точных требований, если вы можете гарантировать, что записи на разные контроллеры домена являются взаимоисключающими (т. Е. Каждый контроллер записи выполняет запись только в отдельное подмножество ключей, которые не используются другими контроллерами домена), вы можете использовать две базы данных с мастером в каждом DC и раб в другом.