Сегодня мы будем делать с вами свой Nginx Plus (тот, который платный), а именно реализуем плюшку «Active health checks».

Это когда у тебя, к примеру, 10 апстримов, и если один из них дохнет, то какой-нибудь богатый клиент получит ошибку 502, обозлится и ничего не купит. А должен автоматически попасть на другой, более живой апстрим и потратить денежку.

Само собой, будем применять инновационные технологии и немного возьмём из фреймворка «гавно и палки». Ну а как ты хотел? Бест практик! На халяву и уксус сладкий, как говорится. Короче, всё элементарно. Погнали.

Ставим ванильный Nginx и делаем так:

upstream backend {
    server unix:/var/run/haproxy/backend.sock;
}

location / {
  proxy_pass http://backend;
}

Ставим рядом HAProxy и конфигурируем блоки frontend и backend таким образом:

defaults
  retries 3
  timeout check 5s

frontend bashdays-backend
  bind /var/run/haproxy/backend.sock user nginx mode 600
  mode tcp
  default_backend bashdays-backend
  option tcplog

backend bashdays-backend
  balance roundrobin
  option tcplog
  server bashdays-w1 192.168.0.1:80 check
  server bashdays-w2 192.168.0.2:80 check
  server bashdays-w3 192.168.0.3:80 check
  server bashdays-w4 192.168.0.4:80 check

Что это за хрень, щас объясню. Смотри. Клиент идёт на хуй корень / и попадает в апстрим Nginx backend, а апстрим сконфигурирован на сокет backend.sock от HAProxy.

Далее запрос клиента пролетает по сокету, как фанера над загнивающим Парижем, и попадает в блок HAProxy backend, где у меня описаны все бэкенд-серверы (w1, w2, w3, w4).

Если по какой-то причине, к примеру, сервер w2 отдаст концы, HAProxy это задетектит (timeout check 5s) и закинет запрос клиента на рабочий инстанс, тем самым клиент получит статус 200. А 200 == заебись хорошо! 🗒

Ну а потом, когда w2 очухается, HAProxy снова заберёт его в свои сети и будет использовать на всю катушку, как провинившуюся падшую женщину.

Вот так это и работает. Вот так вот и живём. Балансировка нагрузки + round-robin + active health checks.

У HAProxy ещё есть встроенный визуальный мониторинг, но об этом я расскажу тебе в одной из следующих статей.