LINUX.ORG.RU
ФорумAdmin

Множественный upstream для nginx

 ,


0

3

Необходимо реализовать следующее поведение: upstream A{ server 1 server 2 server 3 } upstream B{ server 1 server 2 server 3 }

upstream C{ server 1 server 2 server 3 }

Нужно, чтобы nginx пытался отдать сначала с upstream A. Если нет ни одного живого хоста в А, тогда с В. Если нет в В, тогда с С. И т.д.

Ответ на: комментарий от Difrex

Haproxy перед nginx. Нужно раскидать по бэкэндам. Имхо втыкать ещё один haproxy не «комильфо».

nejtr0n
() автор топика
Ответ на: комментарий от aol

Проблема в том, что try_files воспринимает только один именованный location. (Последний) Всё остальное отдаёт как статику.

nejtr0n
() автор топика

Попытался решить с помощью дополнительных апстримов. Тока оверхед уж очень большой получился

upstream balancer_phy_dc {
    server 127.0.0.1:8080; # Phy
    server 127.0.0.1:8081 backup; # Dc_All_balancer
}

upstream balancer_dc_all {
    server 127.0.0.1:8082; # Dc
    server 127.0.0.1:8083 backup; # All
}

upstream phy_backend {
        server A;
}

upstream dc_backend {
        server B;
}

upstream all_backend {
        server C;
}

server {
    listen       80;
    location / {
      proxy_pass http://balancer_phy_dc;
    }
}
server {
    listen       127.0.0.1:8080;

    location ~ \.php$ {
        fastcgi_pass   phy_backend;
    }
}
server {
    listen       127.0.0.1:8081;
    location / {
      access_log off;
      proxy_pass http://balancer_dc_all;
    }
}

server {
    listen       127.0.0.1:8082;

    location ~ \.php$ {
        fastcgi_pass   dc_backend;
    }
}

server {
    listen       127.0.0.1:8083;

    location ~ \.php$ {
        fastcgi_pass   all_backend;
    }
}

nejtr0n
() автор топика
Ответ на: комментарий от dhameoelin

weigt даёт распределение. Из офф документации

    server backend1.example.com weight=5;
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

В вышеприведённом примере каждые 7 запросов будут распределены так: 5 запросов на backend1.example.com и по одному запросу на второй и третий серверы.

У меня чуть чуть другая задача.

nejtr0n
() автор топика
Ответ на: комментарий от dhameoelin

Да. Первая группа - это контейнеры в рамках физической машины. Вторая - в рамках датацентра Третья - по всем датацентрам.

То есть, пока есть контейнеры на машине - нельзя ходить на другие. Когда их нет - то по датацентру. Если и в ДЦ нет, тогда по всему кластеру.

Как без колхоза сделать - хз.

nejtr0n
() автор топика
Ответ на: комментарий от nejtr0n

Просто я, исходя из имён, подумал, что одни и те же сервера используются. А без колхоза - это, наверное, апстрим-кластер делать с весами, приоритетами, Джеком Блэком и шлюзами...

dhameoelin ★★★★★
()
Ответ на: комментарий от aol

Интересный хак! попробую заиспользовать.

nejtr0n
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.