Кластер

Установка PostgreSQL для кластера

Цель

Развертывание базы данных PostgreSQL для кластерной конфигурации ПринтМенеджера.

Предусловия

Расчёт максимального количества подключений к БД

Для обеспечения достаточного количества соединений с базой данных настройте параметр max_connections в конфигурационном файле PostgreSQL.

Используйте следующую формулу:

max_connections = (3*N+70)*T

где:

Пример: Для 3 серверов ПринтМенеджер с 6 ядрами каждый: max_connections = (3 х 6 + 70) х 3 = 264.

Шаги установки

Шаг 1. Установите Docker и Docker Compose

Для Ubuntu, Astra Linux и ALT Linux:

sudo apt install docker.io -y
sudo apt install docker-compose -y
sudo systemctl enable docker --now
sudo systemctl status docker

Для РЕД ОС и Red Hat Enterprise Linux:

sudo dnf install -y docker-ce docker-ce-cli
sudo dnf install -y docker-compose
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker 

Шаг 2. Создайте файл docker-compose.yml

Выполните команду для создания файла:

touch docker-compose.yml

Затем отредактируйте файл:

nano docker-compose.yml

Вставьте следующую конфигурацию:

version: "3.7"

services:
  postgres:
    image: postgres:15.15-alpine
    volumes:
      - postgres15:/var/lib/postgresql/data
    command: postgres -N 300
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: printmanager
      PGDATA: /var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    ports:
      - "5432:5432"
    restart: always

volumes:
  postgres15:

Важно: Параметры POSTGRES_USER и POSTGRES_PASSWORD измените на свои значения. Эти данные потребуются для настройки системы.

В строке command: postgres -N 300 вместо 300 укажите значение максимального количества подключений к БД, исходя из количества используемых ПринтМенеджеров.

Шаг 3. Создайте директорию для PostgreSQL

Переместите файл docker-compose.yml в новую директорию:

sudo mkdir /opt/postgres15
sudo mv docker-compose.yml /opt/postgres15
cd /opt/postgres15

Шаг 4. Запустите PostgreSQL через Docker Compose

Выполните команду:

sudo docker-compose up -d

Это запустит контейнер с PostgreSQL и выполнит его настройку.

Возможные ошибки

В Astra Linux может появиться ошибка:

docker.errors.DockerException: Error while fetching server API version: Not supported URL scheme http+docker

Причина: установлен устаревший пакет docker-compose.

Решение: выполните команды:

sudo apt purge docker-compose
sudo apt install docker-compose-v2

Как проверить установку

Убедитесь, что контейнер запущен и база данных доступна:

sudo docker ps

Проверьте работоспособность базы, используя ID её контейнера из предыдущей команды:

sudo docker logs <container_id>

Параметры для дальнейшей настройки

Используйте указанные параметры POSTGRES_USER, POSTGRES_PASSWORD и POSTGRES_DB при настройке на этапе Установка балансировщика HAProxy.

Следующие шаги

Ожидаемый результат

Типовые ошибки

Ошибка Причина Решение
django.db.utils.OperationalError: FATAL: sorry, too many clients already Превышено максимальное количество подключений к PostgreSQL после добавления новых узлов. Увеличить max_connections в конфигурации PostgreSQL:

max_connections = (3×N + 70) × T

где N — количество ядер CPU, T — итоговое число серверов ПринтМенеджер в кластере

Связанные страницы

Установка NFS-хранилища

Цель

Подготовка сервера NFS для совместного хранения данных ПринтМенеджеров в кластерной конфигурации.

Предусловия

Шаги установки

Шаг 1. Установите и запустите NFS

Для Ubuntu, Astra Linux и ALT Linux:

sudo apt install nfs-kernel-server -y
sudo systemctl start nfs-kernel-server.service
sudo systemctl status nfs-kernel-server.service

Для РЕД ОС и Red Hat Enterprise Linux:

