Рубрики
Uncategorized

Сохраняйте спокойствие и обновитесь на

История о модернизации, которая пошла ужасно неправильно, но это научило много ценных уроков. Теги от elasticsearch, Ruby, Rails, DevOps.

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

Взлом материала является частью того, чтобы быть разработчиком, но это никогда не делает его легче, когда это происходит с вами. История, которую я собираюсь поделиться, это из моего предыдущего работодателя, Kenna Security. Это часто называют «отключением Elasticsearch Of 2017», и именно самое большое оторжение Кенна когда-либо испытывала.

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

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

  • Узел: Ради этого поста, всякий раз, когда я говорю узел Я имею в виду сервер, который работает elasticsearch
  • Кластер: узлы сгруппированы вместе, чтобы сформировать кластер. Кластер — это коллекция узлов, которые все работают вместе, чтобы служить ElaSticsearch Projects.
  • Elasticsearch 2.x -> 5.x: В этом посте я поговорим о обновлении с 2.x до 5.x. Несмотря на то, что цифры прыгают по значению 3, elasticsearch версии 5 на самом деле фактически единственная версия удара от 2. В то время elasticsearch решил обновить, как они пронумеровали свои версии, чтобы соответствовать основным языкам, который способствует его, поэтому число подпрыгивает по значению 3.

Хорошо, теперь к хорошему веду!

Год был 2017 год. Это было в конце марта, а время пришло модернизировать наш массивный 21 узел Elasticsearch Cluster. Подготовка прошла несколько недель, получая кодовую базу, готовую к обновлению, и все были очень взволнованы. Последний раз, когда мы улучшили Elasticsearch Iearch, мы увидели огромные успехи производительности, и мы не могли дождаться, чтобы увидеть, какие преимущества мы получим от обновления на этот раз. Мы решили сделать обновление 23 марта, что было в четверг вечером.

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

Обновление вовлечено:

  1. Выключение всего кластера
  2. Обновление Elasticsearch
  3. Развертывание наших изменений кода для приложения
  4. Обратно кластер назад

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

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

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

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

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

Мы понятия не имели, если кто-нибудь ответит. Как многие из вас знают, когда вы размещаете вопрос на форуме, подобном этому или Stackoverflow, либо вы получите ваш ответ, либо вы можете просто получить много сверчков. Везло за нас, это было первое. Многое к нашему удивлению, кто-то предложил помочь, а не только кто-либо, один из старших инженеров упругими, Джейсон Тедор!

Не собираюсь лгать, мы были немного благоговедят и звездочками, когда мы обнаружили, что один из основных разработчиков Elasticsearch был в нашем случае. Обсуждение нитей на посте превратилось в частное письмо с нами, разделяем все данные, которые мы могли бы помочь Джейсону выяснить, что происходит с нашим кластером. Это взад и вперед длилось все выходные и на следующую неделю.

Я не собираюсь на сахарную пальто, за это время наша команда была на особом уровне ада.

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

Учитывая, что Elasticsearch находится на краеугольном камне платформы Кенны, как вы можете себе представить, клиенты и руководство не были счастливы во время всего этого.

Наш VP инжиниринга постоянно получал телефонные звонки и сообщения, спрашивающие обновления. Без решения видно, мы начали говорить о слову «R». Было ли пора откатиться? К сожалению, у нас не было плана для этого Но это не может быть так тяжело, верно …? Ооооо, насколько мы неверны в этом предположении. Вскоре мы узнали, что, как только мы обновились, мы не могли на самом деле откат. Чтобы «откатиться», мы должны были бы выдержать совершенно новый кластер и reindex (копировать) в нее все наши данные.

Мы рассчитали, что это займет 5 дней, которые не были хорошими новостями, так как мы уже недели почти неделю. Однако без других хороших вариантов мы встали кластер с Elasticsearch 2.x и запустили лозунг оно обозначить все наши данные в него. Тогда среда, 29 марта закаталась вокруг.

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

АЛЛИЛУЙЯ!!! 🙌 Оказывается, ошибка, которую он нашел, был в исходном коде Elasticsearch Islearch, и он нашел его благодаря информации, которую мы ему дали. Он немедленно выпустил патч для Elasticsearch и дал нам обходной путь, чтобы использовать, пока патч не был объединен и официально не выпущен. Когда я реализовал обходной путь, это было похоже на ночь и день, наш кластер немедленно стабилизировался, что вы можете увидеть на графике ниже.

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

1. Иметь план отката

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

Худший сценарий дерьма из модернизации, так что вы готовятся ни к чему. Таким образом, если/когда что-то подходит, у вас есть план. Это может быть очень просто, как инженер-программист, чтобы сосредоточиться на вашем коде. Код для обновления ELASTICSearch может быть откатывается с простым возвратом PR, но мы никогда не рассматривали, если сам программное обеспечение и данные могут откатиться после его обновления.

2. Делать тестирование производительности

Мы вошли в это обновление, предполагая, что это будет так же здорово, как последнее. Программное обеспечение становится только лучше, верно? НЕПРАВИЛЬНЫЙ! Но из-за этого слепого предположения мы никогда не проводили никаких тяжелых испытаний. Мы подтвердили, что весь код работал с новой версией Elasticsearch, но это было. Всегда всегда, всегда тестируйте новое программное обеспечение.

Мне все равно, какое программное обеспечение вы обновляете. Мне все равно, насколько стабильно и широко используются, что программное обеспечение, вы должны пройти тестирование производительности! Хотя программное обеспечение в целом может выглядеть хорошо и стабильно 99% своих пользователей, вы никогда не знаете, может ли ваше использование в случае небольшой части, которая имеет ошибку или не определяется. Многие компании работали на Elasticsearch 5, когда мы обновились до него, но ни один из них не побежал в конкретной ошибке, которую мы сделали. С момента отключения мы реализовали стратегию тестирования, которая позволяет нам сделать Elasticsearch запросы на несколько индексов, чтобы сравнить производительность при изменении кластеров.

