2017-06-09 23 views
0

我正在使用Docker/Node/Nginx设置一个Web服务器。我一直在玩docker-compose中的设置,并提出了两个工作解决方案 - 但在负载平衡方面,其中一个可能太好了,无法成立(因为它似乎允许我通过没有创建额外的图像/容器)。如果我所看到的实际上是合法的,并且多个图像等不是负载平衡的要求,我正在寻找验证。这个Docker/NGINX/Node设置实际上是否按预期负载平衡?

溶液1(无附加图像):

搬运工-compose.yml

version: '3' 

volumes: 
    node_deps: 

services: 
    nginx: 
    build: ./nginx 
    image: nginx_i 
    container_name: nginx_c 
    ports: 
     - '80:80' 
     - '443:443' 
    links: 
     - node 
    restart: always 
    node: 
    build: ./node 
    image: node_i 
    container_name: node_c 
    command: "npm start" 
    ports: 
     - '5000:5000' 
     - '5001:5001' 
     - '5500:5000' 
     - '5501:5001' 
    volumes: 
     - ./node:/src 
     - node_deps:/src/node_modules 

nginx.conf

http { 
    ... 

    upstream shopster-node { 
    server node:5000 weight=10 max_fails=3 fail_timeout=30s; 
    server node:5500 weight=10 max_fails=3 fail_timeout=30s; 
    keepalive 64; 
    } 

    server { 
    ... 
    } 

} 

溶液2(具有附加图像):

version: '3' 

volumes: 
    node_deps: 

services: 
    nginx: 
    build: ./nginx 
    image: nginx_i 
    container_name: nginx_c 
    ports: 
     - '80:80' 
     - '443:443' 
    links: 
     - node_one 
     - node_two 
    restart: always 
    node_one: 
    build: ./node 
    image: node_one_i 
    container_name: node_one_c 
    command: "npm start" 
    ports: 
     - '5000:5000' 
     - '5001:5001' 
    volumes: 
     - ./node:/src 
     - node_deps:/src/node_modules 
    node_two: 
    build: ./node 
    image: node_two_i 
    container_name: node_two_c 
    command: "npm start" 
    ports: 
     - '5500:5000' 
     - '5501:5001' 
    volumes: 
     - ./node:/src 
     - node_deps:/src/node_modules 

ngin x.conf

http { 
    ... 

    upstream shopster-node { 
    server node_one:5000 weight=10 max_fails=3 fail_timeout=30s; 
    server node_two:5500 weight=10 max_fails=3 fail_timeout=30s; 
    keepalive 64; 
    } 

    server { 
    ... 
    } 

} 

这两种情况都加载该应用完美,在localhost &在指定端口上。我确信场景2是正确的负载平衡,因为它模仿了传统的多服务器场景。

有什么办法可以验证场景1实际上是否按预期进行负载平衡?这将是我首选的方法,我只需要知道我可以信任它。

回答

0

是的,使用图像jwilder/nginx-proxy,您可以添加许多工人,无需额外的配置。

参见文档:https://hub.docker.com/r/jwilder/nginx-proxy/

It's很简单,configurate,你可以用泊坞窗,撰写规模扩展[的name_service] = [NUM]

的方式configurate是

version: '3' 
services: 
    nginx-proxy: 
    image: jwilder/nginx-proxy 
    container_name: nginx-proxy 
    ports: 
     - "80:80" 
    volumes: 
     - /var/run/docker.sock:/tmp/docker.sock:ro 

    node: 
    build: ./node 
    image: node_i 
    command: "npm start" 
    ports: 
     - '5000' 
    volumes: 
     - ./node:/src 
     - node_deps:/src/node_modules 
    environment: 
     - VIRTUAL_HOST=whoami.local 

要执行容器

$ docker-compose up 
$ docker-compose scale node=2 
$ curl -H "Host: whoami.local" localhost 
0

运行docker-compose up -d,然后使用docker-compose scale添加其他节点容器。

docker-compose scale node=5

这将旋转起来,除了4升额外的节点的容器到现有容器。如果您然后运行:

docker-compose scale node=2

它将删除节点容器3,让你有2