sudo dnf install -y nfs-utils
sudo systemctl enable nfs-server.service
sudo systemctl start nfs-server.service
sudo systemctl status nfs-server.service

Шаг 2. Создайте папку для NFS

Создайте директорию /scratch:

sudo mkdir /scratch

Шаг 3. Настройте файл экспорта

Отредактируйте файл конфигурации экспортируемых директорий для редактирования:

sudo nano /etc/exports

Добавьте строку для папки /scratch:

/scratch *(rw,async,no_subtree_check,no_root_squash)

Сохраните файл и примените изменения экспорта:

sudo exportfs -a

Шаг 4. Настройте права доступа

Измените владельца папки:

Установите разрешения для записи:

sudo chmod -R 777 /scratch

Параметры для установки системы

Для установки балансировщика понадобится адрес сервера NFS_ADDR и путь к папке NFS_FOLDER_PATH:

Эта настройка позволяет использовать NFS-хранилище для хранения данных системы управления печатью.


Установка с шифрованием (stunnel)

Stunnel — это прокси с открытым исходным кодом, который позволяет создавать безопасные туннели для взаимодействия с другими компьютерами по протоколу TLS.

Ниже описаны шаги по установке и настройке Stunnel для обеспечения безопасного подключения к серверу NFS.

Установка сервера NFS и Stunnel

Для Ubuntu, Astra Linux и ALT Linux:

sudo apt update
sudo apt install -y nfs-kernel-server stunnel4

Для РЕД ОС и Red Hat Enterprise Linux:

sudo dnf update
sudo dnf install -y nfs-utils stunnel

Настройка сервера NFS

Создайте директорию для экспорта:

sudo mkdir /scratch

Измените владельца папки:

где /scratch – путь к общей директории.

Настройте экспорт директории. Для этого отредактируйте файл конфигурации экспортируемых директорий:

sudo nano /etc/exports

Добавьте строку для папки /scratch:

/scratch 127.0.0.1(rw,sync,no_subtree_check,insecure,no_root_squash)

Обратите внимание: параметр insecure обязателен.

Применение изменений в экспортах:​

Выполните команду:

sudo exportfs -a

Перезапуск службы NFS

Выполните перезапуск службы NFS:

Настройка Stunnel на сервере NFS

Получение сертификатов

Если используются автоматические сертификаты, выпустите дополнительные сертификаты для NFS сервера, выполнив следующие команды на сервере балансировщика:

cd /opt/printum_balancer/scripts
sudo ./generate_certs.sh <HOSTNAME_NFS_SERVER>

где <HOSTNAME_NFS_SERVER> — IP-адрес или доменное имя сервера NFS.

После выполнения команды архив printum_certs.tar.gz, содержащий необходимые сертификаты, будет создан в директории /opt/printum_balancer/certificates/<HOSTNAME_NFS_SERVER>.

На сервере NFS создайте директорию /etc/stunnel/cert:

sudo mkdir /etc/stunnel/cert

Скопируйте архив на сервер NFS и извлеките файлы в эту директорию:

sudo cp printum_certs.tar.gz /etc/stunnel/cert
sudo tar -xvf printum_certs.tar.gz

Если используются собственные сертификаты, скопируйте CA-сертификат, SSL-сертификат и ключ на сервер NFS в эту директорию:

sudo cp ssl_cert ssl_key ca_cert /etc/stunnel/cert
Настройка Stunnel

Создайте файл /etc/stunnel/stunnel.conf со следующим содержимым:

cert = /etc/stunnel/cert/<cert.crt>
key = /etc/stunnel/cert/<cert.key>
CAfile = /etc/stunnel/cert/<ca.crt>

[nfs]
accept = <NFS_STUNNEL_PORT>
connect = 127.0.0.1:2049

где:

Настройка Stunnel для автоматического запуска
sudo systemctl enable stunnel​
Запуск и включение Stunnel

Теперь сервер NFS настроен с использованием шифрования через Stunnel. Для получения дополнительной информации обращайтесь к официальной документации.

