nginx-1.4.2+tomcat6+memcache做服务器集群以及session共享

简介

使用nginx做分发器,tomcat6做服务器,使用memcached实现session共享

1.搭建环境:windows

2.准备:

<1>下载nginx-1.4.2,解压到E:\server\nginx文件夹下

<2>下载tomcat6 解压到E:\server\tomcat文件夹下,tomcat准备两个tomcat  分别命名tomcat6-1,tomcat6-2

<3>下载memcache-win32.zip  解压到E:\server\memcache文件夹下

<4>下载jdk6 安装好之后配置环境变量 保证tomcat可以运行正常

<5>下载一下jar包房到tomcat的lib目录下

@1:couchbase-client-1.1.9.jar

@2:javolution-5.4.3.1.jar

@3:memcached-2.6.jar

@4:memcached-session-manager-1.6.5.jar

@5:memcached-session-manager-tc6-1.6.5.jar

@6:msm-javolution-serializer-1.6.5.jar

@7:msm-kryo-serializer-1.6.5.jar

@8:msm-xstream-serializer-1.6.5.jar

@9:spymemcached-2.8.12.jar

3.配置

<1>nginx配置

@1:打开文件E:\server\nginx\conf\nginx.conf

@2:修改为如下即可

#user  nobody;
worker_processes  4;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  2048;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    upstream 127.0.0.1{
        server   127.0.0.1:8080;
        server   127.0.0.1:8081; 
    }    
    server {
        listen       8888;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
    proxy_pass        http://127.0.0.1;
    proxy_set_header  X-Real-IP  $remote_addr;
    client_max_body_size  100m;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
}

注意:    worker_processes  4;此处数值一般为cpu个数

worker_connections  2048;此处的数值为连接数

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

此处的127.0.0.1可以改为域名,里边的参数 server配置需要集群的服务器的IP和端口,此处都为本机所以IP直接配成127.0.0.1,端口不能相同,当然如果这

这两个服务器不在同一台电脑上那么端口是可以相同的,如果是在同一台电脑上那么端口必然不能相同。

listen       8888;此处为分发器nginx的端口,默认是80端口,如果被占用可以修改为别的端口 此处修改为8888

proxy_pass        http://127.0.0.1;此处的127.0.0.1与upstream后边的127.0.0.1相同,当然可以同时修改为域名,页面访问的时候可以使用http://域名:端口/项目

来访问

<2>tomcate配置

@1:tomcat6-1配置如下:修改conf\server.xml

<?xml version='1.0' encoding='utf-8'?>  
  
<Server port="8005" shutdown="SHUTDOWN">  
  
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  
  <Listener className="org.apache.catalina.core.JasperListener" />  
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />  
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  
  
  
  <GlobalNamingResources>  
  
    <Resource name="UserDatabase" auth="Container"  
              type="org.apache.catalina.UserDatabase"  
              description="User database that can be updated and saved"  
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  
              pathname="conf/tomcat-users.xml" />  
  </GlobalNamingResources>  
  
  
  <Service name="Catalina">  
  
    <Connector port="8080" protocol="HTTP/1.1"   
               connectionTimeout="20000"   
               redirectPort="8443" />  
  
    <!-- Define an AJP 1.3 Connector on port 8009 -->  
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
  
  
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat6-1">  
  
  
  
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"   channelSendOptions="8">    
  
          <Manager className="org.apache.catalina.ha.session.DeltaManager"    
  
                   expireSessionsOnShutdown="false"    
  
                   notifyListenersOnReplication="true"/>    
  
          <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"/>    
  
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"    
  
                      address="auto"
     port="4000"  
  
                      autoBind="100"    
  
                      selectorTimeout="5000"    
  
                      maxThreads="6"/>    
  
            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">    
  
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>    
  
            </Sender>    
  
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>    
  
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>    
  
          </Channel>    
  
          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"    
  
                 filter=""/>    
  
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>    
  
          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"    
  
                    tempDir="/tmp/war-temp/"    
  
                    deployDir="/tmp/war-deploy/"    
  
                    watchDir="/tmp/war-listen/"    
  
                    watchEnabled="false"/>    
  
          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>    
  
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>    
  
        </Cluster>  
  
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
             resourceName="UserDatabase"/>  
  
      <Host name="localhost"  appBase="webapps"  
            unpackWARs="true" autoDeploy="true"  
            xmlValidation="false" xmlNamespaceAware="false">  
  <Context docBase="" path="" reloadable="true" >


<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   
memcachedNodes="n1:localhost:11211"
   
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
   
sessionBackupAsync="false"
    
sessionBackupTimeout="100"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"
/>


</Context>
      </Host>  
    </Engine>  
  </Service>  
