Иногда возникает ситуация, когда отправка большого количества запросов от 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 | логический |
| Генерация имени хоста и имени сертификата 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.