Docker-compose + Nginx as Load Balancer

Aug 21, 2020·

1 min read

前言

之前測過 Nginx 當 Load Balancer 在某些條件下分配是否均勻,由於並沒有要測試效能,所以直接在本機寫了個 docker-compose 。以下紀錄設定檔案大概怎麼寫。

目標

用一個 docker-compose 和一些 Dockerfile ,組成一個這樣的架構

實作

所以,會需要兩種容器

  • Nginx 和 lb.conf
  • server_i 的 Dockerfile

server_i

這部分我們直接使用 SimpleHTTPServer 作為示範,並沒有用其他統計機制。

事實上這裏可以用更快(例如 go server 、 green event … )的 server 端來取代,以做出有效率的測試。

FROM python:3.8
CMD python3 -m SimpleHTTPServer
EXPOSE 8080

Nginx

config file

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream backend {
        server server1:8080;
        server server2:8080;
        server server3:8080;
    }

    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass <http://backend>;
        }
    }
}

docker-compose

version: '3'
services:
  lb:
    image: nginx
    volumes:
      - ./lb/server.conf:/etc/nginx/nginx.conf
    ports:
      - 8080:80
    depends_on:
      - server1
      - server2
      - server3

  server1:
    build: server/

  server2:
    build: server/

  server3:
    build: server/

測試

這裏並沒有把測試 Script 擺上,不過細節說一下,為了可以測的更快速,建議在 Server 端和 Client 端都使用有 async 機制的方式。例如: Python 使用 green event + grequest。

然後用 Logger 紀錄打到的 Request ,打完再做統計。