# Кластер

# Подготовка к установке кластера Active-Active

## Цель

Подготовка инфраструктуры для установки отказоустойчивого кластера ПринтМенеджеров в конфигурации Active-Active.

## Схема конфигурации

Схема предназначена для обеспечения высокой доступности и отказоустойчивости. 
#### Балансировщик нагрузки
- Является точкой входа для внешних систем.
- Выполняет функцию распределения нагрузки между узлами (нодами) ПринтМенеджеров (ПМов).
- По умолчанию используется **HAProxy** как простое, надежное и широко распространённое решение для балансировки нагрузки. Однако, при необходимости, вы можете использовать сторонний балансировщик нагрузки.
- При необходимости кластеризация балансировщика возможна с использованием `Keepalived`.

#### Сервера ПринтМенеджеров (ПМов)
- Минимальное количество серверов — 3 (для отказоустойчивости при сбое 1 сервера).
- Формула расчета серверов: `T=2F+1`
  - `T`: общее количество серверов.
  - `F`: число серверов, которые могут выйти из строя.
- Количество серверов системы ПринтМенеджеров также определяется ожидаемой нагрузкой. Чем выше нагрузка, тем больше требуется серверов для обеспечения стабильной работы системы.
  - Один сервер, соответствующий минимальным техническим требованиям, способен обрабатывать до 100 среднестатистических заданий печати в минуту (PDF-файлы объёмом 2-3 страницы).
  - Кластер из 3 серверов ПринтМенеджеров выдерживает до 250 таких заданий в минуту.

#### База данных и NFS-хранилище
- Отказоустойчивость обеспечивается заказчиком с использованием стандартных инфраструктурных решений (репликация, RAID и т.д.).

## Подготовка серверов

Ниже описывается конфигурация с 3 серверами ПринтМенеджеров (ПМ). Для других конфигураций настройка осуществляется аналогичным образом, с добавлением новых серверов и указанием их адресов. 

