Опции для мультисайтовой высокой доступности с Puppet


14

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

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

Существуют ли какие-либо стандартные методы обеспечения высокой доступности марионеточных кукол?


1
Я правильно понял ваш вопрос? Вы ищете способ иметь избыточного хозяина марионеток в случае, если мастер марионеток недоступен?
Hrvoje Špoljar

Это зависит от того, как вы используете марионетку. Существует много гибкости. Например, вы используете сохраненные конфиги?
Zoredache

3
Вы смотрели на «марионетку без хозяина»? Суть в том, что у каждого агента есть проверка манифестов, и они применяют их локально. В конечном итоге вы используете gitили, svnили, rsyncили любую другую систему контроля версий, которую вы используете, именно то, что вам нужно для масштабирования, а не марионеточный мастер.
Ladadadada

3
Просто подсказка для решения активно-активного вопроса: вы можете использовать anycast для объявления одного и того же ( «виртуального» / «Service-» ) IP из обоих центров обработки данных. Мы делаем это для наших DNS-серверов. В каждом центре обработки данных наши балансировщики нагрузки объявляют один и тот же IP-адрес anycast. Наша маршрутизация предпочитает локальный балансировщик нагрузки, но в случае сбоя возвращается к другим DC (~ «больше не объявляет anycast IP»).
Мишельник

1
Я вижу, что одной из новых функций для puppet 3.0 является поддержка SRV-записи , с чем люди в Windows хорошо знакомы и могут помочь с материалами сайта.
sysadmin1138

Ответы:


13

На самом деле Puppet хорошо подходит для мультимастериальных сред с предостережениями. Основным? Многие части Puppet хотели бы быть централизованными. Центр сертификации, службы инвентаризации и панели мониторинга / отчетов, пакетные файлы и сохраненные конфигурации - все они в своих лучших проявлениях (или просто требуют) настройки, в которой есть только одно место для общения.

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


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

Модули и манифесты

Эта часть проста. Контроль версий им. Если это распределенная система управления версиями, то просто централизуйте и синхронизируйте, а также измените поток push / pull по мере необходимости на сайте аварийного переключения. Если это Subversion, то вы, вероятно, захотите сделать репозиторий svnsyncна своем сайте аварийного переключения.

Центр сертификации

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

  • Должен ли один мастер действительно видеть свой собственный сертификат, представленный в аутентификации клиента для входящего соединения от другого мастера, как действительный?
  • Будет ли это надежно работать для службы инвентаризации, приборной панели и т. Д.?
  • Как добавить дополнительные действительные имена альтернативных DNS в будущем?

Я не могу честно сказать, что я провел тщательное тестирование этого варианта, так как он кажется ужасным. Однако, похоже, что Puppet Labs не хотят поощрять эту опцию, как отмечается здесь .

Итак, у нас есть центральный CA-мастер. Все доверительные отношения остаются работоспособными, когда ЦС не работает, поскольку все клиенты и другие мастера кэшируют сертификат ЦС и CRL (хотя они не обновляют CRL так часто, как должны), но вы не сможете подписывать новые сертификаты до вы создаете резервную копию основного сайта или восстанавливаете мастер CA из резервных копий на отказоустойчивом сайте.

Вы выберете одного мастера в качестве CA, и все остальные мастера отключат его:

[main]
    ca_server = puppet-ca.example.com
[master]
    ca = false

Затем вы захотите, чтобы центральная система получала весь трафик, связанный с сертификатами. Есть несколько вариантов для этого;

  1. Используйте SRVподдержку новой записи в 3.0, чтобы указать все узлы агента в нужное место для ЦС -_x-puppet-ca._tcp.example.com
  2. Настройте ca_serverопцию конфигурации во puppet.confвсех агентах
  3. Проксируйте весь трафик для связанных с CA запросов от агентов на правильный мастер. Например, если вы запускаете все ваши мастера в Apache через Passenger, то настройте это на не-CA:

    SSLProxyEngine On
    # Proxy on to the CA.
    ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-ca.example.com:8140/$1
    # Caveat: /certificate_revocation_list requires authentication by default,
    # which will be lost when proxying. You'll want to alter your CA's auth.conf
    # to allow those requests from any device; the CRL isn't sensitive.
    

И это должно сделать это.


Прежде чем мы перейдем к вспомогательным услугам, примечание стороны;

DNS-имена для главных сертификатов

Я думаю, что это самая веская причина для перехода на 3.0. Скажем, вы хотите указать узел на «любой старый рабочий мастер».

В версии 2.7 вам понадобится общее имя DNS, как puppet.example.com, и все мастера нуждаются в этом в своем сертификате. Это означает установку dns_alt_namesв их конфигурации, повторную выдачу сертификата, который был у них до того, как они были настроены в качестве главного, повторную выдачу сертификата, когда вам нужно добавить новое DNS-имя в список (например, если вы хотите, чтобы несколько DNS-имен агенты предпочитают мастеров на своем сайте) .. некрасиво.

С 3.0 вы можете использовать SRVзаписи. Дайте всем своим клиентам это;

[main]
    use_srv_records = true
    srv_domain = example.com

Тогда для мастеров не нужно никаких специальных сертификатов - просто добавьте новую запись в свой SRVRR at, _x-puppet._tcp.example.comи все готово, это живой мастер в группе. Более того, вы можете легко сделать логику выбора мастера более сложной; «любой старый рабочий мастер, но предпочитает тот, который находится на вашем сайте», устанавливая разные наборы SRVзаписей для разных сайтов; не dns_alt_namesнужно


