Nginx负载均衡的五种常用的策略(使用SwitchHosts! 工具和Tomcat测试)————TY

本文详细介绍了Nginx作为高性能web服务器和反向代理服务器的特性,深入解析了五种负载均衡策略:轮询、权重、ip_hash、url_hash及fair策略的工作原理和应用场景。同时,提供了在Tomcat环境下配置Nginx的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Nginx

Nginx是一个很强大的高性能的web服务器、反向代理服务器。并且作为反向代理服务器实现了负载均衡。目前国内使用 Nginx 网站有:百度、京东、腾讯、淘宝(Tengine)、新浪等

2、负载均衡

负载均衡是指将请求均匀地分摊到多个主机上运行,负载均衡的关键在于均匀,均衡地分摊压力。

 

3、SwitchHosts!工具

SwitchHosts是一个管理、快速切换Hosts的小工具。用它来管理本机的IP和域名的映射。启动时以管理员身份启动,否则没有修改权限。

 

4、修改Tomcat  下 conf/server.xml (这里Tomcat默认的端口号是7070)

在server.xml中添加两个service节点,name值分别为TestServerOne,TestServerTwo。HTTP连接端口号分别是8081、8082,它们指向的部署目录分别是webapps1、webapps2。Tomcat的根目录下没有这两个目录,直接复制webapps目录就行了,此时三个部署目录处于同一个目录中。在这三个部署目录中分别创建一个名为test 的 web项目。

<Service name="Catalina">
    <Connector port="7070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               URIEncoding = "utf-8"
               />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>

<Service name="TestServerOne">
    
    <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
   
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <Host appBase="webapps1" autoDeploy="true" name="localhost" unpackWARs="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>

      </Host>
    </Engine>

  </Service>
  
  <Service name="TestServerTwo">
    
    <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443"/>
   
    <Connector port="8011" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <Host appBase="webapps2" autoDeploy="true" name="localhost" unpackWARs="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>

      </Host>
    </Engine>

  </Service>

 

5、负载均衡五种策略:

5.0、这五种负载均衡策略分为内置策略(轮询、权重、ip_hash、url_hash)和 扩展策略(fair策略),内置策略都可以混合使用

5.1、轮询策略(默认策略)

配置nginx.conf如下图,在浏览器上输入 vip.load.com/test  访问三个服务器的test 项目,多次刷新当前页面,就会发现它们负责处理请求的机率是一样的,这就是轮询策略,也就是轮着执行请求。

特点:请求平均分配给多个服务器。简单、平均,适合服务器软硬件一致的qing情况下

缺点:

1、在各种主机硬件配置、处理能力不一时,轮询不能物尽其用。就比如16核的服务器和1核的服务器同时工作,在这中策略下任务是平均分配的,这对于16核的服务器来说是大材小用的。此时轮询不能达到最高效

2、在需要Session的时候,轮询会导致反复登录。

5.2、权重策略(在轮询策略的基础上)

配置nginx.conf 如下图。每个server后面设置weight=n,n是一个整数,默认为1,n越大被分派请求的次数越多,通过配置weight来设置访问机率,三个服务器的权重分别是2、4、5,所以第三个服务器在轮询时被访问的机率也就也大。

特点:可以根据各种服务器负载状态,进行手动分配,达到了软硬件高效率利用

缺点:同样继承了轮询策略的缺点(在需要Session的时候,轮询会导致反复登录)

5.3、ip_hash策略(按IP地址哈希)

配置nginx.conf如下图。根据客户端IP地址经过哈希算法计算后的结果,决定请求固定分派给哪一台后端服务器。这样就不用考虑session共享的问题,因为一个用户的所有请求都会有一台服务器处理并响应的,也就是说同一个用户一直用同一台服务器。

特点:适用于有状态(session)的项目。

5.4、url_hash策略

配置nginx.conf如下图。根据客户端请求URL哈希计算后的结果,决定请求分派给哪一台后端服务器。

如:http://www.bai.com/auth/api/register
       http://www.bai.com/search/api/...
       http://www.bai.com/biz/api/....      同一个的功能使用同一个的服务器

特点:相同业务主要由专门的服务器处理,利于提高缓存命中率。

5.5、fair策略

配置nginx.conf如下图。Nginx自动根据页面大小、加载时间长短智能地进行负载均衡。

特点:自动选择响应时间短的服务器,高效。

注意:该策略需要安装第三方模块,从  https://github.com/gnosek/nginx-upstream-fair 下载C源代码 并编译安装

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值