Назад | Перейти на главную страницу

Поведение средств управления конфигурацией при отказе

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

Я не включаю Windows PowerShell DSC в этот список, так как мой текущий пользовательский случай состоит в том, что я бы использовал PowerShell DSC для помощи в управлении системами Windows с помощью Puppet, Chef, Ansible, Salt или CF-Engine в качестве общего инструмента управления.

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

Я буду комментировать только те, с которыми у меня есть опыт, то есть Puppet и Ansible. И я опускаю некоторые детали.

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

Говоря об использовании Puppet с мастерами, вы можете иметь избыточность, используя балансировщик нагрузки с реальными мастерами.

Вместо этого в Ansible нет основной концепции, это может делать каждая машина, которая может подключаться к управляемым машинам с помощью ssh / powershell, при условии, что у вас есть способ доступа к playbook. Возможно, вы имели в виду Ansible Tower, который использует БД для своей работы, и вы можете кластеризовать ее при необходимости.

Это приводит нас к реальной избыточности в обоих случаях, то есть к реальным сценариям. Почти во всех случаях я видел, что они оставались в репозитории git, поэтому он изначально избыточен, просто клонируйте его, и вы можете иметь сколько «мастер-копий», сколько захотите.

Надеюсь это поможет.

Если вы посмотрите на соль, единственная информация, которая составляет рабочее соединение между мастером и миньонами, это:

  • тот факт, что миньон может каким-то образом разрешить главный ip
  • открытые ключи миньонов в каталогах / etc / salt / pki / master

Если ваш соляной мастер умрет, системы продолжат работать без каких-либо последствий. Но вы правы, вы не можете вносить какие-либо изменения в свои конфигурации, пока мастер отсутствует. Итак, вопрос в том, как быстро вы сможете его вернуть?

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

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

А также есть Multimaster и Syndic in Salt - Высокая доступность - давняя тема в его развитии.

Чтобы завершить сказанное выше, Chef (при использовании chef-client, chef-solo является чисто локальным и не имеет серверного компонента, который мог бы выйти из строя) требует сервера при каждом запуске. Есть способы использовать данные кеша в случае сбоя, но это определенно не поведение по умолчанию и даже не простое. Мы рекомендуем запускать Chef Server в резервированной / кластерной системе с одним кластером на зону отказа. Ознакомьтесь с продуктом Chef-backend для кластеризации и продуктом Facebook Grocery Delivery для синхронизации на нескольких серверах.

Итак, сначала я хочу поблагодарить jscott, Fredi, user378016 и coderanger за все ответы.

Чтобы ответить на мой собственный вопрос

  • Для CF-Engine это не проблема, поскольку каждый узел может быть настроен для работы в качестве сервера, и запуски продолжатся, если сервер недоступен.

Все это хорошо задокументировано на сайте CF-Engine, пример можно найти здесь: https://cfengine.com/learn/how-cfengine-works/

  • Для Puppet у вас есть выбор режимов Мастер / Без Мастера, а также их плюсы и минусы.

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

  • Для Chef первоначальный запуск требует, чтобы главный сервер получил политику, но после этого любой запуск будет продолжен с этой текущей политикой, если главный сервер недоступен.

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

  • Для Salt, если главный сервер выходит из строя, конфигурация не применяется, поскольку все действия выполняются на главном сервере

Итак, спасибо user378016 за подтверждение, я думаю, что предоставленный ответ действительно отвечает на это довольно хорошо (постоянная ссылка: https://serverfault.com/a/805791/225383)

  • Для Ansible (например, соли), если главный сервер выходит из строя, конфигурации больше не применяются, так как снова все действия выполняются главными серверами.

Итак, Ansible - непростая задача (снова спасибо Фреди за его ответ). Это дает серьезное преимущество, заключающееся в необходимости установки программного обеспечения Ansible только на один сервер. Плейбуки, которые хранятся на этом «главном», не обязательно запускаются на главном сервере, но могут применяться к другим через SSH. Это, конечно, требует, чтобы все эти поля, которые вы хотите настроить, были доступны через SSH и удовлетворяли определенным предварительным условиям (как указано в инструкции). В некоторых случаях это не всегда так желательно.

Изменить: я должен добавить, что Ansible может работать аналогично puppet-masterless, chef-solo, установив Ansible на управляемом узле и получив конфигурацию откуда-то вроде git, а затем применив конфигурацию локально.


Тем, кому интересно направление, я рекомендую CF-Engine, Chef или Puppet. Хотя Ansible и Salt интересны, для моего случая пользователя, однако, это не оптимальное решение, поскольку мне нужно иметь возможность гарантировать, что политика применяется независимо от того, что с хорошими показателями отчетности, уверенность в том, что SSH всегда доступен, на самом деле не вариант (и да, хотя мы могли бы установить серверные компоненты на каждый компьютер или какой-либо планировщик, чтобы принудительно настроить конфигурацию, это кажется интуитивно противоречащим их исходной архитектуре с самого начала).

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