Примечание: Если ранее у вас уже был развёрнут балансировщик с использованием нешифрованного соединения с NFS, то для перехода на шифрование с Stunnel вам необходимо выполнить повторную установку балансировщика и всех нод ПМ.

Допускается установка на уже развёрнутые версии.

В сценарии установки балансировщика с помощью скрипта массового развёртывания, укажите следующие значения переменных в файле конфигурации (config.ini):

После изменения значений переменных сохраните файл конфигурации и запустите установку:

sudo ./install_all_offline.sh

В сценарии установки балансировщика вручную обновите балансировщик и все ноды ПМ с указанием переменных NFS_TLS = 1 и NFS_STUNNEL_PORT = <порт_для_Stunnel>.

Ожидаемый результат

Следующие шаги


Типовые ошибки

Ошибка Причина Решение
При отложенной печати появляется ошибка "файл недоступен". NFS-хранилище недоступно или неверно указаны параметры в .env ПринтМенеджера. Выполнить sudo cat /opt/printmanager/.env.

Параметры должны быть:
DRIVER_OPTS_DEVICE:NFS\FOLDER\PATH,
DRIVER_OPTS_Oaddr=NFS_ADDR,nolock,soft,rw,
DRIVER_OPTS_TYPEnfs.

Убедитесь в сетевой доступности NFS-сервера и возможности чтения/записи из NFS_FOLDER_PATH.

Связанные страницы

Установка балансировщика HAProxy

Цель

Установка балансировщика нагрузки HAProxy для кластерной конфигурации ПринтМенеджеров.

Предусловия

Варианты развёртывания схемы с балансировкой

Возможно два варианта развёртывания схемы балансировки:

Шаги установки Массового развёртывания схемы с балансировкой

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

Требования для выполнения массового развертывания

Подключение по SSH

Подтверждение доверия SSH-сертификатов

Права пользователя

Проверка конфигурации

Убедитесь, что файл config.ini заполнен корректно:

Инструкция по запуску скрипта

  1. Перейдите в директорию со скриптом массовой установки:​

    cd /path/to/script
    
  2. Запустите скрипт:​

    sudo ./install_all_offline.sh
    
  3. Если требуются детализированные логи для диагностики, используйте отладочный режим:​

    sudo DEBUG=1 ./install_all_offline.sh  
    

Порядок установки

Шаг 1. Подготовка базы данных и NFS-хранилища​

Подготовка описана в разделах:

Шаг 2. Получение сертификатов

Если используются собственные SSL-сертификаты:

Шаг 3. Запуск установки

Скопируйте дистрибутивы на сервер балансировщика

Скопируйте на сервер балансировщика дистрибутивы Мониторинга, ПринтМенеджера и Балансировщика вместе с файлами контрольных сумм:

Проверьте контрольные суммы
sha512sum -c <имя_файла>.sha512
Распакуйте архив балансировщика
tar xzvf printum-balancer-X3.Y3.Z3.tar.gz
cd printum-balancer-X3.Y3.Z3
Создайте файл конфигурации
cp config_example.ini config.ini
Отредактируйте файл config.ini

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

Сохраните файл config.ini. Этот файл понадобится для будущих обновлений

Выполните установку

Используйте скрипт install_all_offline.sh с правами администратора:​

sudo ./install_all_offline.sh

Если при этом появляется ошибка Permission denied, сделайте файл исполняемым и повторите запуск:

chmod +x install_all_offline.sh
sudo ./install_all_offline.sh
Ожидайте завершения процесса установки

В случае необходимости введите пароль для подключения по SSH и копирования файлов с использованием SCP.

Проверьте корректность установки

Используйте раздел Проверка корректности установки кластера.

Описание конфигурационного файла

Конфигурационный файл config.ini используется для автоматического развёртывания и обновления системы. Он должен содержать обязательные секции, которые обозначаются квадратными скобками: [General].

