Ошибка балансировщика нагрузки с Nginx и докером

#docker #http #nginx #flask #load-balancing

#докер #http #nginx #колба #балансировка нагрузки

Вопрос:

Я пытаюсь настроить балансировщик нагрузки с 3 репликами для обработки запросов. Я использую Nginx для балансировки нагрузки, Flask для развертывания API и Postgres для обработки данных в режиме репликации.

Моя Докер-композиция выглядит так:

 version: '3.5'  services:  tienda:  build: ./api  deploy:  replicas: 3  depends_on:  - postgresql-master  - postgresql-slave  ports:  - 8080  postgresql-master:  image: docker.io/bitnami/postgresql:11  ports:  - '5432:5432'  volumes:  - 'postgresql_master_data:/bitnami/postgresql'  environment:  - POSTGRESQL_REPLICATION_MODE=master  - POSTGRESQL_REPLICATION_USER=repl_user  - POSTGRESQL_REPLICATION_PASSWORD=repl_password  - POSTGRESQL_USERNAME=postgres  - POSTGRESQL_PASSWORD=123  - POSTGRESQL_DATABASE=tienda  - ALLOW_EMPTY_PASSWORD=yes  postgresql-slave:  image: docker.io/bitnami/postgresql:11  ports:  - '5433:5432'  depends_on:  - postgresql-master  environment:  - POSTGRESQL_REPLICATION_MODE=slave  - POSTGRESQL_REPLICATION_USER=repl_user  - POSTGRESQL_REPLICATION_PASSWORD=repl_password  - POSTGRESQL_MASTER_HOST=postgresql-master  - POSTGRESQL_PASSWORD=123  - POSTGRESQL_MASTER_PORT_NUMBER=5432  - ALLOW_EMPTY_PASSWORD=yes  nginx:  build: ./nginx  ports:  - "8080:80"  depends_on:   - tienda volumes:  postgresql_master_data:  driver: local   

и nginx.conf выглядит так:

 upstream loadbalancer {  server sist3-tienda-1:3050 weight=3 max_fails=0 fail_timeout=5s;  server sist3-tienda-2:3050 weight=2 max_fails=0 fail_timeout=5s;  server sist3-tienda-3:3050 weight=1 max_fails=0 fail_timeout=5s; } server {  location / {  proxy_pass http://loadbalancer;  proxy_read_timeout 5m; }}  

Проблема начинается, когда я пытаюсь получить http://localhost:8080 , я получаю 502 плохих шлюза и шоу Docker-compose:

 nginx_1 | 2021/12/06 06:06:23 [error] 31#31: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.21.0.4:3050/", host: "localhost:8080" nginx_1 | 2021/12/06 06:06:23 [warn] 31#31: *2 upstream server temporarily disabled while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.21.0.4:3050/", host: "localhost:8080" nginx_1 | 2021/12/06 06:06:23 [error] 31#31: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.21.0.6:3050/", host: "localhost:8080" nginx_1 | 2021/12/06 06:06:23 [warn] 31#31: *2 upstream server temporarily disabled while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.21.0.6:3050/", host: "localhost:8080" nginx_1 | 2021/12/06 06:06:23 [error] 31#31: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.21.0.5:3050/", host: "localhost:8080" nginx_1 | 2021/12/06 06:06:23 [warn] 31#31: *2 upstream server temporarily disabled while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.21.0.5:3050/", host: "localhost:8080" nginx_1 | 172.21.0.1 - - [06/Dec/2021:06:06:23  0000] "GET / HTTP/1.1" 502 157 "-" "PostmanRuntime/7.28.4" "-"   

Есть идеи, что происходит?

Комментарии:

1. Верны ли IP — адреса? 172.21.0.1 и 172.17.0.1

2. что происходит 172.17.0.1:3050 ? (сейчас sist3-tienda-1:3050 )

3. @Raptor обновлено, это была попытка исправить 😛

4. Можете ли вы подключиться по телетайпу к указанному IP-адресу и порту?

5. @Raptor, если я попаду в контейнер, который запускает Nginx и Telnet до 127.0.0.1 3050 (где flask показывает, что конечная точка прослушивает) Я получаю: Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused . То же самое, если я попытаюсь подключиться к telnet снаружи из контейнеров