https+nginx1.8+tomcat7+Memcached1.4.4集群session共享以及负载均衡环境搭建(window版本)

      上学的时候一直有个梦想,就是拥有自己的网站,这个梦想在2015年10份经过自己的学习和在同事的帮助下已经实现了,同时部署阿里云ECS服务器完成备案,现在已经正式上线,后来一直听同事说nginx负载均衡能实现高并发。 于是利用下班时间搭建了Nginx和tomcat集群服务器,利用Memcached实现session共享,同时支持HTTP请求和HTTPS请求,整理了一下,分享给大家,如果存在问题,希望大家多多指点。( nginx指向两个tomcat )

        一.搭建服务器环境前期准备:
               1.1 安装jdk(如果没有安装包自己可以在网上下载)。
               1.2需要下载 Tomcat7(win64位)  《点击下载》
               1.3 需要下载 Nginx1.8.0(win64位)   《点击下载》 
               1.4 需要下载  Memcached1.4 (win64位) 《点击下载》

        二.jdk配置环境变量 :

                2.1 把jdk安装在 C:\Java\jdk1.7.0

                        2.1.1.新建环境变量 JAVA_HOME 值  C:\Java\jdk1.7.0
                        2.1.2.新建环境变量 classpath 值  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar  
(注意不要丢失"  .  " 符号) 
                        2.1.3.在path环境变量后面加  ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin

       三.tomcat7配置安装 :

                         3.1 对于tomcat大家都很熟悉,只需要修改server.xml配置文件即可,这里我们以apache-tomcat-7.0.40为例,分别在server目录,解压缩并命名为:apache-tomcat-7.0.40_1、apache-tomcat-7.0.40_2。
                          第一处端口修改: 
                  <!--  修改port端口:18002  俩个tomcat不能重复,端口随意,别太小- -->
                  <Server port="18002" shutdown="SHUTDOWN">
                             第二处端口修改: 
                  <!-- port="8082" tomcat监听端口,随意设置,别太小 -->  
                  <Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" /> 
                           第三处端口修改:
                  <Connector port="28002" protocol="AJP/1.3" redirectPort="8443" />  
                             第四处 Engine元素增加jvmRoute属性:
                  <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">  
                     两个tomcat的端口别重复,保证能启动起来,tomcat端口分别位 8082(jvm2) 和8081(jvm1)
                           访问8082端口  如下图

                             访问8081端口如下图


                 3.2使用memcached-session-manager这个开源项目(http://download.csdn.net/detail/lhl18330580828/9502743,下面简称msm) 配置Tomcat和memcached实现session共享。
                     首先将下面的包下载到Tomcat的lib目录下,这些包都是msm所依赖的包。
                             javolution-5.5.1.jar
                             kryo-1.03.jar
                             kryo-serializers-0.10.jar
                             memcached-2.5.jar
                             memcached-session-manager-1.5.1.jar
                             memcached-session-manager-tc7-1.5.1.jar
                             minlog-1.2.jar
                             msm-javolution-serializer-1.5.1.jar
                             msm-kryo-serializer-1.6.4.jar
                             reflectasm-0.9.jar
                             spymemcached-2.7.3.jar 
                     把上述jar包放到tomcat/lib 目录下,修改每个tomcat的配置文件tomcat\conf\context.xml
                 <!-- 在<context>...</context>标签之间加入如下代码: -->
                     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
                        memcachedNodes="n1:127.0.0.1:11211"  
                        sticky="false"  
                        sessionBackupAsync="false"  
                        lockingMode="uriPattern:/path1|/path2"  
                        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
                        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
	
                    说明:  这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如: 
                                                n1:localhost:11211 n2:localhost:11212     
                                                /localhost改为安装memcached的服务器的IP  

         四.Memcached 配置安装 :

                 4.1 cmd控制台切换到memcached.exe所在目录,我的是在C:\memcached 
                  4.2 输入命令memcached.exe -d install,enter后,即可完成memcached 安装 如下图:
                          
                 4.3  我习惯在服务里启动并把memcached 设为手动
   
                 4.4  右键开启 memcached 后重新启动两个 tomcat,至此tomcat+memcached 搭建完毕。

        五.Nginx1.8.0 配置 :

                 5.1通过我的域名指定到nginx 端口上,分发到上面配置好的两个tomcat 端口  8081和8082上实现负载均衡  
                 5.2  实现https 需要开启 nginx 的443端口,我实现的是域名证书单向认证,如果是为了学习可以在沃通可以申请免费 域名证书 ,如果你想申请的话,我可以帮你(前提是自己得购买域名和服务器)。 
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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 localhost {  
      #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。  
      #同一机器在多网情况下,路由切换,ip可能不同  
      # ip_hash;   
      server localhost:8081  ;  
      server localhost:8082  ;
   
     }  
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}
	    rewrite ^(.*$) https://$host$1 permanent; 
		location /ngx_status 
        {
        stub_status on;
        access_log off;
        #allow 127.0.0.1;
        #deny all;
        }
        #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;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
      server {
          listen 443;
	 	 server_name localhost;
	 		 ssl on;
	 		 ssl_certificate sslkey/1_www.tslhl.com_bundle.crt;  
	  		 ssl_certificate_key sslkey/2_www.tslhl.com.key;   
	 		 ssl_session_timeout 5m;
	 		 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	  		 ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:-LOW:!aNULL:!eNULL;
	 		 ssl_prefer_server_ciphers on;
	 
	         location / {
	                proxy_connect_timeout   1;  
                    proxy_send_timeout      30;  
                    proxy_read_timeout      30;  
       	                proxy_pass http://localhost;  
					 
			 }
      } 

}
                           5.2  该项目下新建一个index.jsp文件,编辑该文件内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <base href="<%=basePath%>">    
    <title>My JSP 'session.jsp' starting page</title>  
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">      
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
    <!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
  </head>  
  <body>  
    <%  
     System.out.println(session.getId());  
     out.println("<br> This is (TOMCAT1|TOMCAT2), SESSION ID:" + session.getId()+"<br>");  
    %>  
  </body>  
</html> 
                          5.3 双击nginx.exe 开启nginx 服务,这时我可以访问我的 域名 
             5.4 重复刷新发现session的值不变如下所示,session共享成功

             5.5 我把关闭nginx做成了批处理closeNginx.bat 这样更方便内容为 ( taskkill /f /im nginx.exe)。
                        
                          
                           如果你学到了知识请为我点赞! 
        最后谢谢大家欣赏我的 博客,如果哪里 你发现了 问题,请多多指出,我也是菜鸟,我们共同进步!!!










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhl18330580828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值