В Honeybadger , мы используем Redis много . Это наш швейцарский армейский нож; Это кеш, единственный источник истины, он хранит фоновые задания и многое другое. В основном, Redis — одна из тех услуг, которые никогда не должны терпеть неудачу.
Недавно я размышлял о DevOps Apocalypse, как это делает (может быть, Redis быть одним из четырех всадников?), Который заставил меня прыгнуть в наш #OPS Канал, чтобы задать Бену простой вопрос:
Джош [13:58] Каковы риски, если кто -то выполнил Flushall в наших экземплярах Redis?
Бен [13:58] Ты только что дал мне микросхема
Джош [13:59] rofl Извини:) Я этого не делал, для записи
Бен [14:00] Все виды злобности произойдут … очереди работы будут промыты, будет потенциал для дублирующих уведомлений, графики временной шкалы начнут ударить ES вместо кэширования, и даже больше:) Это сделает очень плохой день:)
Не волнуйтесь, Бен выздоровел через несколько часов и снова вернулся к своему старому я. Я должен был сделать предварительный вопрос; Я не хотел предполагать, что я На самом деле промыл наш кластер Redis Анкет Тем не менее, это как бы доказало мою точку зрения. Может быть, троллить ваш SRE, и измерение их пота — хороший способ планирования катастроф …
ТАК. Я определил потенциальную проблему. Было бы очень плохо, если бы Редис покраснел. Каковы риски этого?
Наши кластеры Redis развернуты с первичными и вторичными экземплярами в нескольких зонах доступности в AWS, с автоматическим переключением переключения до вторичного в случае первичного сбоя. Это симпатичное развертывание Redis Redis; Мы можем потерять целые экземпляры, не теряя данных и даже не влияя на другие услуги.
К сожалению, предотвращение человеческой ошибки намного сложнее, и по какой-то причине Redis делает ее мертвым, чтобы удалить все ваши данные с помощью одной команды, введенной в неправильную консоль. Наша архитектура не защищалась от этого. Хотя наша команда знает об этом, есть довольно хороший шанс, что будущий разработчик может совершить эту ошибку.
На самом деле, моя подруга Молли Струв -старший. SRE в Kenna Security, вспоминает ситуацию, когда произошло нечто подобное:
Мы внесли изменение в какой -то код, который привели к тому, что старые значения кэша в Redis сломались с новым кодом. Таким образом, мы бы запросили старое значение, и это было не то, что ожидал код. Вместо того, чтобы отказываться от кода, один из наших инженеров подумал, что было бы хорошо запустить Rails.cache.data.flushdb
И просто начните со свежего кеша.
Как и Honeybadger, Kenna использует Redis для нескольких вещей-один из них-кеш-образец для их применения Ruby on Rails. Команда, упомянутая Молли, Rails.cache.data.flushdb
, это Ruby on Rails, эквивалентный открытию консоли Redis и вызова Flushdb
(который удаляет все данные в текущей базе данных).
К сожалению, Redis также использовался для кэширования данных отчетов от Elasticsearch (что мы также делаем в Honeybadger, кстати), и именно здесь все пошло не так. Когда база данных Redis была промыта, кэш должен был быть восстановлен с нуля, что ошеломило их кластер Elasticsearch:
У нас есть страница «панель инструментов», где клиенты могут загрузить часть всех своих отчетов (подумайте сотни), и когда клиенты начали биться без кеша, Elasticsearch освещалась как рождественская елка. Процессор был максимально на всех узлах по всем направлениям. В конце концов, это была безумная схватка, чтобы открыть несколько консолей для повторного привлечения отчетов.
После того, как системы Кенны были восстановлены, Молли работала с командой разработчиков, чтобы определить шаги, которые они могли бы предпринять, чтобы предотвратить то же самое в будущем. Они придумали творческую гарантию для новых разработчиков, которые, возможно, не осознают, что очистка кеша рельсов — это разрушительное действие: Они сделали все производственные прикладные приложения только для чтения по умолчанию .
К счастью, инцидент Кенны не был катастрофическим — они смогли оправиться от него после небольшого времени простоя. Было бы намного хуже, если бы несчастный разработчик случайно назвал Flushall
–Ко, промывает все Базы данных REDIS — в течение FlushDB
. Это было бы легкой ошибкой под давлением, особенно когда отчеты об исключениях уже катятся (я упоминал, что они также используют Honeybadger?)
Позвольте мне задать вам быстрый вопрос: что произойдет, если кто -то позвонит в вашу консоли Redis?
Если ответ: «Весь ад сложится», то вы можете рассмотреть возможность предпринять профилактические действия. Вот с чем мы пошли; Конечно, это мы (я более чем немного параноик) — ваш пробег может варьироваться.
Во -первых, доступ к Redis через Клиенты (то есть в консоли Rails) должен запретить использование Flushall
и Flushdb
команды полностью. Разработчики никогда необходимо запустить эти команды в производстве; Это вызвало бы серьезные проблемы, так зачем их вообще?
Если вы пользователь Ruby/Rails, не стесняйтесь украсть эту суть Анкет Если вы хотите чего -то более полного, Смотрите суть Молли Анкет Если вы используете другой язык программирования, надеюсь Есть способ отключить эти команды, но даже если нет, не волнуйтесь, я вас получил.
Конфигурация Redis, которую каждый должен использовать
Майк Перхам, создатель Sidekiq (Безусловно, самая популярная рубиновая фоновая система работы с потрясающей бизнес -моделью ), знает кое -что о Redis. Sidekiq строится на вершине Redis, чтобы обеспечить невероятно надежную и эффективную систему работы.
Я спросил Майка, какие лучшие практики он рекомендует своим клиентам, многие из которых имеют критически важные развертывания Redis (подумайте Netflix и Oracle). Он сказал мне, что пользователи, которые обеспокоены безопасностью их данных Redis, должны Отключить разрушительные команды полностью через файл конфигурации Redis.
Этот подход имеет дополнительное преимущество, которое команды отключены повсюду, в том числе в Redis-cli
консоли. Следующая конфигурация должна быть добавлена в Redis.conf
:
rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "" rename-command SWAPDB ""
Переименование вышеупомянутых команд в пустые строки означает, что они больше не будут существовать в качестве команд Redis. Если вы все еще хотите иметь возможность назвать их в редких (и преднамеренных) обстоятельствах, вы можете переименовать их в что -то секретное:
rename-command FLUSHALL SUDO_FLUSHALL_222ed15a rename-command FLUSHDB SUDO_FLUSHDB_2a3bdd5e
Например, вы можете поместить эти команды в пейзаж Судного дня, который имеет доступ только к вашей операционной команде. Относитесь к ним как к ядерным кодам вашей компании.
Конечно, всегда есть предостережение 🤦
Мы используем сервис Amazon Elasticache для размещения наших кластеров Redis, и после некоторых исследований я узнал, что Elasticache не обеспечивает прямой доступ к Redis.conf
, и это не обеспечивает Параметр конфигурации Redis для Переименовать Command
Анкет Поэтому, к сожалению, хотя наши прикладные консоли безопасны, мы все еще должны обрабатывать Redis-cli
с осторожностью.
В конце концов, мы добавили примечание об этом в нашу внутреннюю пьесу Redis и время от времени возвращаемся к документации Elasticach, чтобы увидеть, дает ли Amazon доступ к Переименовать Command
Анкет
Сбои неизбежны
Если бы можно было предотвратить 100% сбоев до их возникновения, наша работа была бы намного проще. Нам не понадобятся ротации или посмерти по вызову, и мы все могли бы код полный рабочий день. К сожалению, мы живем в реальном мире, где правила хаоса и энтропия гарантируют, что наши системы постоянно ухудшаются.
Есть риск во всем, что мы делаем. Чтобы отправить стабильные заявки, мы должны предпринять действия, которые минимизируют риск. При этом мы уменьшаем (но не устраняем) потенциал для сбоев.
Возможность оценить риски, связанные с вашими действиями, значительно увеличивает вашу ценность в качестве разработчика.
История Молли и другие убедили меня в том, что с нами может легко случиться то же самое; (воспринимаемый) риск был высоким. Решение — разбор потенциально разрушительные команды или затруднение их выполнения — было относительно просто.
Есть название для комбинации высокого значения и минимальных усилий: низко висящих фруктов. В контексте программного обеспечения это идея, что если вы можете многое получить, внесение небольших изменений, это, вероятно, стоит сделать. Это казалось, что это было в сладком месте устранения большого риска для небольшого количества усилий. Вроде как первый раз, когда я установил Honeybadger … 😉
Эта история была адаптирована из электронного письма, которое я недавно отправил в нашу новостную рассылку сообщества, выровняясь. Если вам понравилось, Не стесняйтесь подписаться.
Оригинал: «https://dev.to/honeybadger/what-if-i-called-flushall-on-your-redis-instance-2gc1»