nginx + docker 负载均衡

背景

写了一个 http 服务器,创建了三个 docker 容器,分别跑在服务器对应端口号为8081,8082,8083上.用 nginx 对其进行负载均衡.

nginx 配置关键(nginx.conf)

    upstream mynginx {
    #least_conn;
    server localhost:8081 max_fails=1 fail_timeout=15s weight=1;
    server localhost:8082 max_fails=1 fail_timeout=15s weight=1;
    server localhost:8083 max_fails=1 fail_timeout=15s weight=1;
    #server localhost:8889 down;
}
    server {
# 这里不可以是8080!因为8080被nginx占用了,肯定是访问不到自己的服务的.
 	 listen       8086;
#        listen       8080 default_server;
#        listen       [::]:80 default_server;
        server_name  mynginx;
#        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;

        location / {
		proxy_pass http://mynginx/;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

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

注意问题

1.nginx 监听端口不可以是8080!因为 nginx 服务的端口为8080,如果自己的再监听8080,那么永远都没法访问到自己的服务,因为这个端口是 nginx 在用了!

测试

一个 docker 容器 运行情况下压测:

一个 docker 容器 运行的时候会报错  Connection reset by peer 的错误,因为服务器连接数过多而砍掉了一部分连接.

三个 docker 容器 + nginx 运行情况下压测:

差不多,甚至还要比一个运行的时候更慢.推测是因为我的服务器是单核的,并且配置不高,用 nginx 没有必要,并且还增加了负载均衡调度的负担.所以速度会更慢.但是它会把请求负载均衡到三个服务上,这样就不会导致一个服务的连接数过多而报错了.并且还能在个别服务下线(出问题)的时候保持对外服务正常.

猜你喜欢

转载自blog.csdn.net/lianup/article/details/90139939
今日推荐