Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享

原文链接:http://blog.csdn.net/sxdtzhaoxinguo/article/details/49182063

摘要:随着网站的访问量越来越多,所以就考虑给网站增加服务器了,现在比较流行的做法就是给网站做集群环境,下面我把我做的过程记录一下,方便日后查看,同时也希望可以帮助到有需要的朋友!

一:首先是环境:

1.jdk 1.6.0_45

2.tomcat 6.0.44

3.nginx 1.8.0


二:jdk,tomcat,nginx的安装:

1.jdk的安装请参考:点击打开链接

2.nginx的安装步骤

(1).首先下载nginx的windows版本,我这里下载的nginx 1.8.0版本,下载地址:点击打开链接

(2).下载完成后,直接解压到一个没有中文的路径下,我这里是解压到:D:\server\nginx-1.8.0

(3).通过dos命令进入nginx-1.8.0目录下启动nginx即可

(4)Windows下操作Nginx命令

1.启动
nginx.exe
start nginx
2.停止 
nginx -s stop
nginx -s quit

stop表示立即停止nginx,不保存相关信息

quit表示正常退出nginx,并保存相关信息

3.重启
nginx -s reload
重启(因为改变了配置,需要重启)

3.tomcat的安装(直接到tomcat的官网下载解压缩版的即可)


三:把下载下载的tomcat分别复制3个,一共是个,其中三个做qdksDemo的集群环境用,另外三个做qdkyDemo的集群环境用,具体截图如下:

Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享

复制完成后,要分别修改每个tomcat的端口和session共享的配置,具体的配置如下:

1.第一处要修改的端口号

[html] view plain copy
  1. <Server port="8005" shutdown="SHUTDOWN">  
2.第二处要修改的端口号

[html] view plain copy
  1. <Connector port="8081" protocol="HTTP/1.1"   
  2.                connectionTimeout="20000"   
  3.                redirectPort="8443" />  
3.第三处要修改的端口号

[html] view plain copy
  1. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
4.第四处要增加的session共享配置,这个可以查看tomcat的官方文档,里面有配置直接复制到server.xml中就可以,地址:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

[html] view plain copy
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.                  channelSendOptions="6">  
  3.   
  4.           <Manager className="org.apache.catalina.ha.session.BackupManager"  
  5.                    expireSessionsOnShutdown="false"  
  6.                    notifyListenersOnReplication="true"  
  7.                    mapSendOptions="6"/>  
  8.           <!--  
  9.           <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  10.                    expireSessionsOnShutdown="false"  
  11.                    notifyListenersOnReplication="true"/>  
  12.           -->  
  13.           <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  14.             <Membership className="org.apache.catalina.tribes.membership.McastService"  
  15.                         address="228.0.0.4"  
  16.                         port="45564"  
  17.                         frequency="500"  
  18.                         dropTime="3000"/>  
  19.             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  20.                       address="auto"  
  21.                       port="5000"  
  22.                       selectorTimeout="100"  
  23.                       maxThreads="6"/>  
  24.   
  25.             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  26.               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  27.             </Sender>  
  28.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  29.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  30.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>  
  31.           </Channel>  
  32.   
  33.           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  34.                  filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>  
  35.   
  36.           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  37.                     tempDir="/tmp/war-temp/"  
  38.                     deployDir="/tmp/war-deploy/"  
  39.                     watchDir="/tmp/war-listen/"  
  40.                     watchEnabled="false"/>  
  41.   
  42.           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  43.         </Cluster>  

这样一个tomcat的配置文件就修改完成了,其他5个tomcat的配置和这个流程一样,只是对于的端口不能一样


四:nginx的配置:

1.首先在nginx的目录下新建一个新的文件夹来存放不同项目之间的集群配置文件,如下图:

Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享

2.在manyvhost文件夹里面新建一个配置文件,分别对于两个项目的集群配置,如下图:

Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享

3.qdks.conf和qdky.conf的配置内容如下:

(1).qdks.conf

