Как сделать Redis FLUSHALL без инициации аварийного переключения?

У нас есть конфигурация redis с двумя серверами redis. У нас также есть 3 дозорных, которые следят за двумя экземплярами и инициируют отработку отказа при необходимости.

В настоящее время у нас есть процесс, в котором нам периодически приходится выполнять FLUSHALL на сервере Redis. Это операция блокировки, которая занимает больше времени, чем время, отведенное для тайм-аута часовых. Другими словами, у нас есть конфигурация дозорного с:

sentinel down-after-milliseconds OurMasterName 5000

и выполнение redis-cli FLUSHALL на сервере занимает> 5000 миллисекунд, поэтому часовые инициируют аварийное переключение.

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

Вопрос заключается в следующем: как мы можем выполнить FLUSHALL (или эквивалентную операцию), БЕЗ того, чтобы наши часовые не инициировали отработку отказа из-за блокировки FLUSHALL более 5000 миллисекунд? Кто-нибудь сталкивался и решил эту проблему?

2 ответа

Решение

Вы можете просто создать новые экземпляры: если вы используете что-то вроде AWS или Azure, у вас есть API для создания нового кластера Redis. Запустите его, загрузите его с данными и, как только будете готовы, просто измените DNS, снова с помощью вызова API - так что все это может быть обработано какой-то частью вашего приложения. Но на местах все может стать более сложным, потому что это потребует некоторой автоматизации с ansible/chef/puppet.

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

Изменить: поскольку вы не заинтересованы в сохранении данных, отключите сохранение, удалите файл RDB, а затем просто перезапустите экземпляр. Таким образом, вам не нужно обновлять часовой, как если бы вы взяли на себя предоставление новых хостов.

Из любопытства, если вы просто собираетесь все время сбрасывать и не заботитесь о данных, когда будете их стирать, зачем беспокоиться о страже?

Другие вопросы по тегам