Создайте 5 серверов на операционных системах, поддерживаемых Printum. Убедитесь, что каждый сервер соответствует [минимальным техническим требованиям](https://wiki.printum.io/books/3-ustanovka/page/trebovaniia-k-serveru-dlia-ustanovki-printum).

Каждый сервер предназначен для выполнения одной из следующих ролей: 

Роль | Адрес | ПО |
| -------------------------------------- | ------------ | ---------------- |
| Балансировщик | BALANCER_ADR | HAProxy |
| Мониторинг и ПринтМенеджер 1 | MPM_1 | Мониторинг + ПринтМенеджер |
| ПринтМенеджер 2 | PM_2 | ПринтМенеджер |
| ПринтМенеджер 3 | PM_3 | ПринтМенеджер |
| База данных PostgreSQL и NFS-хранилище | DB_NFS | PostgreSQL + NFS |

## Продукты для установки

Для установки системы вам потребуются следующие дистрибутивы:
- Балансировщик (HAProxy).
- Мониторинг.
- ПринтМенеджер.

Убедитесь, что у вас есть доступ к актуальным версиям этих дистрибутивов, а также файлы контрольных сумм для проверки их целостности. 

## Порядок установки

Для корректной установки системы далее необходимо последовательно выполнить данные пункты: 
1. Подготовить базу PostgreSQL и NFS хранилище.
2. Установить балансировщик.
3. Проверить функционирование балансировщика.
4. Установить систему Мониторинга.
5. Установить первый ПринтМенеджер.
6. Установить второй и последующие ПМы.
7. Проверить систему по чек-листу корректной установки. 

## Следующие шаги

- [Установка PostgreSQL для кластера](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-postgresql-dlia-klastera)
- [Установка NFS-хранилища](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-nfs-xranilishha)
- [Установка балансировщика HAProxy](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy) 

## Ожидаемый результат

- Созданы 5 серверов на поддерживаемых ОС с назначенными ролями:
  - балансировщик (BALANCER_ADR).
  - Мониторинг + ПринтМенеджер 1 (MPM_1).
  - ПринтМенеджер 2 (PM_2).
  - ПринтМенеджер 3 (PM_3).
  - БД + NFS (DB_NFS).
- Каждый сервер соответствует минимальным техническим требованиям Printum.
- Доступны актуальные дистрибутивы HAProxy, Мониторинга и ПринтМенеджера с файлами контрольных сумм.
- Для корректной балансировки нагрузки настроен виртуальный IP-адрес (VIP) в DNS всех серверов.
- Инфраструктура готова к поэтапной установке компонентов кластера.
--- 

## Связанные страницы

- [Установка PostgreSQL для кластера](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-postgresql-dlia-klastera)
- [Установка NFS-хранилища](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-nfs-xranilishha)
- [Установка балансировщика HAProxy](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy)
- [Установка первого ПринтМенеджера в кластере](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere)
- [Добавление серверов ПринтМенеджера в кластер](https://wiki.printum.io/books/3-ustanovka/page/dobavlenie-serverov-printmenedzera-v-klaster)

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

## Цель

Развертывание базы данных PostgreSQL для кластерной конфигурации ПринтМенеджера.

## Предусловия

- Подготовлен сервер для базы данных (`DB_NFS`).
- Определено количество серверов ПринтМенеджер для расчёта `max_connections`.

#### Расчёт максимального количества подключений к БД

Для обеспечения достаточного количества соединений с базой данных настройте параметр `max_connections` в конфигурационном файле **PostgreSQL**. 

Используйте следующую формулу: 
```
max_connections = (3*N+70)*T
```
где:
  - `N`: количество процессорных ядер на одном сервере ПринтМенеджера (ПринтМенеджер).
  - `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](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy).

## Следующие шаги

- [Установка NFS-хранилища](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-nfs-xranilishha)
- [Установка балансировщика HAProxy](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy)

## Ожидаемый результат

- Контейнер PostgreSQL запущен (`sudo docker ps` показывает статус `Up`).
- База данных доступна; подготовлены параметры `DB_HOST`, `POSTGRES_LOGIN`, `POSTGRES_PASSWORD` для указания при установке ПринтМенеджеров.

## Типовые ошибки

| Ошибка | Причина | Решение |
| ------ | ------- | ------- |
| `django.db.utils.OperationalError: FATAL: sorry, too many clients already` | Превышено максимальное количество подключений к PostgreSQL после добавления новых узлов. | Увеличить `max_connections` в конфигурации PostgreSQL: <br><br>`max_connections = (3×N + 70) × T`<br><br>где `N` — количество ядер CPU, `T` — итоговое число серверов ПринтМенеджер в кластере |

---

## Связанные страницы

- [Подготовка к установке кластера Active-Active](https://wiki.printum.io/books/3-ustanovka/page/podgotovka-k-ustanovke-klastera-active-active)
- [Установка NFS-хранилища](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-nfs-xranilishha)
- [Установка балансировщика HAProxy](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy)

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

## Цель

Подготовка сервера NFS для совместного хранения данных ПринтМенеджеров в кластерной конфигурации.

## Предусловия

- Подготовлен сервер для NFS (`DB_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. Настройте права доступа

Измените владельца папки:
- Для Ubuntu, Astra Linux и ALT Linux:
  ```
  sudo chown nobody:nogroup /scratch
  ```

- Для РЕД ОС и Red Hat Enterprise Linux:
  ```
  sudo chown nobody:nobody /scratch
  ```

Установите разрешения для записи:

```
sudo chmod -R 777 /scratch
```

---

## Параметры для установки системы

Для установки балансировщика понадобится адрес сервера `NFS_ADDR` и путь к папке `NFS_FOLDER_PATH`:
- `NFS_ADDR`: IP-адрес или доменное имя сервера NFS.
- `NFS_FOLDER_PATH`: в данном примере путь к папке — `/scratch`.

Эта настройка позволяет использовать 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
```

Измените владельца папки:
- Для Ubuntu, и Astra Linux и ALT Linux:
  ```
  sudo chown nobody:nogroup /scratch
  sudo chmod 777 /scratch
  ```

- Для РЕД ОС и Red Hat Enterprise Linux:
  ```
  sudo chown nobody:nobody /scratch
  sudo chmod 777 /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:

- Для Ubuntu, Astra Linux и ALT Linux:​
  ```
  sudo systemctl restart nfs-kernel-server​
  ```

- Для РЕД ОС и Red Hat Enterprise Linux:​
  ```
  sudo systemctl restart nfs-server.service
  ```

#### Настройка 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
```
где:
  - `/etc/stunnel/cert/<cert.crt>`, `/etc/stunnel/cert/<cert.key>`, `/etc/stunnel/cert/<ca.crt>` — абсолютные пути к сертификату, ключу и CA-сертификату.
  - `<NFS_STUNNEL_PORT>` — порт для туннеля (рекомендуется указать 20490 или другой непривилегированный порт).

##### Настройка Stunnel для автоматического запуска

- Для Ubuntu, ALT Linux и Astra Linux:
  - Откройте файл `/etc/default/stunnel4`
  - Найдите строку `ENABLED` и установите значение `1`:
    ```
    ENABLED=1
    ```
    Если строки нет, добавьте ее вручную.

- Для РЕД ОС и Red Hat Enterprise Linux:
```​
sudo systemctl enable stunnel​
```

##### Запуск и включение Stunnel

- Для Ubuntu и Astra Linux:​
  ```
  sudo systemctl enable stunnel4
  sudo systemctl start stunnel4​
  ```

- Для РЕД ОС и Red Hat Enterprise Linux:
  ```
  sudo systemctl enable stunnel
  sudo systemctl start stunnel
  ```
Теперь сервер NFS настроен с использованием шифрования через **Stunnel**. Для получения дополнительной информации обращайтесь к [официальной документации](https://www.stunnel.org/static/stunnel.html).

> **Примечание**: Если ранее у вас уже был развёрнут балансировщик с использованием нешифрованного соединения с NFS, то для перехода на шифрование с Stunnel вам необходимо выполнить повторную установку балансировщика и всех нод ПМ.
>
> Допускается установка на уже развёрнутые версии.
>
> В сценарии установки балансировщика с помощью скрипта массового развёртывания, укажите следующие значения переменных в файле конфигурации (`config.ini`):
> - `NFS_TLS = 1` и `NFS_STUNNEL_PORT = <порт_для_Stunnel>`.
> - `SKIP = true` в секции настроек `[Monitoring]`.
>   
> После изменения значений переменных сохраните файл конфигурации и запустите установку:
>```
>sudo ./install_all_offline.sh
>```
> В сценарии установки балансировщика вручную обновите балансировщик и все ноды ПМ с указанием переменных `NFS_TLS = 1` и `NFS_STUNNEL_PORT = <порт_для_Stunnel>`.

## Ожидаемый результат

- NFS-сервис активен; общая папка доступна на чтение и запись.
- Параметры `NFS_ADDR` и `NFS_FOLDER_PATH` готовы для указания при установке ПринтМенеджеров.


## Следующие шаги

- [Установка балансировщика HAProxy](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy)
- [Установка первого ПринтМенеджера в кластере](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere)


---

## Типовые ошибки

| Ошибка | Причина | Решение |
| ------ | ------- | ------- |
| При отложенной печати появляется ошибка "файл недоступен". | NFS-хранилище недоступно или неверно указаны параметры в `.env` ПринтМенеджера. | Выполнить `sudo cat /opt/printmanager/.env`.<br><br>Параметры должны быть:<br> `DRIVER_OPTS_DEVICE` — `:NFS\FOLDER\PATH`,<br>`DRIVER_OPTS_O` — `addr=NFS_ADDR,nolock,soft,rw`,<br>`DRIVER_OPTS_TYPE` — `nfs`.<br><br>Убедитесь в сетевой доступности NFS-сервера и возможности чтения/записи из `NFS_FOLDER_PATH`. |

---

## Связанные страницы

- [Подготовка к установке кластера Active-Active](http://wiki.printum.io/books/3-ustanovka/page/podgotovka-k-ustanovke-klastera-active-active)
- [Установка PostgreSQL для кластера](http://wiki.printum.io/books/3-ustanovka/page/ustanovka-postgresql-dlia-klastera)
- [Установка балансировщика HAProxy](http://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy)
- [Установка первого ПринтМенеджера в кластере](http://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere)

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

## Цель 

Установка балансировщика нагрузки HAProxy для кластерной конфигурации ПринтМенеджеров.

## Предусловия

- Подготовлена база PostgreSQL и NFS-хранилище.
- Получены дистрибутивы Мониторинга, ПринтМенеджера и Балансировщика с файлами контрольных сумм.

## Варианты развёртывания схемы с балансировкой

Возможно два варианта развёртывания схемы балансировки:
- массовое развертывание с помощью скрипта;
- ручное развёртывание.

## Шаги установки Массового развёртывания схемы с балансировкой

Скрипт массового развертывания предназначен для автоматической установки и обновления балансировщика, мониторинга и серверов ПринтМенеджеров, обеспечивая минимизацию ручного вмешательства.

### Требования для выполнения массового развертывания

#### Подключение по SSH

- Сервер балансировщика должен иметь возможность подключаться к остальным серверам (ПринтМенеджеры и Мониторинг) по протоколу `SSH`.
- Для исключения необходимости ввода паролей, настройте SSH-аутентификацию с использованием ключа:
  - Создайте ключ SSH на сервере балансировщика (если его еще нет):​
    ```
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    ```
  - Скопируйте публичный ключ на все удаленные сервера:​
    ```
    ssh-copy-id root@<remote_server_IP>​
    ```

#### Подтверждение доверия SSH-сертификатов

- Перед запуском скрипта подключитесь к каждому серверу вручную из ВМ с балансировщиком:​
  ```
  ssh root@<remote_server_IP>
  ```
- Подтвердите добавление отпечатка сервера в файл доверенных хостов (`~/.ssh/known_hosts`).

#### Права пользователя

- Каждый сервер должен иметь пользователя с правами sudo.
- Для удобства и безопасности рекомендуется:
  - Создать отдельные служебные учетные записи
  - Отключить запрос пароля для команд с использованием `sudo`, добавив в конфигурацию `/etc/sudoers` соответствующую
строку:​
    ```
    <username> ALL=(ALL) NOPASSWD:ALL​​
    ```

#### Проверка конфигурации

Убедитесь, что файл config.ini заполнен корректно:
- Все необходимые секции (`[Balancer]`, `[Monitoring]`, `[PrintManager_1]` и т.д.) присутствуют.
- Значения переменных указаны без ошибок (путь к сертификатам, пароли, адреса и т.д.).
- Если некоторые сервера уже настроены, используйте параметр `SKIP = true` для их пропуска при развёртывании.

### Инструкция по запуску скрипта

1. Перейдите в директорию со скриптом массовой установки:​
   ```
   cd /path/to/script
   ```


2. Запустите скрипт:​
    ```
    sudo ./install_all_offline.sh
    ```

3. Если требуются детализированные логи для диагностики, используйте отладочный режим:​
    ```
    sudo DEBUG=1 ./install_all_offline.sh  
    ```

### Порядок установки

#### Шаг 1. Подготовка базы данных и NFS-хранилища​

Подготовка описана в разделах:
- [Установка PostgreSQL для кластера](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-postgresql-dlia-klastera)
- [Установка NFS-хранилища](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-nfs-xranilishha)

#### Шаг 2. Получение сертификатов

Если используются собственные SSL-сертификаты:
- Сгенерируйте или получите их у авторизованного центра сертификации (CA).
- Убедитесь, что пути к сертификатам (`SSL_CERT` и `SSL_KEY`) корректно указаны в конфигурационном файле.
- Если сертификаты корневого центра сертификации требуются, укажите путь к ним в `SSL_CERT_CA`.

#### Шаг 3. Запуск установки

##### Скопируйте дистрибутивы на сервер балансировщика

Скопируйте на сервер балансировщика дистрибутивы Мониторинга, ПринтМенеджера и Балансировщика вместе с файлами контрольных сумм:
- `printmanager-X1.Y1.Z1.tar.gz`
- `printmanager-X1.Y1.Z1.tar.gz.sha512`
- `printum-X2.Y2.Z2.tar.gz`
- `printum-X2.Y2.Z2.tar.gz.sha512`
- `printum-balancer-X3.Y3.Z3.tar.gz`
- `printum-balancer-X3.Y3.Z3.tar.gz.sha512`

##### Проверьте контрольные суммы

```
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.

##### Проверьте корректность установки

Используйте раздел [Проверка корректности установки кластера](https://wiki.printum.io/books/3-ustanovka/page/proverka-korrektnosti-ustanovki-klastera).

## Описание конфигурационного файла

Конфигурационный файл config.ini используется для автоматического развёртывания и обновления системы. Он должен содержать обязательные секции, которые обозначаются квадратными скобками: `[General]`.

Каждая секция содержит параметры в формате `КОНСТАНТА = ЗНАЧЕНИЕ`. Между константой и её значением должен быть знак равенства, обрамлённый пробелами.
> **Пример**: `PM_HTTP_PORT = 8010`

Если константа не требует значения, её можно удалить, закомментировать или оставить пустой (с пробелом после знака равно).
> **Пример**: `SSL_CERT_CA =`

Файл должен включать не менее шести секций:
- `[General]`
- `[Balancer]`
- `[Monitoring]`
- `[PrintManager_1]`
- `[PrintManager_2]`
- `[PrintManager_N]`

#### Секция [General]

Секция `[General]` содержит общие параметры для всех серверов. Ниже приведён перечень доступных констант:
- `MON_DIST_PATH` — полный путь до дистрибутива мониторинга.
- `PM_DIST_PATH` — полный путь до дистрибутива PrintManager.
- `PM_HTTP_PORT` — порт для подключения к админке PrintManager по протоколу HTTP.
- `PM_HTTPS_PORT` — порт для подключения к админке PrintManager по протоколу HTTPS.
- `SSL_CERT_CA` — полный путь до корневого сертификата (CA certificate).
- `DATABASE_URL` — настройки для подключения к базе данных PrintManager PostgreSQL в формате URL:
    ```
    DATABASE_URL=postgres://<POSTGRES_LOGIN>:<POSTGRES_PASSWORD>@<DB_HOST>:<PORT>/<BASE_NAME>
    ```
    или со схемой базы данных:
    ```
    DATABASE_URL=postgres://<POSTGRES_LOGIN>:<POSTGRES_PASSWORD>@<DB_HOST>:<PORT>/<BASE_NAME>?currentSchema=<POSTGRES_SCHEMA>
    ```
  - `<POSTGRES_LOGIN>` — логин пользователя с необходимыми разрешениями (запись, удаление, чтение, обновление).
  - `<POSTGRES_PASSWORD>` — пароль пользователя.
  - `<DB_HOST>` — адрес сервера базы данных или балансировщика кластера.
  - `<PORT>` — порт для подключения к базе.
  - `<BASE_NAME>` — имя базы данных.
  - `<POSTGRES_SCHEMA>` — схема базы данных (опционально).
  - `<DATABASE_TABLESPACE>` — табличное пространство (указать, если не используется значение по умолчанию).​
- `NFS_ADDR` — IP-адрес или доменное имя для подключения к серверу NFS.
- `NFS_PATH` — полный путь к директории на сервере NFS.
- `NFS_TLS` (опционально) — укажите `1` или `true`, чтобы использовать шифрованное соединение с NFS. Если шифрование не используется, укажите `0` или `false`, либо удалите переменную.
- `NFS_STUNNEL_PORT` (опционально) — порт, указанный для Stunnel. Должен совпадать с портом в конфигурационном файле Stunnel. По умолчанию используется 20490.

#### Секция [Balancer]

Секция `[Balancer]` содержит параметры, необходимые для настройки сервера балансировки.

Доступные параметры:
- `EXT_HOSTNAME` — IP-адрес или hostname сервера балансировки.
- `SSL_CERT` — полный путь до сертификата.
- `SSL_KEY` — полный путь до закрытого ключа сертификата.
- `SKIP` (опционально) — флаг, указывающий, нужно ли пропустить установку или обновление на указанном сервере.
  - Если указано `false` (по умолчанию), установка выполняется.
  - Если указано `true`, выполнение команд на данном сервере будет пропущено.
- `STATS_USER` — логин пользователя для авторизации в панели администратора балансировщика.
- `STATS_PASSWORD` — пароль пользователя для доступа к странице статистики.

#### Секция [Monitoring]

Секция `[Monitoring]` содержит параметры для сервера, выделенного под систему мониторинга.

Доступные параметры:
- `MON_HOSTNAME` — IP-адрес или hostname сервера мониторинга.
- `USER` — пользователь с правами sudo или суперпользователь `root`.
- `PASSWORD` — пароль пользователя, указанного в параметре `USER`.
- `SSL_CERT` — полный путь до сертификата.
- `SSL_KEY` — полный путь до закрытого ключа сертификата.
- `SKIP` (опционально) — флаг, указывающий, нужно ли пропустить установку или обновление на данном сервере.
  - Если указано `false` (по умолчанию), установка выполняется.
  - Если указано `true`, выполнение команд на данном сервере будет пропущено. Пропустить (`SKIP = True`) можно в том случае, если нужно обновить только балансировщик и/или ПМы.

#### Секции [PrintManager_1], [PrintManager_2], ..., [PrintManager_N]

Секции `[PrintManager_X]` (где `X` — номер сервера) содержат настройки для подключения к соответствующим серверам с ПринтМенеджером.

Доступные параметры:
- `PM_HOSTNAME` — IP-адрес или hostname сервера ПринтМенеджера.
- `USER` — пользователь с правами sudo или суперпользователь `root`.
- `PASSWORD` — пароль пользователя, указанного в параметре `USER`.
- `SSL_CERT` — полный путь до сертификата.
- `SSL_KEY` — полный путь до закрытого ключа сертификата.
- `SKIP` (опционально) — флаг, указывающий, нужно ли пропустить установку или обновление на данном сервере.
  - Если указано `false` (по умолчанию), установка выполняется.
  - Если указано `true`, выполнение команд на данном сервере будет пропущено. Пропустить (`SKIP = True`) можно в том случае, если нужно обновить балансировщик и/или Мониторинг.

#### Шаги для добавления сервера

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. Проверьте корректность работы системы по [чек-листу](https://wiki.printum.io/books/3-ustanovka/page/proverka-korrektnosti-ustanovki-klastera).

## Шаги установки схемы балансировщика в ручном режиме

### Шаг 1. Скопируйте дистрибутивы на сервер балансировщика

Скопируйте на сервер балансировщика дистрибутивы Мониторинга, ПринтМенеджера и Балансировщика вместе с файлами контрольных сумм:
- `printmanager-X1.Y1.Z1.tar.gz`
- `printmanager-X1.Y1.Z1.tar.gz.sha512`
- `printum-X2.Y2.Z2.tar.gz`
- `printum-X2.Y2.Z2.tar.gz.sha512`
- `printum-balancer-X3.Y3.Z3.tar.gz`
- `printum-balancer-X3.Y3.Z3.tar.gz.sha512`

### Шаг 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>
```

где:
- `<POSTGRES_LOGIN>` — логин пользователя с необходимыми разрешениями (запись, удаление, чтение, обновление).
- `POSTGRES_PASSWORD>` — пароль пользователя POSTGRES_LOGIN.
- `<DB_HOST>` — реальный адрес базы или балансировщика кластера баз.
- `<PORT>` — порт для подключения к базе.
- `<BASE_NAME>` — Имя базы.
- `<POSTGRES_SCHEMA>` — схема базы данных, указывать, если не используется схема public.
- `<DATABASE_TABLESPACE>` — Табличное пространство.
- `<NFS_ADDR>` — IP-адрес или доменное имя NFS сервера.
- `<NFS_FOLDER_PATH>` — путь директории NFS сервера.

Если вы настроили NFS через туннель stunnel, то обязательно укажите:
```
export NFS_TLS=true
```
Если порт stunnel отличается от 20490, то укажите еще порт:​
```​
export NFS_STUNNEL_PORT=<NFS_STUNNEL_PORT>
```
где:
- `NFS_STUNNEL_PORT` - порт для stunnel

Также вы можете указать логин и пароль для страницы 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>
```
где:
- `<BALANCER_ADR>` — IP адрес или доменное имя балансировщика.
- `<PM_1>` — IP адрес или доменное имя первого ПринтМенеджер.
- `<PM_2>`, `<PM_3>` , … — IP адрес или имя остальных ПринтМенеджеров.


## Ожидаемый результат

Если установка прошла без ошибок, то в консоли будет выведено сообщение об успехе и http-адрес для доступа к панели HAProxy:
```
Статус HAProxy доступен по адресу: https://BALANCER_ADR:7000/
```

Во время установки балансировщика будут автоматически записаны настройки для балансировщика и ПМов. Архивы находятся в директории `/opt/printum_balancer/certificates`.

## Как проверить установку

Откройте страницу по адресу `https://BALANCER_ADR:7000/`.

Вы увидите несколько групп строк, группы отделяются заголовками бордового цвета. Каждая группа обозначает часть системы и её статус. После установки всех ПМов строки станут зелеными.

## Следующие шаги

- [Установка первого ПринтМенеджера в кластере](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere)
- [Добавление серверов ПринтМенеджера в кластер](https://wiki.printum.io/books/3-ustanovka/page/dobavlenie-serverov-printmenedzera-v-klaster)

## Типовые ошибки

| Ошибка | Причина | Решение |
| ------ | ------- | ------- |
| Страница состояния балансировщика (HAProxy) и ПринтМенеджеров загружается с ошибкой. | Отсутствует или некорректен FQDN (hostname) в DNS для ВМ в составе конфигурации. | Проверить наличие и корректность FQDN (hostname) в DNS для всех ВМ в составе отказоустойчивой конфигурации. |

---

## Связанные страницы

- [Подготовка к установке кластера Active-Active](https://wiki.printum.io/books/3-ustanovka/page/podgotovka-k-ustanovke-klastera-active-active)
- [Установка PostgreSQL для кластера](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-postgresql-dlia-klastera)
- [Установка NFS-хранилища](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-nfs-xranilishha)
- [Установка первого ПринтМенеджера в кластере](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere)
- [Проверка корректности установки кластера](https://wiki.printum.io/books/3-ustanovka/page/proverka-korrektnosti-ustanovki-klastera)

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

## Цель

Установка первой ноды ПринтМенеджера в кластерной конфигурации Active-Active.

## Предусловия

- Установлен и настроен балансировщик HAProxy.
- Подготовлены база данных PostgreSQL и NFS-хранилище.
- На сервере балансировщика в директории /opt/printum_balancer/certificates/<IP_или_домен_ПМ> находится архив printum_config.tar.gz

## Шаги установки

### Шаг 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/` и убедитесь, что строка, указывающая на установленный ПринтМенеджер, стала зелёной.

## Следующие шаги

- [Добавление серверов ПринтМенеджера в кластер](https://wiki.printum.io/books/3-ustanovka/page/dobavlenie-serverov-printmenedzera-v-klaster)
- [Проверка корректности установки кластера](https://wiki.printum.io/books/3-ustanovka/page/proverka-korrektnosti-ustanovki-klastera)

## Типовые ошибки

| Ошибка | Причина | Решение |
| ------ | ------- | ------- |
| При отложенной печати появляется ошибка "файл недоступен". | NFS-хранилище недоступно или неверно указаны параметры в `.env` ПринтМенеджера. | Выполнить `sudo cat /opt/printmanager/.env`.<br><br>Параметры должны быть:<br> `DRIVER_OPTS_DEVICE` — `:NFS\FOLDER\PATH`,<br>`DRIVER_OPTS_O` — `addr=NFS_ADDR,nolock,soft,rw`,<br>`DRIVER_OPTS_TYPE` — `nfs`.<br><br>Убедитесь в сетевой доступности NFS-сервера и возможности чтения/записи из `NFS_FOLDER_PATH`. |
| Не распечатываются файлы при прямой печати через Клиент ПМ. | Неверный флаг `use_cups_ssl` в настройках Клиента ПМ. | Проверить значение флага `use_cups_ssl` в файле `settings.yml`: `C:\Program Files (x86)\printum\printmanager_client`. |


---

## Связанные страницы

- [Подготовка к установке кластера Active-Active](https://wiki.printum.io/books/3-ustanovka/page/podgotovka-k-ustanovke-klastera-active-active)
- [Установка балансировщика HAProxy](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy)
- [Добавление серверов ПринтМенеджера в кластер](https://wiki.printum.io/books/3-ustanovka/page/dobavlenie-serverov-printmenedzera-v-klaster)
- [Проверка корректности установки кластера](https://wiki.printum.io/books/3-ustanovka/page/proverka-korrektnosti-ustanovki-klastera)

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

## Цель

Добавление второго и последующих серверов ПринтМенеджера в существующий кластер Active-Active.

## Предусловия

- Установлен и настроен балансировщик HAProxy.
- Установлен первый ПринтМенеджер в кластере.
- На сервере балансировщика в директории `/opt/printum_balancer/certificates/<IP_или_домен_ПМ>` находится архив `printum_config.tar.gz` для нового сервера.

## Шаги установки

### Шаг 1. Установите второй и последующие ПМы

Установка аналогична установке первого ПринтМенеджер из раздела [Установка первого ПринтМенеджера в кластере](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere).

Отличием является только файл `printum_config.tar.gz`, который нужно взять из соответствующей папки на сервере с балансировщиком (с соответствующим IP-адресом или доменным именем нового сервера).

### Шаг 2. Добавление дополнительного сервера (5 и более)

Если необходимо добавить сервер, не входящий в исходную конфигурацию: 
- Проведите установку балансировщика ещё раз с указанием необходимых серверов.
- Установите ПринтМенеджер в шаге 1.
- Отредактируйте на каждом сервере файл `.env` в директории `/opt/printmanager`. Измените список IP адресов или hostname в строке `REDIS_SENTINEL_LIST`, указав все сервера.
- Перезапустите приложение ПринтМенеджер командами:
  ```
  cd /opt/printmanager
  sudo docker-compose down
  sudo docker-compose up -d
  ```

## Ожидаемый результат

- ПринтМенеджеры установлена на серверах без ошибок.
- После установки всех ПринтМенеджеров на странице балансировщика `https://BALANCER_ADR:7000/` все строки станут зелёными.

## Как проверить установку

- Откройте страницу по адресу `https://BALANCER_ADR:7000/` и убедитесь, что все строки ПринтМенеджер стали зелёными.
- Выполните проверку по разделу [Проверка корректности установки кластера](https://wiki.printum.io/books/3-ustanovka/page/proverka-korrektnosti-ustanovki-klastera).

## Следующие шаги

Проверка корректности установки кластера

## Типовые ошибки

| Ошибка | Причина | Решение |
| ------ | ------- | ------- |
| `django.db.utils.OperationalError: FATAL: sorry, too many clients already` | Превышено максимальное количество подключений к PostgreSQL после добавления новых узлов. | Увеличить `max_connections` в конфигурации PostgreSQL: <br><br>`max_connections = (3×N + 70) × T`<br><br>где `N` — количество ядер CPU, `T` — итоговое число серверов ПринтМенеджер в кластере |


---

## Связанные страницы

- [Установка первого ПринтМенеджера в кластере](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere)
- [Проверка корректности установки кластера](https://wiki.printum.io/books/3-ustanovka/page/proverka-korrektnosti-ustanovki-klastera)

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

## Цель

Проверка корректной работы кластера ПринтМенеджеров после завершения установки.

## Предусловия 

Установлены все компоненты кластера:
- балансировщик
- мониторинг
- все серверы ПринтМенеджера

## Чек-лист проверки

### 1. Проверка панели администратора HAProxy

- Откройте страницу `https://BALANCER_ADR:7000/` .
- Убедитесь, что присутствуют следующие разделы:
  - ftp
  - cups_1631
  - tcp_converter_7776
  - tcp_converter_7777
  - admin_8010
  - admin_8080

Каждый из разделов должен иметь все зелёные строчки (кроме коричневых строк Frontend или Backend). Если какая-то из строк с названием server_ip красная — это говорит, что сервер с данным адресом установлен неверно. Проверьте состояние сервера.

### 2. Проверка файлов .env на серверах ПринтМенеджера

Проверьте `.env` файлы каждого из серверов с ПринтМенеджерами. В частности, проверьте, что существуют следующие настройки и что они заполнены:
- `DATABASE_URL=postgres://postgres:postgres@10.0.130.213:5432/printmanager`
- `DATABASE_HOSTNAME=10.0.130.213`
- `DATABASE_PORT=5432`
- `REDIS_URL=redis://redis:6379/0`
- `REDIS_ROLE=master` (или `slave`)
- `REDIS_SENTINEL_LIST=10.0.132.98,10.0.132.97,10.0.132.96`
- `REDIS_MASTER_HOSTNAME=10.0.132.98`
- `VOLUME_PATH=/opt/printmanager/volumes`
- `DRIVER_OPTS_TYPE=nfs`
- `DRIVER_OPTS_O=addr=10.0.130.213,nolock,soft,rw`
- `DRIVER_OPTS_DEVICE=:/scratch`
- `EXT_HOSTNAME=pm.test` (домен или адрес балансировщика)
- `PM_HOSTNAME=10.0.132.97` (домен или адрес ПМа)

### 3. Проверка контейнеров на серверах ПринтМенеджер

Проверьте, есть ли ошибки в следующих контейнерах на каждом из серверов с ПринтМенеджерами:
- printmanager-celery
- printmanager-scheduler
- printmanager-celery-print-queue
- printmanager-redis-sentinel
- printmanager-ftpd printmanager-db
- printmanager-redis

### 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 показывают зелёные строки.
- Все контейнеры ПринтМенеджеров работают без ошибок.
- NFS-хранилище доступно со всех нод.
- Панель администратора ПринтМенеджер доступна по адресу балансировщика.

## Типовые ошибки

| Ошибка | Причина | Решение |
| ------ | ------- | ------- |
| Страница состояния балансировщика (HAProxy) и ПринтМенеджеров загружается с ошибкой | Ошибка в хостнеймах — отсутствует или некорректен FQDN в DNS | Проверить наличие и корректность FQDN (hostname) в DNS для всех ВМ в составе отказоустойчивой конфигурации |
| При отложенной печати ошибка "файл недоступен" | NFS-хранилище недоступно или неверно настроено в `.env` | Выполнить `sudo cat /opt/printmanager/.env` на каждом сервере.<br><br>Проверить `DRIVER_OPTS_DEVICE`, `DRIVER_OPTS_O`, `DRIVER_OPTS_TYPE`.<br>Убедиться в доступности NFS-сервера

--- 

## Связанные страницы

- [Установка балансировщика HAProxy](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-balansirovshhika-haproxy)
- [Установка первого ПринтМенеджера в кластере](https://wiki.printum.io/books/3-ustanovka/page/ustanovka-pervogo-printmenedzera-v-klastere)
- [Добавление серверов ПринтМенеджера в кластер](https://wiki.printum.io/books/3-ustanovka/page/dobavlenie-serverov-printmenedzera-v-klaster)