Каждая секция содержит параметры в формате КОНСТАНТА = ЗНАЧЕНИЕ. Между константой и её значением должен быть знак равенства, обрамлённый пробелами.

Пример: PM_HTTP_PORT = 8010

Если константа не требует значения, её можно удалить, закомментировать или оставить пустой (с пробелом после знака равно).

Пример: SSL_CERT_CA =

Файл должен включать не менее шести секций:

Секция [General]

Секция [General] содержит общие параметры для всех серверов. Ниже приведён перечень доступных констант:

Секция [Balancer]

Секция [Balancer] содержит параметры, необходимые для настройки сервера балансировки.

Доступные параметры:

Секция [Monitoring]

Секция [Monitoring] содержит параметры для сервера, выделенного под систему мониторинга.

Доступные параметры:

Секции [PrintManager_1], [PrintManager_2], ..., [PrintManager_N]

Секции [PrintManager_X] (где X — номер сервера) содержат настройки для подключения к соответствующим серверам с ПринтМенеджером.

Доступные параметры:

Шаги для добавления сервера

  1. В секции [Monitoring] укажите параметр SKIP = true, чтобы предотвратить повторную установку мониторинга.
  2. Для добавления 5 и более серверов с ПринтМенеджером добавьте в файл конфигурации необходимое количество секций, используя следующий шаблон:​
    [PrintManager_ID]
    PM_HOSTNAME =
    USER =
    PASSWORD =
    SSL_CERT =
    SSL_KEY =
    
    где ID — порядковый номер сервера. Убедитесь, что номера серверов идут последовательно, без пропусков (например, [PrintManager_1], [PrintManager_2], [PrintManager_3] и т.д.).
  3. Запустите скрипт массовой установки повторно. После выполнения скрипта в терминале отобразятся ссылки для доступа к админке новых серверов.
  4. Проверьте корректность работы системы по чек-листу.

Шаги установки схемы балансировщика в ручном режиме

Шаг 1. Скопируйте дистрибутивы на сервер балансировщика

Скопируйте на сервер балансировщика дистрибутивы Мониторинга, ПринтМенеджера и Балансировщика вместе с файлами контрольных сумм:

Шаг 2. Проверьте контрольные суммы

sha512sum -c <имя_файла>.sha512

Шаг 3. Распакуйте архив балансировщика

tar xzvf printum-balancer-X3.Y3.Z3.tar.gz
cd printum-balancer-X3.Y3.Z3

Шаг 4. Настройте переменные окружения

Введите следующие команды для настройки (оставайтесь в этом же терминале до завершения установки):

export NFS_ADDR=<NFS_ADDR>
export NFS_PATH=<NFS_FOLDER_PATH>
export DATABASE_URL=postgres://<POSTGRES_LOGIN>:<POSTGRES_PASSWORD>@<DB_HOST>:<PORT>/<BASE_NAME>

Если требуется указать схему базы данных:

export DATABASE_URL=postgres://<POSTGRES_LOGIN>:<POSTGRES_PASSWORD>@<DB_HOST>:<PORT>/<BASE_NAME>?currentSchema=<POSTGRES_SCHEMA>

Если база использует нестандартное табличное пространство:

export DATABASE_TABLESPACE=<DATABASE_TABLESPACE>

где:

Если вы настроили NFS через туннель stunnel, то обязательно укажите:

export NFS_TLS=true

Если порт stunnel отличается от 20490, то укажите еще порт:​

export NFS_STUNNEL_PORT=<NFS_STUNNEL_PORT>

где:

Также вы можете указать логин и пароль для страницы HAProxy:

export STATS_USER=<STATS_USER>
export STATS_PASSWORD=<STATS_PASSWORD>

Если пароль и логин не указан, то будет установлен логин admin и пароль admin. Логин и пароль записаны в файле /opt/printum_balancer/.env.

Шаг 5. Запустите установку

С автоматическими сертификатами:

