1.轮询(轮着询问)
添加一个关键字,与server同级
upstream orderuserserver{
#根据后端服务器的访问地址编辑元素内容
server 127.0.0.1:8090;
server 127.0.0.1:8091;
server 127.0.0.1:8092;
}
相当于一个对象是List<Server>
Server对象作为元素记录的时候服务器的ip:port
orderuserserver的变量指向了一个内存中包含了3个服务器信息的list对象
server中修改proxy_pass
负载均衡的流转逻辑
- 浏览器发起请求http://www.os.com/index.html
- hosts文件找映射127.0.0.1
http://127.0.0.1:80/index.html
- server监听80 www.os.com 都满足
- location / /index.html 匹配/ index.html
- proxy_pass http://orderuserserver/index.html
- 拦截请求发送
判断orderuserserver的对象是否存在
- upstream orderuserserver
- 8090
- 8091
- 8092
- 拦截规则,获取orderuserserver中真正的ip:port
2.权重(权衡比重)
权重的意义:根据服务器的性能按照比例的分配所有的并发请求到不同服务器,新能低的处理并发少,比例小,反之亦然
轮询配置的upstream的基础上多添加2个关键字到nginx.conf文件中
weight=权重整数值
down;
upstream orderuserserver{
#根据后端服务器的访问地址编辑元素内容
server 127.0.0.1:8090 weight=1;
server 127.0.0.1:8091 weight=20;
server 127.0.0.1:8092 down;
}
上述配置造成8091所在的服务器承担了绝大部分的负载均衡的请求,同时nginx不会在将任何请求发送到8092中
在集群中容易出现故障,对于长时间不能恢复的集群节点,可以采用down的处理方式
3.ip黏着
session的集群共享问题(用户登录状态访问)
- ip黏着解决的问题
session无法在集群中共享
session共享的问题描述:
如果继续在集群中使用session存储域属性(以登录逻辑为例)
会造成登录时访问一个负载均衡的后端服务器,跳转首页显示欢迎谁回来从sessoin访问负载均衡的另外的节点导致服务器之间的session不能共享;easymall使用redis处理共享数据的问题
- nginx提供的ip_hash黏着解决session共享问题
原理:客户端ip地址不变(10.9.115.116),判断是否是同一个客户端,将会对ip做hash处理(hash取余).ip地址不变,绑定的后端负载均衡的服务器就不变.
使用ip_hash黏着,无法体验到集群的高可用效果
upstream orderuserserver{
#根据后端服务器的访问地址编辑元素内容
ip_hash;
server 127.0.0.1:8090 ;
server 127.0.0.1:8091 ;
server 127.0.0.1:8092 ;
}