Отчеты / Панель инструментов

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

[master]
    reports = http
    reporturl = https://puppetdash.example.com/reports/upload

... и все готово Ошибка загрузки отчета не является фатальной для запуска конфигурации; это будет просто потеряно, если тост сервера приборной панели.

Инвентаризация фактов

Еще одна приятная вещь, которую нужно приклеить к вашей приборной панели - это служба инвентаризации. Если в документации facts_terminusуказано значение, restрекомендуемое в документации, это фактически нарушит работу конфигурации, когда центральная служба инвентаризации не работает. Хитрость здесь в том, чтобы использовать inventory_serviceконечную остановку на нецентральных мастерах, что допускает постепенный отказ.

facts_terminus = inventory_service
inventory_server = puppet-ca.example.com
inventory_port = 8140

Настройте центральный сервер инвентаризации для хранения данных инвентаризации через ActiveRecord или PuppetDB, и он должен постоянно обновляться, когда служба доступна.


Итак, если вы согласны с довольно скромной средой управления конфигурацией, где вы даже не можете использовать ЦС для подписи сертификата нового узла, пока он не будет восстановлен, тогда это может работать просто отлично - хотя это было бы очень приятно если бы некоторые из этих компонентов были более дружественными к распространению .


1
+1 за СА. Обратите внимание, что вы можете синхронизировать / контролировать версию всех вкусностей CA и просто не активировать их на «резервных» puppetmasters до тех пор, пока не возникнет ситуация перехода на другой ресурс (в этот момент вы включаете биты CA на своем новом «master» и обновляете SRVзапись). соответственно - SRVзаписи кажутся мне самым элегантным решением, несмотря на мою общую амбивалентность по отношению к ним ...)
voretaq7

1
@ voretaq7 Это хороший момент - просто настройка при сбое была бы намного менее трудоемкой, чем этот вид активного / активного развертывания.
Шейн Мэдден

2
В качестве дополнения я также внес обновление в руководство по масштабированию с несколькими мастерами в документах по куклам, в котором также содержится хорошая информация: docs.puppetlabs.com/guides/scaling_multiple_masters.html
Шейн Мэдден

8

Ладададада описывает подход «кукловодов без хозяина», с которым я больше всего знаком (в основном это то, что мы делаем с Радминдом в моей компании). Точнее, это «несколько мастеров, синхронизированных внешним процессом», где любой данный сервер может (теоретически) обслуживать всю нашу вселенную в чрезвычайной ситуации.

В нашем случае из-за природы Radmind мы просто rsyncтранскрипты и файлы данных с утвержденного мастера на сервер Radmind каждого удаленного сайта, и клиенты получают свои обновления с сервера с коротким именем хоста radmind(с помощью магии resolv.confэто оценивает radmind.[sitename].mycompany.com- всегда локальный сервер Radmind. Если локальный сервер не работает, его достаточно легко переопределить и указать на сервер любого другого сайта).

Этот тип процесса rsync, вероятно, будет работать и в вашей ситуации, но, вероятно, он неоптимален по сравнению с решением на основе контроля версий.


Для puppet или chef система на основе контроля версий имеет больше смысла, чем простой rsync, по нескольким причинам - большая из них в том, что вы управляете версиями сценариев puppet (а не целых образов ОС, как это было бы с Radmind).
В качестве дополнительных преимуществ управления на основе управления версиями у вас может быть несколько человек, работающих над хранилищем одновременно (отличный выигрыш для параллелизма), вы получаете историю изменений по существу бесплатно, и если кто-то нарушает среду Puppet, вы легко откатываетесь (предполагая, что вы ' используете gitвы также , git blameкоторый делает то , что он говорит на олово).
Креативное ветвление и объединение даже позволяет вам выполнять масштабное обновление ОС или другой переход в рамках инфраструктуры управления версиями - как только вы все сделаете правильно, просто переключитесь на новую ветку и (надеюсь), что рабочий процесс будет просто работать.

Если бы я реализовал это здесь, я бы, вероятно, воспользовался хуками pre-commit и post-commit в git, чтобы гарантировать, что конфигурируемые марионеточные конфигурации являются нормальными (на стороне клиента pre) и вытолкнуть их в остальную часть вселенной, если они are (пост на стороне сервера - возможно, также вызывает обновление среды, если ваши политики развертывания допускают такое поведение).

С точки зрения запуска новых серверов puppetmaster на каждом сайте, вы можете просто проверить среду puppet для каждого удаленного puppetmaster и использовать либо описанную выше хакерскую утилиту resolv.conf / hostname, либо IP-адреса службы anycast, перенаправленные на локальные системы, как предложил Мишельник ( последний удобен, если вы хотите, чтобы автоматическое переключение при сбое (если взорвался мастер puppetmaster одного сайта) обрабатывало, чтобы каждый сайт видел «правильного» puppetmaster и не засорял ваши WAN-ссылки, пытаясь получить обновления.


Люди в Brain Tree Payments , по-видимому, объединили решения для управления версиями и rsync вместе с некоторыми пользовательскими задачами Capistrano - их решение, кажется, наполовину обделено в том смысле, что оно все еще опирается на элементы ручного рабочего процесса, но его можно адаптировать и автоматизировать без слишком много работы.
У меня параноидальный компульсивный тестер есть любовь к их noopэтапу проверки здравомыслия - ненавистник ручных процессов во мне желает некоторого уровня автоматизации вокруг него ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.