Nginx 负载均衡基础知识
nginx 的 upstream 目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2)、weight
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
4)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)、url_hash(第三方)
所以,上面提到了,nginx的upstream模块,所以nginx的负载均衡是通过upstream模块来实现的,那我们可以查看一下nginx官方的介绍
http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
废话不多说,我们准备实验环境
1.安装docker
2.docker pull nginx
3.配置环境
1.docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
2.docker run --name some-nginx2 -v /some/content1:/usr/share/nginx/html:ro -d nginx
3.docker run -v /some/nginx/nginx.conf:/etc/nginx/nginx.conf -v /some/nginx/conf.d:/etc/nginx/conf.d -p 8000:80 -d nginx
配置环境中的1和2都是运行了一个单独的nginx,没有把端口映射出来,因为负载均衡配置的时候不需要公网地址即可,3是运行一个nginx作为负载均衡,把nginx.conf配置文件和conf.d文件夹与宿主机存储打通,这样就可以在docker容器外部修改配置文件了,注意得的是因为nginx.conf是一个文件,所以在宿主机路径下一定要新建一个nginx.conf文件,否则就会报错的。
接下来开始设置配置文件
因为nginx.conf中引用了conf.d文件夹下的*.conf文件
include /etc/nginx/conf.d/*.conf;
所以只要在*.conf中修改就可以了
upstream web {
server 172.17.0.2:80; #第一个nginx站点
server 172.17.0.3:80; #第二个nginx站点
}
设置location 具体格式可以参考上面的http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html介绍
location / {
proxy_pass http://web;
#root /usr/share/nginx/html;
#index index.html index.htm;
}
设置完成后重启docker容器使得更改生效,如果更改错误的话,这个容器是重启不成功的。
接下来,因为咱们配置环境的时候第三个容器将端口发布出来了,就可以访问8000端口来查看是否配置成功。
这个只是一个简单的负载均衡实验,可以在server后面添加负载方式,可以自己动手做一下!
祝好运!