zoukankan      html  css  js  c++  java
  • Nginx+Tomcat+Session 高性能群集搭建

    随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,早先的apache服务器、apache有优点也 有不足,apache渐渐不能满足人们的要求,目前nginx被大量采用做高性能web服务器,无论是个人网站还是大型门户网站都在使用nginx作为 web搭建web服务器的首选。
    接下来我们亲自来搭建一个属于自己的高性能web服务器,并且带故障自动转移的群集、和负载均衡服务器。

    一、Nginx+Tomcat+Session 高性能群集服务搭建

    本文采用目前主流版本搭建,搭建环境及版本如下列表:

    系统版本:Centos 5.3 64位系统
    Nginx版本为:nginx-0.8.54.tar.gz
    Jdk版本为:1.6.0_18_64
    Tomcat版本为:Apache Tomcat/6.0.30

    其他相似版本也可以!安装服务所需的包如下下载路径:本网站集成部分下载:
    
    【JDK 下载】
    https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter
    【Tomcat下载地址】
    http://blog.mgcrazy.com/download/apache-tomcat-6.0.30.tar.gz
    【Nginx-0.8.54 下载】
    http://blog.mgcrazy.com/download/nginx-0.8.54.tar.gz
    http://blog.mgcrazy.com/download/pcre-8.01.tar.gz 

    二、首先安装Nginx

    安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等】
    把所需的包下载到/usr/src下【根据自己的习惯,路径可以改变】
     (1)首先安装pcre:

    cd /usr/src &&tar xzf pcre-8.01.tar.gz &&cd pcre-8.01 && ./configure --prefix=/usr/local/pcre &&make &&make install

    (2)、然后再安装nginx :【给nginx安装jvmroute模块】

    cd /usr/src &&svn checkout http://nginx-upstream-jvm-route.googlecode.com/svn/trunk/nginx-upstream-jvm-route-read-only && useradd www && tar xzf nginx-0.8.54.tar.gz &&cd nginx-0.8.54 && patch -p0 < ../nginx-upstream-jvm-route-read-only/jvm_route.patch && ./configure --prefix=/usr/local/nginx-0.8 --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/src/pcre-8.01 --add-module=../nginx-upstream-jvm-route-read-only  --user=www --group=www &&make &&make install
    【nginx注意* –with-pcre=/usr/src/pcre-8.01指向的是源码包解压的路径,而不是安装的路径,否则会报
    
    make[1]: *** [/usr/local/pcre/Makefile] Error 127 错误】
    
    Nginx 安装完毕!我们先不着急nginx配置文件的配置,先来修改tomcat配置文件:
    
    

    三、Tomcat安装配置:

    (1)、将所需的包下载至/usr/src 目录;首先安装jdk:

    chmod o+x jdk* && ./jdk* ;程序包会提示按回车键,我们根据提示安装即可,解压完毕,会在当前目录生成 jdk1.6.0_18 这个文件夹,
    mkdir -p /usr/java && mv jdk1.6.0_18 /usr/java/下
    
    vi /etc/profile 最后面加入以下语句:
    export JAVA_HOME=/usr/java/jdk1.6.0_18
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
    source /etc/profile //使环境变量马上生效
    java –version //查看java版本,显示版本是1.6.0_18,并且是64位的证明安装成功!
    【 Java HotSpot(TM) 64-Bit Server VM (build 16.0-b10, mixed mode) 】
    
    cd /usr/src && tar xzf apache-tomcat-6.0.30.tar.gz
    解压完成执行:
    mv apache-tomcat-6.0.30 /usr/local/tomcat_1 && cp /usr/local/tomcat_1 /usr/local/tomcat_2 -r
    【移动到/usr/local下并重命名为tomcat_1文件夹,并cp一个tomcat_2】
    部署两个Tomcat群集做负载均衡用!
    

    (2)、设置tomcat的java变量

    chmod o+x jdk* && ./jdk* ;程序包会提示按回车键,我们根据提示安装即可,解压完毕,会在当前目录生成 jdk1.6.0_18 这个文件夹,
    mkdir -p /usr/java && mv jdk1.6.0_18 /usr/java/下
    
    vi /etc/profile 最后面加入以下语句:
    export JAVA_HOME=/usr/java/jdk1.6.0_18
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
    source /etc/profile //使环境变量马上生效
    java –version //查看java版本,显示版本是1.6.0_18,并且是64位的证明安装成功!
    【 Java HotSpot(TM) 64-Bit Server VM (build 16.0-b10, mixed mode) 】
    
    cd /usr/src && tar xzf apache-tomcat-6.0.30.tar.gz
    解压完成执行:
    mv apache-tomcat-6.0.30 /usr/local/tomcat_1 && cp /usr/local/tomcat_1 /usr/local/tomcat_2 -r
    【移动到/usr/local下并重命名为tomcat_1文件夹,并cp一个tomcat_2】
    部署两个Tomcat群集做负载均衡用!
    

    (3)、设置Tomcat的 server.xml文件:

    【以下是我的tomcat配置文件具体内容,本想已附件的形式发的,本博客目前还不支持附件功能,重要修改的地方供大家参考,如果把所有配置都粘贴在这里,显示有问题,所有用了两个web链接!这样一来部分解释就产生了影响。不明白的欢迎留言】
    这个是完整的server.xml文件下载地址:
    http://blog.mgcrazy.com/download/server.xml.tgz
    tomcat_2的配置文件下载地址:
    http://blog.mgcrazy.com/download/server2.xml.tgz
    
    两个Tomcat配置的cluster里面的端口分别为4000、4001 ,必须设置成不同的端口;而且得分别设置两个jvmroute名称,一会在nginx中会用到!
    
    配置Tomcat session会话复制:
    分别在两个tomcat的conf下web.xml文件里面加入如下一行即可:
    
    配置完毕后,我们测试一下广播
    java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal1
    java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal2
    
    如果不报错则能正常广播
    tomcat-replication.jar 下载:http://cvs.apache.org/~fhanik/tomcat-replication.jar
    如果是两台机器的话,可以用tcpdump 抓包看看!
    
    Tomcat配置完毕,启动两个tomcat,先启动tomcat1,tomcat_1启动日志如下:
    信息: Initializing Coyote HTTP/1.1 on http-8080
    2011-3-18 19:56:21 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 1088 ms
    2011-3-18 19:56:21 org.apache.catalina.core.StandardService start
    信息: Starting service Catalina
    2011-3-18 19:56:21 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/6.0.18
    2011-3-18 19:56:21 org.apache.catalina.ha.tcp.SimpleTcpCluster start
    信息: Cluster is about to start
    2011-3-18 19:56:21 org.apache.catalina.tribes.transport.ReceiverBase bind
    信息: Receiver Server Socket bound to:/192.168.2.79:4000
    2011-3-18 19:56:21 org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
    信息: Setting cluster mcast soTimeout to 500
    2011-3-18 19:56:21 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
    信息: Sleeping for 1000 milliseconds to establish cluster membership, start level:4
    2011-3-18 19:56:22 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
    信息: Done sleeping, membership established, start level:4
    2011-3-18 19:56:22 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
    信息: Sleeping for 1000 milliseconds to establish cluster membership, start level:8
    2011-3-18 19:56:23 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
    信息: Done sleeping, membership established, start level:8
    2011-3-18 19:56:23 org.apache.catalina.ha.deploy.FarmWarDeployer start
    严重: FarmWarDeployer can only work as host cluster subelement!
    2011-3-18 19:56:23 org.apache.catalina.ha.session.DeltaManager start
    信息: Register manager to cluster element Engine with name Catalina
    2011-3-18 19:56:23 org.apache.catalina.ha.session.DeltaManager start
    信息: Starting clustering manager at
    2011-3-18 19:56:23 org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
    信息: Manager [localhost#]: skipping state transfer. No members active in cluster group.
    2011-3-18 19:56:23 org.apache.catalina.ha.session.JvmRouteBinderValve start
    信息: JvmRouteBinderValve started
    2011-3-18 19:56:23 org.apache.coyote.http11.Http11Protocol start
    信息: Starting Coyote HTTP/1.1 on http-8080
    2011-3-18 19:56:24 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:8411
    2011-3-18 19:56:24 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/42 config=null
    2011-3-18 19:56:24 org.apache.catalina.startup.Catalina start
    信息: Server startup in 2676 ms
    
    Tomcat_2的日志如下:
    
    000,{-64, -88, 2, 79},4000, alive=86901,id={78 42 25 -19 -102 3 64 10 -76 93 69 -43 45 76 95 -112 }, payload={}, command={}, domain={}, ]. This operation will timeout if no session state has been received within 60 seconds.
    2011-3-18 19:57:48 org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor report
    信息: ThroughputInterceptor Report[
    Tx Msg:1 messages
    Sent:0.00 MB (total)
    Sent:0.00 MB (application)
    Time:0.01 seconds
    Tx Speed:0.04 MB/sec (total)
    TxSpeed:0.04 MB/sec (application)
    Error Msg:0
    Rx Msg:1 messages
    Rx Speed:0.00 MB/sec (since 1st msg)
    Received:0.00 MB]
    
    2011-3-18 19:57:48 org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions
    信息: Manager [localhost#]; session state send at 11-3-18 下午7:57 received in 125 ms.
    2011-3-18 19:57:48 org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor report
    信息: ThroughputInterceptor Report[
    Tx Msg:2 messages
    Sent:0.00 MB (total)
    Sent:0.00 MB (application)
    Time:0.05 seconds
    Tx Speed:0.02 MB/sec (total)
    TxSpeed:0.02 MB/sec (application)
    Error Msg:0
    Rx Msg:2 messages
    Rx Speed:0.00 MB/sec (since 1st msg)
    Received:0.00 MB]
    
    2011-3-18 19:57:49 org.apache.catalina.ha.session.JvmRouteBinderValve start
    信息: JvmRouteBinderValve started
    2011-3-18 19:57:49 org.apache.coyote.http11.Http11Protocol start
    信息: Starting Coyote HTTP/1.1 on http-8081
    2011-3-18 19:57:49 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:8412
    2011-3-18 19:57:49 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/34 config=null
    2011-3-18 19:57:49 org.apache.catalina.startup.Catalina start
    信息: Server startup in 2962 ms
    如果有报错或者请查看原因!
    skipping state transfer. No members active in cluster group.”
    mcastBindAddress 没有添加或添加得不对
    
    【如上报错,如果启动其中一个报的错,而且已经修改了mcastBindAddress,此时还是有报错,我们可以不用管,在启动另一个 tomcat看看,第二个tomcat没有No members active in cluster group,则表示两个tomcat通信正常。】
    
    

    四、最后配置Nginx:

    【贴出nginx.conf配置文件的内容,下载地址如下:】
    http://blog.mgcrazy.com/download/nginx.conf.tgz
    配置文件需要注意的地方:
    http
    {
    upstream backend {
    server 192.168.2.79:8080 srun_id=tomcat1;
    #【tomcat1是我tomcat_1 server.xml里面配置的jvmroute=tomcat1】
    server 192.168.2.79:8081 srun_id=tomcat2;
    #【tomcat2是我tomcat_2 server.xml里面配置的jvmroute=tomcat2】
    jvm_route $cookie_JSESSIONID|sessionid reverse;
    #【配置jvmroute 、session会话】
    }
    
    配置完毕后,新建/usr/webapps/www_1/index.jsp测试页面
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    %>
    http://blog.mgcrazy.com
    <%out.print(request.getSession()) ;%>
    <%out.println(request.getHeader("Cookie")); %>
    
    tomcat_2的发布目录index.jsp内容为:
    
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    %>
    http://wgkgood.gicp.net
    <%out.print(request.getSession()) ;%>
    <%out.println(request.getHeader("Cookie")); %>
    启动nginx即可!
    
    最后测试!在同一个浏览器窗口下 ctrl+f5刷新,都是同一个tomcat内容,它不会跳转到另一tomcat
    
    http://192.168.2.79:81 结果如下:
    
    http://wgkgood.gicp.net
    
    org.apache.catalina.session.StandardSessionFacade@2d7aece8
    JSESSIONID=FEB19E24719ED666D1C9C50A7A09A2BA.tomcat2
    
    另一个浏览器窗口为:
    
    http://blog.mgcrazy.com
    
    org.apache.catalina.session.StandardSessionFacade@259e215b
    rtime=0; ltime=1298014951125; cnzz_eid=85744900-1298010049-; Hm_lvt_0e74098a87be059a433e5a74f1b5fecf=1298014951312; Hm_lvt_b7c035fd79b2c378053e06c86493de76=1300439158373; JSESSIONID=B2574ABB491F50F37162479BD3FE761C.tomcat1
    
    无论你怎么刷新同一个窗口下都不会变!而且当你down掉一个tomcat后,会自动转移会话到另一个tomcat上!用户是感觉不到服务挂掉的!当两个服务正常的时候,可以负载均衡、当一个服务down掉时,可以自动剔除它,并复制它的会话!

    点击下载

  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9375440.html
Copyright © 2011-2022 走看看