一 什么是负载均衡
nginx可以成为代理服务器(如何配置可以点这里看我上一篇博客)统一收敛流量,再将流量分发给后端服务器,当后端服务器不止一个时,就涉及分发算法问题,这就是负载均衡。通过合理地算法实现更高的负载及性能。
二 常见负载均衡算法
- ll+weight: 轮询加权重(默认)
- ip_hash:基于Hash计算 ,用于保持session一至性
- url_hash:静态资源缓存,节约存储,加快速度(第三方)
- least_conn :最少链接(第三方)
- least_time :最小的响应时间,计算节点平均响应时间,然后取响应最快的那个,分配更高权重(第三方)
接下来演示前两个
三 配置演示
配置 upstream 以及 location 可以实现负载均衡
注:我在虚拟机安装了两台tomcat,端口号一个时8080,另一个是8081。(如何配置同时运行两台toncat可以看这篇博客)两台tomcat的webapps目录下都有snowman/hello.html文件,内容tomcat1是“this is 111”,tomcat2是“this is 222”。
轮询算法
upstream servers {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
location /snowman {
proxy_pass http://servers;
}
这里配置了第一台tomcat权重为1,第二台权重为2,所以在访问时应该是一次tomcat1,一次tomcat2,一次tomcat2,再一次tomcat1,一次tomcat2,一次tomcat2…
启动tomcat1,tomcat2,nginx,curl进行访问
ip_hash算法
upstream模块加上ip_hash,很简单。
upstream servers {
ip_hash;
}
将访问的ip进行hash,然后固定分配到某台服务器上,优先级高于轮询算法。
upstream 相关参数:
service #反向服务地址 加端口
weight #权重
max_fails #失败多少次 认为主机已挂掉则,踢出
fail_timeout #踢出后重新探测时间
backup #备用服务,“正牌”服务器挂掉之后起来
max_conns #允许最大连接数
slow_start #当节点恢复,不立即加入,而是等待 slow_start 后加入服务对列。