Статьи

Знакомство с обезьяной Хаоса

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

Chaos Monkey

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

Есть множество различных инструментов, которые делают это (включая Havoc Stelligent ), вероятно, наиболее известным из них является Chaf Monkey от Netflix . Он доступен бесплатно и с открытым исходным кодом. С другой стороны, это не самый простой инструмент для начала работы, но, надеюсь, этот пост может помочь в этом.

Chaos Monkey — это бесплатная программа с открытым исходным кодом, доступная на странице GitHub Simian Army в Simflix . Будучи нацеленным на группу автоматического масштабирования (ASG), Chaos Monkey будет случайным образом удалять экземпляры EC2, вызывая восстановление вашего приложения. Изначально Chaos Monkey настроен на работу только в рабочее время, что позволяет увидеть, насколько устойчива ваша архитектура в контролируемых условиях, когда вы находитесь в офисе; в отличие от наблюдения за этим в дикой природе, когда вы спите в постели.

Краткое руководство по Chaos Monkey показывает, как настроить конфигурацию запуска, группы автоматического масштабирования и домены Simple DB с помощью инструментов AWS CLI. В зависимости от вашего терпения и свободного времени, вы можете пройти через это. Однако у Netflix есть еще один инструмент, Asgard , который делает настройку всех этих вещей легким, и [у нас есть запись в блоге, которая делает настройку Asgard легким делом], поэтому в целях этого объяснения, мы собираемся предположить, что вы Использую Асгард.

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

Первое, что вам нужно сделать после того, как вы настроите Asgard, это определить приложение для его использования. Выберите меню « Приложения» и выберите « Создать новое приложение» . Создайте новое отдельное приложение под названием MonkeyApp , введите свое имя и адрес электронной почты и нажмите « Создать новое приложение» .

После настройки нового приложения вам нужно будет создать группу автоматического масштабирования. Для этого перейдите в меню « Кластер» и выберите « Группы автоматического масштабирования» , а затем нажмите кнопку « Создать новую группу автоматического масштабирования» . Выберите monkeyapp в раскрывающемся списке приложения, затем введите 3 для всех полей количества экземпляров (желательно, мин., Макс.). Значения по умолчанию подходят для всего остального, поэтому нажмите « Создать новую группу автоматического масштабирования» внизу страницы.

После запуска группы автоматического масштабирования вы увидите, что она раскручивает экземпляры EC2 в соответствии с вашим размером ASG. Если бы вам пришлось завершить эти экземпляры вручную, в течение нескольких минут на их месте появился бы другой экземпляр. Таким образом, вы можете стать вашей собственной Обезьяной Хаоса, нанося целевые удары по инфраструктуре вашего приложения.

Не стесняйтесь идти дать этому выстрел. Конечно, зачем делать что-то самостоятельно, если вы можете просто заставить компьютер сделать это для вас?

Для настройки Chaos Monkey первое, что вам нужно сделать, это настроить домен Amazon Simple DB для использования Chaos Monkey. В Asgard это очень просто: просто зайдите в SDB и нажмите « Создать новый домен SimpleDB» . Назовите его SIMIAN_ARMY и нажмите кнопку Создать.

Теперь самое сложное в настройке Chaos Monkey для EC2. Chaos Monkey имеет историю плохой игры с OpenJDK, и в целом его установка — это скорее упражнение в администрировании сервера, чем применение облачных концепций, поэтому мы предоставили шаблон CloudFormation, который позволит вам быстро перейти к точке, в которой вы можете просто тренировка (Если вы хотите испачкать руки, вы можете проверить эту суть с командами, которые вам нужно выполнить.)

После того, как вы установили Chaos Monkey, вам нужно внести несколько изменений в конфигурацию, чтобы она заработала:

vi src/main/resources/client.properties

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

vi src/main/resources/simianarmy.properties

Раскомментируйте isMonkeyTimeключ и установите значение true. Этот параметр ограничивает запуск Chaos Monkey в рабочее время, а когда вы играете с Chaos Monkey, это может быть не в рабочее время.

vi src/main/resources/chaos.properties

set simianarmy.chaos.leashed=false
set simianarmy.chaos.ASG.enabled=true
simianarmy.chaos.ASG.maxTerminationsPerDay = 100
set simianarmy.chaos.ASG.<monkey-target>.enabled=true
set simianarmy.chaos.ASG.<monkey-target>.probability=6.0

(Замените <monkey-target> именем вашей группы автоматического масштабирования, вероятно, monkeyapp, если вы следовали указаниям, изложенным выше.) Это забавная часть конфигурации Chaos Monkey. Он высвобождает Обезьяну Хаоса (в противном случае он просто сказал бы, что думает о том, чтобы убить экземпляр, а не делать это на самом деле). Вероятность — это ежедневная вероятность того, что он убьет экземпляр — 1,0 означает, что экземпляр определенно будет убит в какой-то момент сегодня; 6.0 означает, что экземпляр будет убит при первом запуске. И давайте подберем максимальное количество завершений в день, чтобы мы могли видеть, как обезьяна Хаоса сходит с ума.

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

vi src/main/resources/janitor.properties
vi src/main/resources/volumeTagging.properties

и установите simianarmy.janitor.enabledи simianarmy.volumeTagging.enabledв false в соответствующих файлах.

После того, как вы все настроили, следующая команда запустит приложение SimianArmy:

./gradlew jettyRun

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

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

Это те проблемы, которые Chaos Monkey покажет вам, и вы можете определить, где вы не проектировали ошибку.

( ПРИМЕЧАНИЕ. Когда вы все поиграете с Chaos Monkey, вам нужно изменить количество экземпляров группы автоматического масштабирования monkeyapp на 0, в противном случае AWS будет поддерживать эти экземпляры в рабочем состоянии, что может привести к более высокой плате за использование, чем вы. привыкли видеть. В Asgard выберите «Кластер»> «Группы автоматического масштабирования»> «monkeyapp»> «Редактировать» и установите все экземпляры равными нулю, и AWS прекратит работу ваших тестовых экземпляров. Если вы хотите вернуться позже и поиграть, вы можете просто закрыть выключите экземпляры Chaos Monkey и Asgard и включите их, когда будете готовы, в противном случае вы можете просто полностью удалить стеки CloudFormation, и это все очистит для вас. )