Иногда возникает ситуация, когда отправка большого количества запросов от puppet-агентов, установленных на кассах, приводит к падению производительности Puppet-сервера. Это происходит по нескольких причинам:

  • нехватка ресурсов процессора,
  • нехватка оперативной памяти,
  • Некорректная настройка puppet-сервера,
  • некорректная настройка puppet-агентов на кассах

Рекомендуется все изменения настроек выполнять сначала внутри контейнера, а затем после удачно подобранных параметров сохранять в переменные окружения контейнера (см. "Сохранение настроек puppet-сервера").

Увеличение количества обработчиков

Чтобы увеличить количество обработчиков, необходимо внутри docker-контейнера puppet_env_puppet_1 в конфигурационном файле /etc/puppetlabs/puppetserver/conf.d/puppetserver.conf задать значение для параметра max-active-instances.

Пример настройки
 max-active-instances: <кол-во одновременно обрабатываемых запросов + 1>
Для корректной работы при количества обработчиков необходимо учитывать объем свободной оперативной памяти (см. "Увеличение оперативной памяти").

Увеличение оперативной памяти

Количество одновременно поднятых инстансов обработчиков (каждый обработчик может обрабатывать только один запрос за раз) по умолчанию вычисляется от количества процессоров на сервере, и вычисляется как nums_cpu-1. На каждый инстанс рекомендуется выделять по 512MB RA + 512MB основному потоку, который отвечает за прочие работы (например за распределение запросов между обработчиками), но по умлчанию на puppet-сервере выделено всего 512 MB RAM. В результате такого распределения может возникнуть дефицит выделенной RAM, что приведет к агрессивной работе сборщика мусора, и как вследствие большая часть ресурсов процессора будет выделяться именно сборщику.

Поэтому первое что надо сделать, это зайти в /etc/default/puppetserver и увеличить размер кучи JAVA_ARGS="-Duser.timezone=UTC -Xms123m -Xmx123m", замените тут 123 на нужное количество.Нужное количество оперетивы вычисляется как 512+(512*кол-во_обработчиков).

Для увеличения объема оперативной памяти необходимо внутри docker-контейнера puppet_env_puppet_1 задать значение для параметра JAVA_ARGS. Например, согласно рекомендации, для 10 обработчиков выделим 512 МБ + 512 МБ * 10 = 5632 МБ:

Пример настройки
 JAVA_ARGS="-Duser.timezone=UTC -Xms5632m -Xmx5632m"


Сохранение настроек puppet-сервера

При обновлении puppet-сервера все настройки, внесенные напрямую в контейнер, будут сброшены. Поэтому для сохранения настроек необходимо использовать переменные окружения контейнера PUPPETSERVER_JAVA_ARGS и PUPPETSERVER_MAX_ACTIVE_INSTANCES. Во избежание перезаписи переменных окружения при обновлении их значения необходимо хранить отдельно или выполнять обновление через docker compose.

  • max-active-instances: ${PUPPETSERVER_MAX_ACTIVE_INSTANCES}

Сохранение настроек в переменные окружения

Файл docker-compose.yaml с преднастроенной по умолчанию конфигурацей для puppet-сервера можно скачать по ссылке.

В этом файле для переменных окружения в compose-файле /opt/artix/docker/puppet_env/docker-compose.yaml PUPPETSERVER_JAVA_ARGS и PUPPETSERVER_MAX_ACTIVE_INSTANCES необходимо установить значения, полученные в результате подбора в разделах "Увеличение оперативной памяти" и "Увеличение количества обработчиков".

Настройка интенсивности запросов на кассах

Если увеличение количества обработчиков и объема оперативной памяти не позволяют обеспечить необходимую скорось работы pupet-сервера, то может помочь уменьшение интенсивности запросов с касс. Подробнее о настройке интенсивности отправки запросов на кассах можно прочитать в статьях "Централизованное обновление" и "Конфигурирование узлов".

Генерация имени сертификатов Puppet на кассе

SSL сертификаты предназначены для организации защищенного соединения между клиентом и сервером. Для генерации имен сертификатов используются шаблоны, задаваемые в конфигурационном файле /linuxcash/cash/conf/hostnamegen.conf.

НаименованиеТип данныхВозможные значенияОписаниеПримечания
generateлогический
  • true
  • false
Генерация имени хоста и имени сертификата puppetПо умолчанию false
certnameимя сертификата PuppetстроковыйШаблон генерации имени сертификата puppet

ИИ

Пример настройки
[main]

...
; шаблон генерации имени сертификата puppet
; По умолчанию cash-%(shopcode)s-%(cashcode)s
;certname = cash-%(shopcode)s-%(cashcode)s 

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

  • shopcod – код магазина;
  • cashcode – код кассы.

Переменные cashcod и shopcode и файл cash.reg,  должны быть указаны в нижнем регистре, иначе касса не выйдет на PUPPET.

  • No labels