文章目录
标题标题利用nginx实现负载均衡
0、学习nginx网站(中文网)
学习文档:nginx中文文档
1、安装nginx和tomcat
我这里是使用docker安装的。安装流程可参照 dockerfile
这里安装了两个tomcat,端口分别是42000和42001。第二个tomcat的首页随便加了些代码区分
2、nginx配置
#这里的域名要和下面proxy_pass的一样
upstream fengzp.com {
server 192.168.99.100:42000 weight=1;
server 192.168.99.100:42001 weight=2;
}
server {
listen 80;
server_name 192.168.99.100;
location / {
proxy_pass http://fengzp.com;
proxy_redirect default;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
3、测试
- 刷新页面发现页面会发生变化,证明负载配置成功。因为我配的权重第二个是第一个的两倍,所以第二个出现的概率会是第一个的两倍。
4、后续问题
- 如果关了tomcat1,再多次刷新页面,接下来出现的就会都是tomcat2的页面,但是时而快时而慢。
- 这其中原因是当如果nginx将请求转发到tomcat2时,服务器会马上跳转成
- 但是如果是转到tomcat1,因为tomcat1已经关闭了,所以会出现一段等待响应过程的过程,要等它失败后才会转到tomcat2。
而这个等待响应的时间我们是可以配置的。
这个时间由以下3个参数控制:
- proxy_connect_timeout:与服务器连接的超时时间,默认60s
- fail_timeout:当该时间内服务器没响应,则认为服务器失效,默认10s
- max_fails:允许连接失败次数,默认为1
等待时间 = proxy_connect_timeout + fail_timeout * max_fails
如果我这样配置的话,只需等待6秒就可以了。
5、负载均衡策略
1、轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。
upstream fengzp.com {
server 192.168.99.100:42000;
server 192.168.99.100:42001;
}
2、最少连接
把请求分配到连接数最少的server
upstream fengzp.com {
least_conn;
server 192.168.99.100:42000;
server 192.168.99.100:42001;
}
3、权重
使用weight来指定server访问比率,weight默认是1。以下配置会是server2访问的比例是server1的两倍。
upstream fengzp.com {
server 192.168.99.100:42000 weight=1;
server 192.168.99.100:42001 weight=2;
}
4、ip_hash
每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。
upstream fengzp.com {
ip_hash;
server 192.168.99.100:42000;
server 192.168.99.100:42001;
}
ip_hash可以和weight结合使用。
6、学习心得
这一篇nginx负载均衡的博客,写的很好,从nginx的配配置说起,一步步深入,并附有源码以及截图,非常适合新手学习。
nginx在服务器的运维上有非常大的用处,当然是对于运维工作人员来说,市场上也有其他的负载均衡的同类东西, A10 Networks负载均衡,Citrix ADC 负载均衡等,不过相比较来说,nginx比较好,当然这是从个人观点出发。
nginx通俗的来讲,就是不能让闲的服务器闲的发霉,忙的服务器忙的要死,什么意思呢?
- 比如:你有一个4-5台电脑组成的服务器集群,如果用户发过来几个请求,一台电脑处理完全没有问题。
- 但是如果成千上万个请求,我们还是先让一台电脑去处理,一台电脑处理不完时,在使用另外的电脑,以此类推,如果我们只在一台电脑达到负荷时,在启用另一台,那么我们的处理效率为非常的慢。
nginx解决的就是这个问题,使用nginx可以让工作平均分配到每一台我们部署的电脑上,试想一下:
- 让一台电脑处理几千条指令,另一台处理几十条指令,还有电脑闲的发霉的服务器集群。
- 与每一台电脑都平均处理几十条指令的服务器集群相比,这二者那个快,我想这都不在一个数量级上了。
所以负载均衡对那些要应对高并发或者超高并发量的服务器或者服务器集群来说,是必然的选择,基本上也是每一个运维人员的必备技术。