1. 程式人生 > >[Demo實踐]使用Docker測試nginx負載均衡策略

[Demo實踐]使用Docker測試nginx負載均衡策略

實踐環境:
linux主機,已安裝docker

步驟1:
下載伺服器映象,此處直接選擇nginx
docker pull nginx

步驟2:
啟動5個容器,分別命名n1~n5,並暴露埠8071 ~ 8075
docker run --name n1 -d -p 8071:80 nginx
docker run --name n2 -d -p 8072:80 nginx
docker run --name n3 -d -p 8073:80 nginx
docker run --name n4 -d -p 8074:80 nginx
docker run --name n5 -d -p 8075:80 nginx

步驟3:
建立新的index.html,替換容器nginx主頁,以區分負載均衡的情況
建立
echo n1 > index.html
覆蓋
docker cp index.html n5:/usr/share/nginx/html/
其他n2~n5略,此處麻煩的話可以寫shell指令碼處理。

步驟4:
為先忽略docker容器間通訊問題,把負載均衡策略的nginx[以下稱為n0]部署在docker外側


測試

策略一:輪詢
修改nginx.conf,訪問n0地址,多次訪問發現結果在n1~n5間切換。

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    upstream tomcat_server{
        server 127.0.0.1:8071 weight=10;
        server 127.0.0.1:8072 weight=10;
        server 127.0.0.1:8073 weight=10;
        server 127.0.0.1:8074 weight=10;
        server 127.0.0.1:8075 weight=10;
    }

    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_pass http://tomcat_server;
            root html;
            index index.html;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html  {
            root html;
        }
    }

}

策略二:基於權重
只需增加權重即可
server 127.0.0.1:8071 weight=10;

策略三:ip_hash
只需在upstream尾部增加ip_hash;即可按ip分配

策略四:fair
按響應時間短分配,需要安裝第三方模組

策略五:url_hash
hash $request_uri;
hash_method crc32;
按url分配,需要安裝第三方模組