Nginx+Tomcat实现负载均衡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx+Tomcat实现负载均衡相关的知识,希望对你有一定的参考价值。

首先对知识点了解

  • 集群(Cluster)
    简单来说就是用N台服务器构成一个松耦合的多处理器系统(对外是一个服务器),内部通过网络实现通信。让N台服务器之间相互协作,共同承载一个网站的请求压力。用知乎上一个作者的话来说就是“同一个业务,部署在多个服务器上”,这就是集群。 集群中比较重要的是任务调度。

  • 负载均衡(Load Balance)
    简单来说就是根据某种负载策略把请求分发到集群中的每一台服务器上,让整个服务器群来处理网站的请求,从而共同完成工作任务。

nginx是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器

  1. 高并发连接:
    官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。

2.内存消耗少:
在3万并发连接下,开启的10个nginx 进程才消耗150M内(15M*10=150M)。

3.稳定性高:
用于反向代理,宕机的概率微乎其微
4.配置文件非常简单:
风格跟程序一样通俗易懂。
5.内置的健康检查功能:
如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
等等优点

由于nginx的性能很好,因此国内很多大公司都在使用,最主要的原因也是nginx是开源免费的。除了上面描述的一系列功能,项目中主要用nginx来实现以下三个功能:

  • 动静分离
  • 负载均衡
  • 反向代理

动静分离:
动静分离的原理非常简单,我们可以将一些静态资源html文件、图片等交给nginx来处理,将后台请求转发给后台服务器处理,由于nginx会有缓存作用,因此这样不仅仅加快了访问速度,而且也减小了tomcat服务器的负载。

反向代理:
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连的客户端,此时代理服务器对外就表现为一个服务器。

负载均衡主要特点:

  • 减轻后台服务器负载
  • 自动去掉后台宕机服务器
  • 缓存后台请求内容,加速请求速度

nginx负载均衡主要策略:

  1. 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  2. weight
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
  3. ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
  4. fair
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
  5. url_hash
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

默认情况下是轮询的策略,但是这种方式的使用有一个问题,分布式session不一致的问题,不过我们可以使用ip_hash来将同一ip地址上的请求分配到一台服务器中处理,这样就不会出现session不一致的问题。这个问题不是我们这篇文章讨论的重点,感兴趣的读者可以自行查询资料。

配置安装

需要tomcat和nginx (前两章博客有tomcat,nginx详细的安装及简介)

安装成功后
tomcat配置文件说明
cd /usr/local/tomcat7/conf/
catalina.policy:权限控制配置文件
catalina.properties:tomcat属性配置文件
server.xml :主配置文件

主配置server.xml文件说明:

<Server port="8005" shutdown="SHUTDOWN">
##表示tomcat关闭端口,默认只对本机地址开放,可以再本机通过telnet 127.0.0.1 8005 对tomcat进行关闭操作
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
##tomcat 启动的默认端口号为8080.

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
##tomcat启动AJP1.3连接器时默认的端口号。

我们可以创建一个新的目录,来设置默认网页。

mkdir -p /web/webapp
cd /web/webapp

写一个jsp的默认网页
vim index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<html>
        <head>
        <title> JSP test1 page</title>
        </head> 
        <body>
        <% out .println("welcom to test sits,http://www.text1.com");%>
        </body>
</html>

#编辑主配置文件
vim server.xml #添加以下部分内容

     <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
                        以上内容是存在的,添加下面这一条
             <Context docBase="/web/webapp" path="" reloadable="false" >
             </Context>

重新启动tomcat

/usr/local/tomcat7/bin/shutdown.sh  #关闭
/usr/local/tomcat7/bin/startup.sh   #启动tomcat

访问tomcat页面
技术图片

配置好tomcat,在配置nginx
vim /usr/local/nginx/conf/nginx.conf
在nginx.conf配置

在server中添加红色部分内容(在localtion下添加)
     location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat-server; (tomcat-server是一个自定义名称)
        }

在http段中添加一下内容(最后一行的大括号上边添加)
  upstream tomcat-server {
                server 192.168.3.101:8080 weight=1;
                server 192.168.3.102:8080 weight=1;
        }

重启一下nginx
再次访问(访问的并不是tomcat,而是nginx,访问页面会轮询出现tomcat的页面。)
至此,我们就完成了对nginx负载均衡的测试,如有什么问题欢迎留言讨论。

以上是关于Nginx+Tomcat实现负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 实现负载均衡

图文详解 配置Nginx+Tomcat负载均衡动静分离集群

负载均衡 | Nginx+Tomcat 动静分离实现负载均衡

Nginx 和 tomcat 实现负载均衡

利用nginx实现负载均衡

利用nginx实现负载均衡