# Подключение стороннего балансировщика к кластеру

## Подключение стороннего балансировщика

По умолчанию система использует HAProxy для балансировки нагрузки. Рекомендуется использовать его в качестве балансировщика нагрузки, так как именно с ним система проходит все этапы тестирования и по умолчанию используется при установке у клиентов. Однако, если необходимо использовать сторонний балансировщик, выполните настройку в соответствии с этой инструкцией.

**Важно**: При использовании сторонних балансировщиков испытания системы на совместимость не проводились. Мы не можем гарантировать стабильную и бесперебойную работу системы с другими решениями. Использование сторонних балансировщиков осуществляется под вашу ответственность.

Перед началом убедитесь, что ознакомились с разделом "[Подготовка к установке кластера Active-Active](https://wiki.printum.io/books/3-ustanovka/page/podgotovka-k-ustanovke-klastera-active-active)". Этот раздел актуален для настройки любого балансировщика.

### Требования к стороннему балансировщику

1. **Проксирование сообщений**: балансировщик должен корректно обрабатывать следующие типы соединений:
    
    - **FTP-соединения**: порты 20–21 и 30000–30199.
    - **HTTP-соединения**: порты 1631, 8010, 8080.
    - **WebSocket-соединения** (при использовании TCP-конвертера): порты 7776, 7777.
    
    Если стандартные порты изменены при установке ПМ, укажите новые значения.
    
2. **Проверка доступности (healthcheck)**:
    
    - Балансировщик должен выполнять HTTP-запросы на адрес `/health/`.
    - Если ответ имеет статус **200**, сервер считается исправным. Любой другой ответ означает неисправность.
    - Настройте механизм оповещений о сбоях серверов, доступный в вашем балансировщике.
3. **Параметры настройки**:
    
    - Используйте алгоритм **Round Robin** с включением **Sticky Session**.
    - Настройки таймаутов:
        - **Таймаут сервера (timeout server)**: 30 секунд.
        - **Таймаут клиента (timeout client)**: 30 секунд.
        - **Таймаут соединения (timeout connection)**: 5 секунд.
    - **Повторы (retries)**: не требуются.
    - Используйте сгенерированные SSL-сертификаты для балансировщика.

После подготовки настроек установите ваш балансировщик.

### Установка и настройка ПринтМенеджеров

#### Перед установкой первого ПринтМенеджера

Выполните команды для экспорта переменных окружения:

```
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>
```

Укажите настройки Redis и других сервисов (эти команды обязательны):

```
export REDIS_ROLE=master
export REDIS_SENTINEL_LIST=<IP_1>,<IP_2>,<IP_3>
export REDIS_MASTER_IP=<IP_1>
export PM_HOSTNAME=<IP_1>
export DRIVER_OPTS_TYPE="nfs"
export DRIVER_OPTS_O="addr=<NFS_ADDR>,nolock,soft,rw"
export DRIVER_OPTS_DEVICE=":/scratch"
export EXT_HOSTNAME=<IP_BALANCER>
export REDIS_PASSWORD=<REDIS_PASSWORD>
export CUPS_PASSWORD=<CUPS_PASSWORD>
export FTPD_PASSWORD=<FTPD_PASSWORD>
export WEBDAV_PASSWORD=<WEBDAV_PASSWORD>
```

Где:

- **<NFS_ADDR>**: IP-адрес или доменное имя сервера NFS.
- **<NFS_FOLDER_PATH>**: путь к директории NFS.
- **<POSTGRES_LOGIN>, <POSTGRES_PASSWORD>, <POSTGRES_SCHEMA>**: данные для подключения к базе.
- **<IP_1>, <IP_2>, <IP_3>**: IP-адреса серверов ПринтМенеджера.
- **<IP_BALANCER>**: IP-адрес балансировщика.

**Важно**: Оставайтесь в этом же терминале до завершения установки, иначе переменные окружения будут потеряны.

Запустите установку первого ПринтМенеджера.

#### Установка второго и последующих ПринтМенеджеров

Повторите команды экспорта переменных окружения, изменив:

```
export REDIS_ROLE=slave
export PM_HOSTNAME=<IP>
```

Где **<IP>** — IP-адрес устанавливаемого сервера.

Запустите установку.

### Проверка корректности установки

1. Проверьте систему по "Чек-листу для проверки корректной установки".
2. Исключите проверки, связанные с настройкой HAProxy.
3. Добавьте собственные проверки, актуальные для вашего балансировщика.