# Несколько реплик local-backend `local-backend` можно запустить в нескольких экземплярах на одном хосте — запросы между ними распределяет nginx из состава дистрибутива. Общее состояние реплики держат в базе: в compose задано `DISTRIBUTED_STATE=postgres`. Это вертикальное масштабирование одной машины. Если задача — пережить отказ сервера, нужна [схема на двух нодах](ha.md). ## Запуск С nginx: ```bash ./scripts/prepare-nginx.sh docker compose --profile proxy up -d --scale backend-local=2 ``` Без nginx: ```bash docker compose up -d --scale backend-local=2 ``` Число реплик можно менять той же командой; лишние контейнеры compose остановит сам. !!! note "Имя сервиса backend" В командах `docker compose` сервис backend называется `backend-local`. В прежних версиях дистрибутива он назывался `local-backend`. Если команда отвечает `no such service: backend-local`, стенд ещё не обновлён — используйте прежнее имя или обновите стенд командой `./update.sh`. ## Ограничения | Ограничение | Почему | Что делать | | --- | --- | --- | | Прямой доступ к API с хоста при `--scale` недоступен | `docker-compose.publish-backend.yml` публикует фиксированный порт хоста, и вторая реплика его занять не сможет | Ставить nginx и ходить в API через него | | RADIUS на хост не публикуется | UDP-порт нельзя отдать нескольким контейнерам сразу | Один экземпляр `local-backend` на хост либо [две ноды](ha.md) с `RADIUS_UDP_BINDING=all` | | Слушатель RADIUS работает только у лидера | Владелец аренды один — при `RADIUS_UDP_BINDING=leader` остальные реплики UDP не слушают | Учитывать при планировании: масштабирование ускоряет HTTP API, но не RADIUS | Оверлей `docker-compose.publish-radius.yml` при нескольких репликах подключать не нужно: `install.sh` и `update.sh` замечают, что реплик больше одной, не включают оверлей в `COMPOSE_FILE` и печатают предупреждение. `./doctor.sh` в этом случае выдаёт `[WARN]`, а не ошибку. ## Проверка ```bash docker compose ps backend-local ./doctor.sh ``` В выводе `docker compose ps` должно быть столько контейнеров backend, сколько задано в `--scale`. В отчёте `doctor.sh` обратите внимание на строку о репликах и публикации UDP: она подтверждает, что оверлей RADIUS не подключён — для этой схемы это нормально. После обновления `./update.sh` удаляет предыдущие образы только тогда, когда **все** реплики перешли в `healthy`. Если хотя бы одна не поднялась, образы остаются на диске — подробнее в разделе [«Старые образы и место на диске»](../local-instance.md#старые-образы-и-место-на-диске). ## Смотрите также - [Отказоустойчивость на двух нодах](ha.md) - [Внешний reverse proxy](reverse-proxy.md) - [Установка локального инстанса](../local-instance.md)