</Server>

@2:tomcat6-2配置如下:修改conf\server.xml

<?xml version='1.0' encoding='utf-8'?>  
  
<Server port="8006" shutdown="SHUTDOWN">  
  
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  
  <Listener className="org.apache.catalina.core.JasperListener" />  
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />  
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  
  
  <GlobalNamingResources>  
  
    <Resource name="UserDatabase" auth="Container"  
              type="org.apache.catalina.UserDatabase"  
              description="User database that can be updated and saved"  
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  
              pathname="conf/tomcat-users.xml" />  
  </GlobalNamingResources>  
  
  
  <Service name="Catalina">  
  
   <Connector port="8081" protocol="HTTP/1.1"   
               connectionTimeout="20000"   
               redirectPort="8443" />  
      
    <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />  
  
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat6-2">  
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"    
  
                 channelSendOptions="8">    
  
          <Manager className="org.apache.catalina.ha.session.DeltaManager"    
  
                   expireSessionsOnShutdown="false"    
  
                   notifyListenersOnReplication="true"/>    
  
          <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"/>    
  
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"    
  
                      address="auto"   
  
                      port="4001"   


                      autoBind="100"    
  
                      selectorTimeout="5000"    
  
                      maxThreads="6"/>    
  
            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">    
  
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>    
  
            </Sender>    
  
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>    
  
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>    
  
          </Channel>    
  
          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"    
  
                 filter=""/>    
  
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>    
  
          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"    
  
                    tempDir="/tmp/war-temp/"    
  
                    deployDir="/tmp/war-deploy/"    
  
                    watchDir="/tmp/war-listen/"    
  
                    watchEnabled="false"/>    
  
          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>    
  
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>    
  
        </Cluster>  
  
  
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
             resourceName="UserDatabase"/>  
  
      <!-- Define the default virtual host  
           Note: XML Schema validation will not work with Xerces 2.2.  
       -->  
      <Host name="localhost"  appBase="webapps"  
            unpackWARs="true" autoDeploy="true"  
            xmlValidation="false" xmlNamespaceAware="false">  
    <Context docBase="" path="" reloadable="true" >


<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   
memcachedNodes="n1:localhost:11211"
   
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
   
sessionBackupAsync="false"
    
sessionBackupTimeout="100"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"
/>


</Context>
      </Host>  
    </Engine>  
  </Service>  
</Server>

提示:其实tomcat6-1和tomcat6-2的配置基本相同,唯一的区别就是两个server.xml文件中的各个端口不能相同,因为都在同一台机器上当然端口不能相同,值得注意的是

    cluster标签中的端口也不能相同,配置的时候一定要留意,还有memcachedNodes="n1:localhost:11211"这句话,这个的意思就是memcached节点信息的配置,从

    格式上来看n1代表memcached节点1,localhost实际上配置的是memcached节点的IP,11211配置的是memcached节点的端口,多个节点要以空格隔开,其他

    格式相同,注意在同一台机器上端口也是不能相同的 配置的时候要留心

3.启动和测试

<1>启动memcached服务,可以到E:\server\memcache文件夹下双击memcached.exe即可

<2>启动nginx,可以到E:\server\nginx文件夹下双击nginx.exe即可

<3>在E:\server\tomcat文件夹下的两个tomcat的webapps下新建文件夹test,在test文件夹下新建index.jsp,在index.jsp的body中加入以下代码

        <%    
  
  //HttpSession session = request.getSession(true);    
  
  System.out.println(session.getId());    
  
  out.println("<br> SESSION ID:" + session.getId()+"<br>");      
  
  // 如果有新的请求,则添加session属性    
  
  String name = request.getParameter("name");    
  
  if (name != null && name.length() > 0) {  
     String value = request.getParameter("value");    
     session.setAttribute(name, value);    
  }      
  
    out.print("<b>Session List:</b>");      
    Enumeration<String> names = session.getAttributeNames();    
    while (names.hasMoreElements()) {    
       String sname = names.nextElement();     
        String value = session.getAttribute(sname).toString();  
        out.println( sname + " = " + value+"<br>");  
        System.out.println( sname + " = " + value);  
   }  
%>

保存之后,启动tomcat6-1和tomcat6-2(双击bin文件夹下的startup.bat),然后再浏览器中输入http://127.0.0.1:test/index不断的刷新页面,页面上的sessionID是一样的,但是使用的tomcat名字会变化(即tomcat6-1和tomcat6-2交替调用),此时简单的框架已经搭建成功,session也成功共享


首次搭建,比较简单,不懂得还很多,若有瑕疵支出请多多包涵,小弟愿悉听高人指正

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值