sudo -E ./install.sh -balancer <BALANCER_ADR> -pm <PM_1> -pm <PM_2> -pm <PM_3>

С собственными сертификатами:

export SSL_CERT=<client.crt>
export SSL_KEY=<client.key>
export SSL_CERT_CA=<ca.crt>
sudo -E ./install.sh -balancer <BALANCER_ADR> -pm <PM_1> -pm <PM_2> -pm <PM_3>

где:

Ожидаемый результат

Если установка прошла без ошибок, то в консоли будет выведено сообщение об успехе и https-адрес для доступа к панели HAProxy:

Статус HAProxy доступен по адресу: https://BALANCER_ADR:7000/

Во время установки балансировщика будут автоматически записаны настройки для балансировщика и ПМов. Архивы находятся в директории /opt/printum_balancer/certificates.

Как проверить установку

Откройте страницу по адресу https://BALANCER_ADR:7000/.

Вы увидите несколько групп строк, группы отделяются заголовками бордового цвета. Каждая группа обозначает часть системы и её статус. После установки всех ПМов строки станут зелеными.

Следующие шаги

Типовые ошибки

Ошибка Причина Решение
Страница состояния балансировщика (HAProxy) и ПринтМенеджеров загружается с ошибкой. Отсутствует или некорректен FQDN (hostname) в DNS для ВМ в составе конфигурации. Проверить наличие и корректность FQDN (hostname) в DNS для всех ВМ в составе отказоустойчивой конфигурации.

Связанные страницы

Установка первого ПринтМенеджера в кластере

Цель

Установка первой ноды ПринтМенеджера в кластерной конфигурации Active-Active.

Предусловия

Шаги установки

Шаг 1. Скачайте дистрибутив на сервер ПринтМенеджера

Первичная установка работает только офлайн. Скачайте предоставленный дистрибутив на сервер с ПринтМенеджер доступным вам способом. Распакуйте его:

tar xf printmanager-x.y.z.tar.gz

Шаг 2. Скопируйте архив настроек

Скопируйте с сервера с балансировщиком файл printum_config.tar.gz (не перепутайте с printum_certs.tar.gz) в папку, откуда будете запускать установку ПринтМенеджера, например, printmanager-x.y.z.

Обратите внимание: для каждого ПринтМенеджер был создан свой архив!

Возьмите его из папки с соответствующим IP-адресом или доменным именем. При обновлении версии ПринтМенеджер ещё раз переписывать архив не нужно.

Шаг 3. Запустите установку

С автоматическими сертификатами

Если установка первой ноды ПринтМенеджера выполняется на сервере, на котором также установлен модуль Мониторинга:

sudo -E ./install.sh

Если установка первой ноды ПринтМенеджера выполняется на отдельном сервере:

sudo -E MONITORING_ADDRESS=<hostname> ./install.sh

где MONITORING_ADDRESS — адрес сервера, на котором установлен модуль Мониторинга.

С собственными сертификатами:

export SSL_CERT=<client.crt>
export SSL_KEY=<client.key>
export SSL_CERT_CA=<ca.crt>
sudo -E ./install.sh

Если установка на отдельном сервере аналогично укажите MONITORING_ADDRESS:

sudo -E MONITORING_ADDRESS=<hostname> ./install.sh

Ожидаемый результат

Первый ПринтМенеджер установлен. На странице балансировщика https://BALANCER_ADR:7000/ соответствующие строки станут зелёными.

Как проверить установку

Откройте страницу по адресу https://BALANCER_ADR:7000/ и убедитесь, что строка, указывающая на установленный ПринтМенеджер, стала зелёной.

Следующие шаги

Типовые ошибки

Ошибка Причина Решение
При отложенной печати появляется ошибка "файл недоступен". NFS-хранилище недоступно или неверно указаны параметры в .env ПринтМенеджера. Выполнить sudo cat /opt/printmanager/.env.