3. Не игнорируйте небольшие предупреждающие знаки

Это не то, что я охватил в истории, так как это произошло хорошо перед обновлением. Когда мы изначально работали над изменениями кода для этого обновления, мы сделали все тестирование на местном уровне. Во время этого тестирования мы получили разрушение Elasticsearch в нашей местной среде несколько раз. Еще раз, мы подумали, что это не было никакого способа быть проблемой с обновленным программным обеспечением. Это должно было быть проблемой с нашей настройкой или нашей конфигурацией. Мы настраивали некоторые настройки, чтобы сделать его стабильным и поступили на изменение кода для обновления.

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

Это дает нам 3 урока. К сожалению, все эти вышеуказанные уроки были изучены трудным путем, не следование им во время этого модернизации. Теперь я хочу переключить передач, потому что эти следующие 3 урока — это вещи, которые стали невероятно хорошо во время обновления. Когда я оглядываюсь на весь опыт, довольно легко увидеть, что если эти следующие 3 урока не прошли хорошо, Fallout с модернизации было бы хуже.

Я уверен, что некоторые из вас думают, извините, что хуже? Вы были в течение почти недели, как он мог ухудшиться?! Поверьте мне, это могло быть хуже, и я думаю, что это станет ясно с этими следующими 3 уроками.

4. Использовать сообщество

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

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

Многие люди доберутся до общины в качестве последнего курорта. Я здесь, чтобы сказать вам, не ждать! Не ждите, пока вы не будете в конце своей веревки. Не ждите, пока вы не пострадали через времена простоя. Прежде чем дойти до конца своей веревки и найдите свою спину против стены, спросите! Вы можете спасти себя и вашу команду много борьбы и разочарования. Я очень горжусь тем, что мы повернулись к сообществу почти сразу и окупились. Конечно, это может не окупить каждый раз Но так просто спросить, почему бы не дать ему выстрел? Худший случай, это поможет вам организовать все ваши мысли вокруг ваших усилий отладки.

5. Поддержка руководства и управления имеет решающее значение

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

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

Наш VP также никогда не колебался в его доверие, что мы будем выяснить это. Он был воплощением спокойствия, круто и собрал все время, и это то, что держало нас вперед. Его любимое высказывание — Потерпеть неудачу вперед И он никогда не показал, что больше, чем во время этого отключения. Сегодня потерпели неудачу вперед является одним из ценностей краеугольного камня в инженерной культуре Kenna, и мы используем эту историю в качестве примера этого. Если бы у нас был другой VP, я уверен, что получилось бы очень по-другому.

Таким образом, для тех из вас, кто читает это, кто является VPS, теми из вас, кто является руководителями, теми из вас, кто является руководителем C-Suite, слушать! Возможно, вы не будете теми, которые выдвигают код, но я гарантирую роль, которую вы играете, намного больше и гораздо более важно, чем вы знаете во время этих сценариев. Как вы реагируете, собирается установить пример для остальной команды. Быть их чирлидером. Быть их защитником.

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

6. Ваша команда имеет значение

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

Быть разработчиком — это не только работа с компьютерами, вы также должны работать с людьми. Это отключение действительно поехало в точку домой для меня. Это была команда из 3 из нас работающих 15+ часов в течение отключения, и это был жестокий! Мы проходили через каждую эмоцию в книге, от грустно злиться на уныло. Но, а не эти эмоции, нарушающие нас все вниз, они объединили нас вместе.

Это был большой момент AH-HA для меня, потому что это заставило меня осознать, что персонаж — это все во времена кризиса. Вы можете научить людей Tech, вы можете показать им, как кодировать, вы можете привить хорошие архитектурные принципы в их мозги, но вы не можете преподавать характер. Когда вы нанимаете, посмотрите на людей, которых вы интервью. Действительно узнать их и оцениваю, если бы они кто-то, с кем вы хотели бы вернуться против стены, с которыми огонь. Будут ли они прыгать, когда вам нужны, нет вопросов? Если ответ да, нанять их, потому что это не то, что вы можете преподавать.

С этим списком уроков, которые мы узнали из этого отключения, завершены. На технической стороне:

  1. Иметь план отката
  2. Делать тестирование производительности
  3. Не игнорируйте небольшие предупреждающие знаки

На нетехнической стороне уравнения:

  1. Использовать сообщество
  2. Поддержка руководства и управления имеет решающее значение
  3. Ваша команда имеет значение

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

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

Охрана Elasticsearch 2017 2017 года печально известна в безопасности Kenna, но не так, как вы думаете. Как жестокий, как и для команды, и так же плохо для бизнеса, как это было в то время, это помогло нам построить основу для инженерной культуры Kenna. Это дало все историю, чтобы указать на то, что сказано, что это кто мы. Что там произошло, это нас! С учетом того, я думаю, что здесь есть бонусный урок.

Когда я говорю «твой» здесь, я имею в виду вас лично, и я также имею в виду вашу команду и вашу компанию. Это отключение было вызвано командой мисс. У нас есть это, и мы обнимаем это. В нашей промышленности, отключениям и простоях часто являются табу. Когда они случаются, кого-то часто обвиняют, возможно, выстрели, мы пишем пост в Мортете, а затем мы быстро подметаем его под ковриком и надеемся, что все забывают об этом. Это не то, как это должно работать.

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

Счастливое кодирование! 😃

Этот пост был основан на разговоре, я дал на RubyConf 2019 называется elasticsearch 5 или и бюст!

Оригинал: «https://dev.to/molly/keep-calm-and-upgrade-on-29bi»