Linux Labs

Практики SRE: SLO, инциденты, отказоустойчивость / Ступень 7 из 8

Балансировщик и проверка здоровья

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 10 · на машине · 3 мин

Копии за одним адресом

Здесь — как nginx делит запросы между копиями и где видно, какая копия ответила.

Копии приложения nginx собирает в группу — блок upstream. В proxy_pass вместо адреса одной копии стоит имя группы:

nginx
upstream app {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}
server {
    listen 80 default_server;
    location / {
        proxy_pass http://app;
    }
}

Каждая строка server — одна копия, бэкенд. Запросы nginx раздаёт по кругу: первый — 8081, второй — 8082, третий — снова 8081. Поэтому больная копия из двух портит каждый второй ответ.

Какая копия ответила, nginx знает: адрес копии лежит в переменной $upstream_addr, её код — в $upstream_status. На этом сервере они записаны в журнал /var/log/nginx/lb-access.log (поля upstream= и ustatus=) и в заголовок ответа X-Upstream.

bash
tail -n 4 /var/log/nginx/lb-access.log
Проверь себя 1 вопрос

В upstream три копии — 8081, 8082 и 8083, больна 8083: отвечает 500. Какие из шести запросов подряд получат 500?

  • Круг теперь из трёх копий: на больную приходится каждый третий запрос.

  • Первый запрос получает первая строка server — 8081. 8083 стоит третьей: её запросы — третий и шестой.

  • Второй запрос уходит к здоровой 8082. По кругу 8083 достаются третий и шестой.

nginx раздаёт запросы по кругу в порядке строк server: 8081, 8082, 8083, снова 8081. На третью копию приходятся третий и шестой запросы. Проверить — поле upstream= в tail -n 6 /var/log/nginx/lb-access.log.

Главное в шаге

  • Блок upstream собирает копии приложения под одним именем, proxy_pass отправляет запросы этому имени.
  • Копии получают запросы по кругу: одна больная копия из двух портит каждый второй ответ.
  • Кто ответил — в $upstream_addr и $upstream_status: по журналу балансировщика видно, какая копия больна.
Ubuntu 24.04
Загрузка…