[html] view plain copy
  1. upstream  qdks  {    
  2.     server   localhost:8081 weight=1;    
  3.     server   localhost:8082 weight=1;  
  4.     server   localhost:8083 weight=1;  
  5. }  
  6. server {  
  7.     listen       8086;  
  8.     server_name 192.168.1.103;  
  9.   
  10.     error_page   500 502 503 504  /50x.html;  
  11.     location = /50x.html {  
  12.         root   html;  
  13.     }  
  14.   
  15.     root /data/projects/ycp/bill;  
  16.   
  17.     # - rewrite: if( path ~ "^/assets/(.*)" ) goto "/public/assets/$1"  
  18.     #    location ~ ^/static/assets/(.*)$  
  19.     #    {  
  20.     #alias /data/projects/payment/web/public/assets/$1;  
  21.     #      access_log off;  
  22.     #      #expires 3d;  
  23.     #    }  
  24.   
  25.     location / {  
  26.                 index  index.html index.htm  index.jsp;  
  27.             }  
  28.   
  29.     location ~ .* {  
  30.     # proxy_pass_header Server;  
  31.      proxy_set_header Host $http_host;  
  32.     # proxy_redirect off;  
  33.      proxy_set_header X-Real-IP $remote_addr;  
  34.      proxy_set_header X-Scheme $scheme;  
  35.      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  36.      add_header Pragma "no-cache";  
  37.      proxy_pass http://qdks;  
  38.     }  
  39.   
  40.     rewrite ^/admin/?$ /admin/login redirect;  
  41.   
  42.     # for rewrite  
  43.     rewrite ^/(channel|admin|mobile|api|web)/(.*)$ /public/index.php/$2 last;  
  44.   
  45.     #redirect to mobile wap  
  46.     #rewrite ^$ /m redirect;  
  47.     #rewrite ^/$ /mobile/user redirect;  
  48.   
  49. }  

(2).qdky.conf

[html] view plain copy
  1. upstream  qdky  {    
  2.    server localhost:7081 weight=1;    
  3.    server localhost:7082 weight=1;  
  4.    server localhost:7083 weight=1;  
  5. }  
  6. server {  
  7.     listen       7086;  
  8.     server_name  192.168.1.103;  
  9.     error_page   500 502 503 504  /50x.html;  
  10.     location = /50x.html {  
  11.         root   html;  
  12.     }  
  13.   
  14.     root /data/projects/ycp/bill;  
  15.   
  16.     # - rewrite: if( path ~ "^/assets/(.*)" ) goto "/public/assets/$1"  
  17.     #    location ~ ^/static/assets/(.*)$  
  18.     #    {  
  19.     #alias /data/projects/payment/web/public/assets/$1;  
  20.     #      access_log off;  
  21.     #      #expires 3d;  
  22.     #    }  
  23.   
  24.     location / {  
  25.                 index  index.html index.htm  index.jsp;  
  26.             }  
  27.   
  28.     location ~ .* {  
  29.     # proxy_pass_header Server;  
  30.      proxy_set_header Host $http_host;  
  31.     # proxy_redirect off;  
  32.      proxy_set_header X-Real-IP $remote_addr;  
  33.      proxy_set_header X-Scheme $scheme;  
  34.      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  35.      add_header Pragma "no-cache";  
  36.      proxy_pass http://qdky;  
  37.     }  
  38.   
  39.   
  40.     rewrite ^/admin/?$ /admin/login redirect;  
  41.       
  42.     # for rewrite  
  43.     rewrite ^/(channel|admin|mobile|api|web)/(.*)$ /public/index.php/$2 last;  
  44.   
  45.     #redirect to mobile wap  
  46.     #rewrite ^$ /m redirect;  
  47.     #rewrite ^/$ /mobile/user redirect;  
  48.   
  49.   
  50.   
  51. }  

这两个配置文件就是我当前环境下的配置文件,其中qdks的项目的端口号8086,下面对应三个tomcat的端口为:8081,8082,8083;qdky的项目的端口号7086,下面对应三个tomcat的端口号为:7081,7082,7083


4.最后在nginx的conf目录下的nginx.conf核心配置文件中引入上面的两个项目的集群配置,如下:

