背景
写了一个 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 没有必要,并且还增加了负载均衡调度的负担.所以速度会更慢.但是它会把请求负载均衡到三个服务上,这样就不会导致一个服务的连接数过多而报错了.并且还能在个别服务下线(出问题)的时候保持对外服务正常.
nginx 常用命令
启动: 1) nginx 2)nginx -c /path/to/your/nginx.conf
更改配置后重新启动:nginx -s reload
停止:nginx -s stop
重启:kill -HUP pid( 从容地重启 )
nginx 学习参考
官方文档:http://nginx.org/en/docs/
书籍: << nginx 开发从入门到精通 >>