码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx的tomcat集群与负载均衡配置

时间:2018-01-28 12:49:46      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:文件   pch   ddr   访问量   localhost   不同   小型   服务   开发商   

  一.什么是Nginx?

  Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用Nginx的网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  二.为什么要用Nginx?

  提及Nginx,我们就需要了解下web应用服务器。在此,我们暂且以tomcat这款应用服务器为例来介绍。

  Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。由于Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

  Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

  一般来说,用单机tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量在150到200左右。按照并发访问量占总用户数量的5%到10%这样计算,单点tomcat网站的用户人数在1500到4000左右。对于一个为全国范围提供服务的网站显然是不够用的。

  在互联网飞速发展的今天,大用户量高并发已经成为互联网的主体.怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢?这是一些中小网站急需解决的问题。

  为了解决这个问题,我们引入了负载均衡方法。负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。

  目前,负载均衡服务器主要分为两种,一种是通过硬件实现的负载均衡服务器,简称硬负载,例如f5;另一种是通过软件来实现的负载均衡,简称软负载,例如apache和nginx。硬负载和软负载相比,前者作用的网络层次比较多,可以作用到socket接口的数据链路层,并且对发出的请求进行分组转发,但是价格成本也随之较贵;而软负载作用的层次在http协议层之上,可以对http请求进行分组转发,并且由于是开源的,所以几乎是0成本,当前,阿里巴巴,京东等电商网站使用的也是Nginx服务器。

  我们接下来以一副示意图演示Nginx对tomcat的负载均衡配置:

技术分享图片

  三.tomcat如何配置首个启动工程?

  在讲述Nginx负载均衡之前,我们先熟悉tomcat的配置。

  以win7系统为例,我们平时在电脑上开启tomcat应用后,通过浏览器访问,会访问到tomcat的系统默认首页。那么,如何修改tomcat的首个启动工程呢?

  以tomcat7为例,我们将一个名称为Demo1的java web项目导出为一个war文件,然后放在tomcat的webapps文件夹下,接着打开tomcat的conf文件夹下的server.xml文件,在<Host></Host>中加入

  <Context docBase="E:\nginx\tomcatA\webapps\Demo1" path="" reloadable="true" crossContext="true"/>

  然后重启tomcat,并在浏览器地址栏里输入http://localhost:8080,这时就会发现tomcat的默认首个启动工程变为Demo1。

  四.如何在同一个tomcat上配置多个虚拟主机?

  接下来,我们再看如何在一台服务器上设置多个域名,从而使得用户访问多个域名时,可以分别指向同一个tomcat应用服务器中配置的不同web工程。

  首先,我们按照C:\Windows\System32\drivers\etc路径,打开该路径下的hosts文件,在里面配置下域名映射信息,如下:  

    127.0.0.1 www.baidudu.com
    127.0.0.1 www.taobaobao.com

  接着,我们另建两个java web项目,分别是Demo1和Demo2,然后再打开tomcat中的server.xml文件,在里面配置两个服务器主机信息,如下所示:
  <Host name="www.baidudu.com" appBase="webapps" autoDeploy="true" unpackWARs="true">
    <Context docBase="E:\nginx\tomcatA\webapps\Demo2" path="" reloadable="true" crossContext="true"/>
  </Host>
  <Host name="www.taobaobao.com" appBase="webapps" autoDeploy="true" unpackWARs="true">
    <Context docBase="E:\nginx\tomcatA\webapps\Demo3" path="" reloadable="true" crossContext="true"/>
  </Host>
  配置完毕后,我们再重启tomcat,分别访问新配置的两个域名,发现它们会各自指向相应的web工程,从而实现了用一个tomcat配置多个虚拟主机。

  五.如何通过Nginx实现tomcat集群配置与负载均衡?  

  我们接下来看通过Nginx对多个tomcat进行集群配置。在这里,我暂且在一台电脑上用两个tomcat做下演示,同时将这两个tomcat分别命名为tomcatA和tomcatB。为了避免同一台电脑上开启多个tomcat引起端口冲突,我将tomcatA的http访问端口配置为8081,将tomcatB的http访问端口配置为8082,为了显示不同tomcat的访问区别,我暂且让tomcatA的默认首个启动工程为Demo1,让tomcatB的默认首个启动工程为Demo3。
  接着,我们双击ningx中的nginx.exe文件,从而启动nginx服务,同时我们可以在DOS窗口中关闭nginx服务。如图所示:

技术分享图片

  接下来,我们打开nginx中的conf文件夹下的nginx.conf文件,我们在里面加入要配置的tomcat集群,同时,考虑到不同的服务器性能差别,可以配置相应的权重,从而实现服务器的负载均衡。如下图所示:

  技术分享图片

  上图中,标注红框的部分是关键配置,然后,我们在浏览器的地址栏中输入localhost,会发现tomcatA和tomcatB的所承担的访问任务比重约为5:1,从而实现了nginx对tomcat的负载均衡配置。

  六.如何处理Nginx负载均衡中的session会话信息丢失问题?  

  我们在通过nginx完成了对tomcat的集群与负载均衡配置后,还面临着一个关键问题,那就是如何解决session会话信息的共享问题。为此,我们可以通过两个步骤来解决。
步骤一,修改各个tomcat中的server.xml配置文件,对于最简单的集群配置,只需要将下述语句前的#号注释去除即可:
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
  在Nginx集群配置中,位于同一集群中的tomcat是通过Membership 的address和port来区分的。tomcat集群的实例如果在Membership配置中有相同的address和port值,那么这些tomcat就会被分配到同一个集群里边。采用上述方法配置后,处于同一个集群的tomcat,它们的session是相互共享的。可以共享同一个session的集群被称为一个cluster。
我们在一个Nginx中可以配置多个cluster,不同的cluster和cluster之间的session是不能共享的。为了使得对session的共享配置更加灵活,同时避免session复制浪费,我们需要对cluster节点多做些配置,具体如下:
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
      <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Membership className="org.apache.catalina.tribes.membership.McastService"
          address="228.0.0.4"
          port="45564"
          frequency="500"
          dropTime="3000"/>
      </Channel>
    </Cluster>
  在上述配置中,我们增加了一个channel节点,里面包含了membership的address和port属性,不同的集群设置不同的address和port值,从而对不同的集群实现了有效隔离。

   完成上面的步骤一后,我们再进行步骤二。该步骤相对较简单,我们在web项目的web.xml文件中,添加节点<distributable/>就可以了。

  至此,通过Nginx进行tomcat集群配置,负载均衡,以及解决session的共享问题就阐述完了,希望对您有所帮助。

Nginx的tomcat集群与负载均衡配置

标签:文件   pch   ddr   访问量   localhost   不同   小型   服务   开发商   

原文地址:https://www.cnblogs.com/lizhangyong/p/8370638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!