Nginxf负载均衡笔记(三)

Nginx实现负载均衡

Nginx 服务器是介于客户端和服务器之间的中介,通过上一篇博客讲解的反向代理的功能,客户端发送的请求先经过 Nginx ,然后通过 Nginx 将请求根据相应的规则分发到相应的服务器。

主要配置指令为上一讲的 pass_proxy 指令以及 upstream 指令。负载均衡主要通过专门的硬件设备或者软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定,但是成本较高。而通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性。均衡算法又主要分为两大类:

静态负载均衡算法:主要包括轮询算法、基于比率的加权轮询算法或者基于优先级的加权轮询算法

动态负载均衡算法:主要包括基于任务量的最少连接优化算法、基于性能的最快响应优先算法预测算法动态性能分配算法等。

静态负载均衡算法在一般网络环境下也能表现的比较好,动态负载均衡算法更加适用于复杂的网络环境。
  ①、普通轮询算法
  这是Nginx 默认的轮询算法。
 两台相同的Tomcat服务器,通过 localhost:8080 访问Tomcat1,通过 localhost:9090 访问Tomcat2,现在我们要输入 localhost 这个地址,可以在这两个Tomcat服务器之间进行交替访问。
 一、分别修改两个Tomcat 服务器的端口为8080和9090。然后再修改Tomcat的首页,使得访问这两个页面时能够区分。如下:

修改端口号文件为 server.xml 共 3 处 修改:
  在这里插入图片描述
在这里插入图片描述
  在这里插入图片描述
  为方便 识别 区分 请求 分发到不同 Tomcat ,我使用了 两个 不同版本的 Tomcat
  修改完成之后,分别启动这两个Tomcat服务器,然后分别输入相应的地址端口号:
  在这里插入图片描述
  在这里插入图片描述
二. 修改 nginx 的配置文件 nginx.conf
在这里插入图片描述
 三、启动 nginx。然后在浏览器输入localhost 地址,观看页面变化:
 在这里插入图片描述
 ②、基于比例加权轮询
 上述两台Tomcat服务器基本上是交替进行访问的。但是这里我们有个需求:

由于Tomcat1服务器的配置更高点,我们希望该服务器接受更多的请求,而 Tomcat2 服务器配置低,希望其处理相对较少的请求。

那么这时候就用到了加权轮询机制了。

nginx.conf 配置文件如下:
  在这里插入图片描述
  其实对比上面不加权的轮询方式,这里在 upstream 指令中多了一个 weight 指令。该指令用于配置前面请求处理的权重,默认值为 1。

也就是说:第一种不加权的普通轮询,其实其加权值 weight 都为 1。
  ③、基于IP路由负载
  我们知道一个请求在经过一个服务器处理时,服务器会保存相关的会话信息,比如session,但是该请求如果第一个服务器没处理完,通过nginx轮询到第二个服务器上,那么这个服务器是没有会话信息的。

最典型的一个例子:用户第一次进入一个系统是需要进行登录身份验证的,首先将请求跳转到Tomcat1服务器进行处理,登录信息是保存在Tomcat1 上的,这时候需要进行别的操作,那么可能会将请求轮询到第二个Tomcat2上,那么由于Tomcat2 没有保存会话信息,会以为该用户没有登录,然后继续登录一次,如果有多个服务器,每次第一次访问都要进行登录,这显然是很影响用户体验的。

这里产生的一个问题也就是集群环境下的 session 共享,如何解决这个问题?

通常由两种方法:

1、第一种方法是选择一个中间件,将登录信息保存在一个中间件上,这个中间件可以为 Redis 这样的数据库。那么第一次登录,我们将session 信息保存在 Redis 中,跳转到第二个服务器时,我们可以先去Redis上查询是否有登录信息,如果有,就能直接进行登录之后的操作了,而不用进行重复登录。

2、第二种方法是根据客户端的IP地址划分,每次都将同一个 IP 地址发送的请求都分发到同一个 Tomcat 服务器,那么也不会存在 session 共享的问题。

而 nginx 的基于 IP 路由负载的机制就是上诉第二种形式。大概配置如下:
  在这里插入图片描述
  注意:我们在 upstream 指令块中增加了 ip_hash 指令。该指令就是告诉 nginx 服务器,同一个 IP 地址客户端发送的请求都将分发到同一个 Tomcat 服务器进行处理。
④、基于服务器响应时间负载分配
根据服务器处理请求的时间来进行负载,处理请求越快,也就是响应时间越短的优先分配。
在这里插入图片描述
 通过增加了 fair 指令。
⑤、对不同域名实现负载均衡
通过配合location 指令块我们还可以实现对不同域名实现负载均衡。

upstream OrdinaryPolling {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    }

    upstream pptbackend {
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    }

    server {
        listen       80;
        server_name  www.123.com;

        location /word/ {
            proxy_pass http://OrdinaryPolling;
            index  index.html index.htm index.jsp;
        
        }
        location /ppt/ {
            proxy_pass http://pptbackend;
            index  index.html index.htm index.jsp;
        
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值