У меня проблемы с настройкой nginx.
Я использую nignx в качестве обратного прокси. Я хочу отправить все свои запросы на свой первый сервер. Если первый сервер не работает, я хочу отправить запросы на второй сервер.
Короче говоря, как мне получить отказоустойчивое решение без балансировки нагрузки?
Вам нужна активная + пассивная установка. Вот пример фрагмента nginx conf, который поможет вам начать работу:
upstream backend {
server 1.2.3.4:80 fail_timeout=5s max_fails=3;
server 4.5.6.7:80 backup;
}
server {
listen 80;
server_name whatevs.com;
location / {
proxy_pass http://backend;
}
}
Итак, «обычно» все запросы будут отправляться на хост 1.2.3.4. Если мы получим три ошибки в этом блоке, то 4.5.6.7 вступит в силу.
Расширяя ответ chrskly, вы можете настроить 3 флага / конфигурации.
В следующем примере GRPC, если главный сервер не может быть подключен в течение 7 секунд, переключитесь на резервный и отметьте главный сервер как неработающий на 6000 секунд:
upstream grpcservers {
server 192.168.0.XX:9997 fail_timeout=6000s max_fails=1; # After 1 fail in 6000s, Main server is marked unavailable for 6000s.
server 192.168.0.XX:9999 backup;
}
location / {
grpc_pass grpc://grpcservers;
grpc_connect_timeout 7s; # If conn cant be made in 7sec, switch to backup
}
Балансировка нагрузки в nginx очень проста: мы просто настраиваем имена серверов в восходящей области, где мы пишем список серверов для балансировки нагрузки.
nginx поддерживает другой алгоритм балансировки нагрузки, по умолчанию это циклический алгоритм, но мы настраиваем его с другими ключами, такими как ip_hash ...
http{
upstream servername{
ip_hash//for sticky hash
least_conn//FOR least connection
sever localhost:1001;
sever localhost:1002;
sever localhost:1003;
}