1.准备2台tomcat服务器,端口分别为8087,8088。在其中webapps下新建fzjh目录,里面存放index.html(内容分别为"fzjh 8087!"和“fzjh 8088!”)用于测试。
2.配置nginx负载均衡
# 配置要负载的真实服务器列表
upstream myFzjh {
server 192.168.1.117:8087;
server 192.168.1.117:8088;
}
server {
listen 80;
server_name 192.168.1.117;
location / {
# 统一代理入口
proxy_pass http://myFzjh;
root html;
index index.html index.htm;
}
...其余省略...
上述示例其实就是默认配置,8087和8088两台服务器按顺序依次循环执行,多台类似。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
weight 代表权重,默认为 1(1的话和轮询的效果一致),权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
注意:配置1,2和配置2,4的效果是一样的。访问几率的计算方式是:某一台的访问几率 = 该台权重值/总权重值。
配置方式如下:
# 配置要负载的真实服务器列表
upstream myFzjh {
server 192.168.1.117:8087 weight=1;
server 192.168.1.117:8088 weight=3;
}
server {
listen 80;
server_name 192.168.1.117;
location / {
# 统一代理入口
proxy_pass http://myFzjh;
root html;
index index.html index.htm;
}
...其余省略...
执行效果就是执行8087一次,执行8088三次,再执行8087一次,执行8088三次,以此类推。效果如下:
hash算法地址:https://www.linuxidc.com/Linux/2014-02/96869.htm
每个请求按访问ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,
优点:可以解决session 的一致性问题。例如:
Ip_hash机制缺陷:
(1).nginx不是最前端的服务器
ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash. Eg: 使用的是squid为最前端.那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流肯定是错乱的
(2).nginx的后端还有其它负载均衡
假如nginx后端还有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上,这么算起来,nginx后端只能直接指向应用服务器,或者再搭一人squid,然后指向应用服务器. 最好 的办法是用location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去.
# 配置要负载的真实服务器列表
upstream myFzjh {
# 一般放到列表最面
ip_hash;
server 192.168.1.117:8087 weight=1;
server 192.168.1.117:8088 weight=2;
}
server {
listen 80;
server_name 192.168.1.117;
location / {
# 统一代理入口
proxy_pass http://myFzjh;
root html;
index index.html index.htm;
}
...其余省略...
fair是一个第三方的策略,按后端服务器的响应时间来分配请求,响应时间短的优先分配。
如:
# 配置要负载的真实服务器列表
upstream myFzjh {
server 192.168.1.117:8087 weight=1;
server 192.168.1.117:8088 weight=2;
# 一般放到列表最后面
fair;
}
server {
listen 80;
server_name 192.168.1.117;
location / {
# 统一代理入口
proxy_pass http://myFzjh;
root html;
index index.html index.htm;
}
...其余省略...
是一个第三方的策略,具体可以参考官网的说明:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/