Параметры должны быть:
DRIVER_OPTS_DEVICE:NFS\FOLDER\PATH,
DRIVER_OPTS_Oaddr=NFS_ADDR,nolock,soft,rw,
DRIVER_OPTS_TYPEnfs.

Убедитесь в сетевой доступности NFS-сервера и возможности чтения/записи из NFS_FOLDER_PATH.
Не распечатываются файлы при прямой печати через Клиент ПМ. Неверный флаг use_cups_ssl в настройках Клиента ПМ. Проверить значение флага use_cups_ssl в файле settings.yml: C:\Program Files (x86)\printum\printmanager_client.

Связанные страницы

Добавление серверов ПринтМенеджера в кластер

Цель

Добавление второго и последующих серверов ПринтМенеджера в существующий кластер Active-Active.

Предусловия

Шаги установки

Шаг 1. Установите второй и последующие ПМы

Установка аналогична установке первого ПринтМенеджер из раздела Установка первого ПринтМенеджера в кластере.

Отличием является только файл printum_config.tar.gz, который нужно взять из соответствующей папки на сервере с балансировщиком (с соответствующим IP-адресом или доменным именем нового сервера).

Шаг 2. Добавление дополнительного сервера (5 и более)

Если необходимо добавить сервер, не входящий в исходную конфигурацию:

Ожидаемый результат

Как проверить установку

Следующие шаги

Проверка корректности установки кластера

Типовые ошибки

Ошибка Причина Решение
django.db.utils.OperationalError: FATAL: sorry, too many clients already Превышено максимальное количество подключений к PostgreSQL после добавления новых узлов. Увеличить max_connections в конфигурации PostgreSQL:

max_connections = (3×N + 70) × T

где N — количество ядер CPU, T — итоговое число серверов ПринтМенеджер в кластере

Связанные страницы

Проверка корректности установки кластера

Цель

Проверка корректной работы кластера ПринтМенеджеров после завершения установки.

Предусловия

Установлены все компоненты кластера:

Чек-лист проверки

1. Проверка панели администратора HAProxy

Каждый из разделов должен иметь все зелёные строчки (кроме коричневых строк Frontend или Backend). Если какая-то из строк с названием server_ip красная — это говорит, что сервер с данным адресом установлен неверно. Проверьте состояние сервера.

2. Проверка файлов .env на серверах ПринтМенеджера

Проверьте .env файлы каждого из серверов с ПринтМенеджерами. В частности, проверьте, что существуют следующие настройки и что они заполнены:

3. Проверка контейнеров на серверах ПринтМенеджер

Проверьте, есть ли ошибки в следующих контейнерах на каждом из серверов с ПринтМенеджерами:

4. Проверка NFS-хранилища

Проверьте, что NFS хранилище работает корректно на каждом сервере с ПринтМенеджерами.

Создайте файл test.txt:

cd /opt/printmanager
sudo docker-compose exec app touch /opt/app/public/media/test.txt

Проверьте, что файл появился в NFS хранилище через его интерфейс. Удалите этот файл:

cd /opt/printmanager
sudo docker-compose exec app rm /opt/app/public/media/test.txt

Убедитесь, что файл test.txt был удалён из NFS хранилища.

Ожидаемый результат

Типовые ошибки

Ошибка Причина Решение
Страница состояния балансировщика (HAProxy) и ПринтМенеджеров загружается с ошибкой Ошибка в хостнеймах — отсутствует или некорректен FQDN в DNS Проверить наличие и корректность FQDN (hostname) в DNS для всех ВМ в составе отказоустойчивой конфигурации
При отложенной печати ошибка "файл недоступен" NFS-хранилище недоступно или неверно настроено в .env Выполнить sudo cat /opt/printmanager/.env на каждом сервере.

Проверить DRIVER_OPTS_DEVICE, DRIVER_OPTS_O, DRIVER_OPTS_TYPE.
Убедиться в доступности NFS-сервера

Связанные страницы