Как сделать 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, а затем просто перезапустите экземпляр. Таким образом, вам не нужно обновлять часовой, как если бы вы взяли на себя предоставление новых хостов.
Из любопытства, если вы просто собираетесь все время сбрасывать и не заботитесь о данных, когда будете их стирать, зачем беспокоиться о страже?