[html] view plain copy
  1. #user  nobody;  
  2. worker_processes  1;  
  3.   
  4. error_log  logs/error.log;  
  5. error_log  logs/error.log  notice;  
  6. error_log  logs/error.log  info;  
  7.   
  8. pid        logs/nginx.pid;  
  9.   
  10. events {  
  11.     worker_connections  5000;  
  12. }  
  13.   
  14. http {  
  15.     include       mime.types;  
  16.     default_type  application/octet-stream;  
  17.       
  18.     #隐藏nginx的版本号  
  19.     server_tokens off;  
  20.   
  21.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  22.     #                  '$status $body_bytes_sent "$http_referer" '  
  23.     #                  '"$http_user_agent" "$http_x_forwarded_for"';  
  24.   
  25.     #access_log  logs/access.log  main;  
  26.     #access日志存放路径和格式  
  27.     access_log  logs/access.log;  
  28.   
  29.    #提升文件传输性能  
  30.    sendfile        on;  
  31.    #tcp_nopush     on;  
  32.   
  33.    #keepalive_timeout  0;  
  34.    #keepalive_timeout  65;  
  35.      
  36.    #设置客户端能够请求的单个文件大小  
  37.    client_max_body_size 300m;  
  38.    keepalive_timeout  75;  
  39.   
  40.     #proxy参数  
  41.     #跟后端服务器连接的超时时间,发起握手等候响应超时时间  
  42.     proxy_connect_timeout 5;  
  43.     #连接成功后,等候后端服务器的响应时间  
  44.     proxy_read_timeout 600;  
  45.     #后端服务器数据回传时间  
  46.     proxy_send_timeout 600;  
  47.     #代理请求缓存区  
  48.     proxy_buffer_size 16k;  
  49.     #同上,告诉nginx保存单个用的几个buffer、最大用多空间  
  50.     proxy_buffers 4 64k;  
  51.     #如果系统很忙时可以申请更大的proxy_buffers,官方推荐*2  
  52.     proxy_busy_buffers_size 128k;  
  53.     proxy_temp_file_write_size 128k;  
  54.   
  55.     #gzip  on;  
  56.     #开启压缩功能  
  57.     gzip on;  
  58.     gzip_min_length 1k;  
  59.     gzip_buffers 4 16k;  
  60.     gzip_http_version 1.1;   
  61.     gzip_comp_level 2;  
  62.       
  63.     #压缩级别从低到高1-9  
  64.     gzip_types text/plain application/x-javascript text/css application/xml;  
  65.     gzip_vary on;  
  66.   
  67.     #qdksDemo和qdkyDemo项目的虚拟目录(用绝对路径表示)  
  68.     include  D:/server/nginx-1.8.0/manyvhost/qdks.conf;  
  69.     include  D:/server/nginx-1.8.0/manyvhost/qdky.conf;  
  70.   
  71.     # another virtual host using mix of IP-, name-, and port-based configuration  
  72.     #  
  73.     #server {  
  74.     #    listen       80;  
  75.     #    listen       somename:8080;  
  76.     #    server_name  somename  alias  another.alias;  
  77.   
  78.     #    location / {  
  79.     #        root   html;  
  80.     #        index  index.html index.htm;  
  81.     #    }  
  82.     #}  
  83.   
  84.   
  85.     # HTTPS server  
  86.     #  
  87.     #server {  
  88.     #    listen       443;  
  89.     #    server_name  localhost;  
  90.   
  91.     #    ssl                  on;  
  92.     #    ssl_certificate      cert.pem;  
  93.     #    ssl_certificate_key  cert.key;  
  94.   
  95.     #    ssl_session_timeout  5m;  
  96.   
  97.     #    ssl_protocols  SSLv2 SSLv3 TLSv1;  
  98.     #    ssl_ciphers  HIGH:!aNULL:!MD5;  
  99.     #    ssl_prefer_server_ciphers   on;  
  100.   
  101.     #    location / {  
  102.     #        root   html;  
  103.     #        index  index.html index.htm;  
  104.     #    }  
  105.     #}  
  106.   
  107. }  

五:分别部署对应的项目,来测试我们上面配置的集群环境是否正常

1.下载对应的项目源代码,下载后解压到你的本地workspace下面,我的路径是:D:\workspace_qdexam\qdksDemo和D:\workspace_qdexam\qdkyDemo

qdksDemo的下载地址:http://download.csdn.net/detail/sxdtzhaoxinguo/9187453

qdkyDemo的下载地址:http://download.csdn.net/detail/sxdtzhaoxinguo/9187455


2.分别部署到对应的tomcat下面,这里我采用的是直接映射路径的方法

(1).qdksDemo的部署方法是,在对应的三个tomcat的conf\Catalina\localhost目录下新建一个配置文件qdksDemo.xml,该配置文件的内容如下:

[html] view plain copy
  1. <Context    path="/qdksDemo"   docBase="D:\workspace_qdexam\qdksDemo\WebContent"     debug="0"    privileged="true">      </Context>  

(2).qdkyDemo的部署方法是,在对应的三个tomat的conf\Catalina\localhost目录下新建一个配置文件qdkyDemo.xml,该配置文件的内容如下:

[html] view plain copy
  1. <Context path="/qdkyDemo"   docBase="D:\workspace_qdexam\qdkyDemo\WebContent" debug="0" privileged="true"></Context>  


3.分别启动这6个tomcat,如下图:

Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享


4.启动nginx,如下图:

Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享


5.最后通过浏览器访问这两个项目,如下图:

Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享


Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享


分别点击刷新,你会发现上面的实际访问端口会变,但是下面的Session ID是不变的,这就说明基于nginx和tocmat的集群搭建成功了!


最后我把我的tomcat和nginx都打包上传,供大家参考!

tomcat的配置压缩包下载地址:http://download.csdn.net/detail/sxdtzhaoxinguo/9187521

nginx的配置压缩包下载地址:http://download.csdn.net/detail/sxdtzhaoxinguo/9187527