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

Медленная передача файла марионетки

У меня есть марионеточный хозяин и рабы в разных центрах обработки данных. Задержка между ними составляет ~ 40 мс. Когда я запускаю "puppet agent --test" на ведомом устройстве, чтобы применить последний манифест, для завершения требуется ~ 360 секунд.

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

Это пример файла в моем манифесте:

file { "/etc/rsyncd.conf" :
    owner       => "root",
    group       => "root",
    mode        => 644,
    source  => "puppet:///files/rsyncd/rsyncd.conf"
}

Запуская puppet-profiler вижу вот это:

10.21s - File[/etc/rsyncd.conf]

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

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

Отказ от ответственности: я один из разработчиков Puppet.

Когда вы исходите из файлов с puppet:// URL-адреса, Puppet сделает два SSL-подключения обратно к файловому серверу - одно для метаданных, включая контрольную сумму, а другое для содержимого. Вторая сделана, надеюсь, как и ожидалось, только если содержимое на диске устарело.

Сама передача осуществляется по стандартному протоколу HTTPS, ничего особенного не происходит, поэтому, помимо накладных расходов SSL и затрат на задержку двух подключений, нет причин, по которым Puppet должен быть таким медленным.

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

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

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

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

По моему опыту, более старые версии марионетки сериализовали и DE-сериализовали все данные ФАЙЛА при их передаче туда и обратно. А особенно плохо было и с переносом больших (много мегабайт) двоичных файлов.

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

Похоже, что изменение коснулось марионетки 0.25 - см. Ошибку 583 (http://projects.puppetlabs.com/issues/583) при конвертации из xlrpc в покой.

Мое решение в то время заключалось в использовании марионетки для отправки предварительных общих ключей rsync и использования демона rsync для обслуживания файлов (только для чтения) для конечных клиентов. Rsync может быть довольно эффективным и передавать и обновлять множество двоичных данных.

Поэтому проверьте версии марионеток, но также посмотрите, может ли rsync работать на вас в качестве сравнения производительности.

Я нашел проблему. Похоже, что хотя я настроил свой Apache для запуска puppetmaster через пассажира, конфигурационный файл так и не попал в мой httpd.conf. Мой кукловод по-прежнему использовал настройки по умолчанию. (netstat -anp | grep 8140 показал, что apache не использует этот порт).

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

Проверьте комментарий, который я оставил http://projects.puppetlabs.com/issues/3365 о наличии большего количества файлов в целевом каталоге.

Салудо!