Коротко. HAPROXY_DOWN — CRITICAL «шлюз высокой доступности не поднялся, S3 на этой ноде затронут». Причины две: конфиг шлюза отрендерен с мусором (тогда haproxy не стартует) или порт 80/443 держит посторонний процесс, и продукт не может занять его. Чекер ждёт конкретный процесс (user=haproxy, ppid=1); пока его нет, событие висит. Лечится штатным configure машины после восстановления источника конфига.
Симптом
CRITICAL HAPROXY_DOWN: «High availability gateway down and could not be restarted. S3 traffic will be impacted on this system node.»- В логе монитора каждые несколько минут:
haproxy processes expected 1, found 0(или ожидаемое число изnbprocне совпадает с фактическим). - S3-клиенты на этой ноде получают ошибку соединения или TLS-ошибку, хотя другие ноды отвечают.
- Подзадача приложения
scalerdвFAILURE, следом машинная группа обрывается (TASK_TERMINATED), остальные подзадачи висят вQUEUED.
Что проверить первым (read-only)
-
Кто слушает 80/443:
bash sudo ss -ltnp | grep -E ':80 |:443 'Ожидаетсяhaproxyна обоих портах (роли портов — в карте портов). Любой другой процесс — причина: продукт не может занять порт. -
Какие процессы haproxy есть:
bash ps -o pid,ppid,user,args -C haproxyОжидается: файл конфигурации/etc/haproxy/haproxy.cfg, владелецhaproxy,ppid=1, число процессов равноnbproc. Лишние экземпляры с другим конфигом или от другого пользователя — отдельная проблема, их быть не должно. -
Конфиг валиден — проверять только парой файлов:
bash sudo /usr/sbin/haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/scalerd.cfgОжидаетсяConfiguration file is valid. Отдельноscalerd.cfgпадает на%tr— это ложная ошибка проверки,modeберётся изdefaultsпервого файла. -
Отвечает ли фронт:
bash curl -i http://127.0.0.1/ОжидаетсяHTTP/1.1 307иServer: Quantum-ActiveScaleплюсx-amz-request-id. -
Что говорит монитор:
grep 'haproxy processes' /opt/ampli/var/log/mona/mona.log | tail -
Карта IAM: в
/etc/haproxy/map/iam.mapстрока должна быть<DOMAIN> backend-iam-public, а не<DOMAIN> <DOMAIN>. И PEM/opt/ampli/cfg/scalerd/ssl/scalerd.pemчитается только под root: «unable to load SSL private key» безsudo— это права, не порча файла.
Причина
1. Конфиг отрендерен с мусором
configure машины рендерит /etc/haproxy/haproxy.cfg и conf.d/scalerd.cfg из источника
(плейбук/модель). Если источник испорчен — например, массовая подстановка «домена» затерла все
строки value: "…" (TLS-опции, шифры, таймауты, cpu-map, имя IAM-бэкенда) — рендер даёт
невалидный файл, haproxy не стартует, чекер видит found 0.
2. Ловушка повтора
Модель, собирая параметры для configure, приносит текущие значения с машины. Пока
раскатанные файлы битые, каждый прогон воспроизводит ту же битость: «починили — снова сломалось».
Поэтому чинить надо не только файл, но и источник, иначе следующий configure всё вернёт.
3. Чужой процесс на порту
Если 80/443 занял посторонний процесс (наш прокси, тестовый сервер, второй haproxy), штатный
не может забиндиться. Формально S3 может даже отвечать — но не тем сертификатом и не тем бэкендом,
а чекер всё равно видит ноль «правильных» процессов. Это класс «лишние процессы/порты».
4. Где искать первопричину
Порядок разбора: порт (ss -ltnp) → процесс (ps -C haproxy) → конфиг (пара файлов) → источник
рендера. Если конфиг валиден, а процесса нет — искать владельца порта; если процесс есть, но чекер
его не считает — сверять user/ppid/cmdline с ожиданием чекера. Если конфиг невалиден —
подниматься к источнику и не править раскатанный файл «на глаз», иначе следующий configure
вернёт мусор.
5. Почему падает вся машинная группа
Прогон configure падает на задаче перезапуска haproxy; подзадача приложения получает FAILURE,
и вся группа машины обрывается. В details события подзадачи видно
Failed to set 'restarted' for service 'haproxy'. Это следствие, а не отдельная поломка.
Решение (штатное)
- Вернуть источник конфига. Правка — только значениями из модели/бэкапа; бэкап держать вне
каталога продукта. Проверить, что в источнике ровно одна осмысленная правка (например,
iam_domain_set), diff с бэкапом — одна строка. - Вернуть раскатанные файлы к значениям источника (иначе повтор): сначала сухой прогон, затем запись с бэкапами.
- Проверить конфиг парой файлов — пункт 3 списка проверок, до
Configuration file is valid. - Освободить порты. Найти владельца
80/443(ss -ltnp), остановить посторонний процесс штатными средствами ОС; лишние экземпляры haproxy снять. Порты должны остаться за продуктом. - Поднять шлюз штатно:
configureмашины из Model API (POST /model/machine/<MGUID>/action/configure/) — он перезапускает службу и рендерит конфиги из источника. Ожидается200и процессuser=haproxy, ppid=1. - Проверить S3-фронт на всех нодах:
307+Server: Quantum-ActiveScale.
Если штатный путь недоступен
Временная мера, не штатно. Если configure недоступен, допустимо поднять службу вручную
штатным юнитом ОС после проверки конфига — но это обход: следующий configure может снова
перерендерить битое, если источник не исправлен. План замены — правка источника и штатный
configure в ближайшее окно.
Проверка
haproxy -c -f … -f …→Configuration file is valid.ps -C haproxy→ нужное число процессов,user=haproxy,ppid=1, конфиг/etc/haproxy/haproxy.cfg.curl -i http://127.0.0.1/→307иServer: Quantum-ActiveScale.- Событие:
HAPROXY_DOWN→HANDLED_AUTO, появилосьHAPROXY_RECOVERED. - В
mona.logновых строкfound 0нет. - Подзадача
scalerd(actionconfigure) →SUCCESS;mtimeконфигов не изменился — значит восстановленный текст совпал с тем, что отрендерил бы продукт.
Профилактика
- Любую правку конфигов шлюза делать точечно (одна строка), с diff против бэкапа.
- Бэкапы — вне каталога продукта; файлы
.orig/.bakвgroup_varsзапрещены: ansible грузит все файлы каталога, бэкап побеждает. - Не оставлять на нодах посторонние процессы на
80/443; порты — только за продуктом. - В мониторинг добавить
haproxy -cи число процессов: это ранний сигнал доHAPROXY_DOWN.
Источники и дата
- Software Documentation Center (доступ 2026-11-07).
- Наша практика (обезличено): восстановление шлюза на 3-нодном кластере после порчи источника конфига; конфиг проверялся парой файлов, службу поднял штатный
configure, подзадачаscalerd—SUCCESS. - Обновлено: 2026-11-07.