linux+nginx+tomcat负载均衡,实现session同步

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

提示:关于nginx 和tomcat 己经在前面的博文己在介绍过了

第一部分:nginx反向代理tomcat

一、软件及环境

软件

系统 角色 用途 安装的软件 ip地址
Centos6.5x86_64 nginx 反向代理用户请求 nginx 172.16.249.210
Centos6.5x86_64 tomcat1 处理jsp请求 
jdk+tomcat 172.16.249.101
Centos6.5x86_64 tomcat2 172.16.249.100
Centos6.5x86_64 mog(ilefs/store) 分布式存储静态数据 mogilefs 172.16.249.129
Centos6.5x86_64 mog(ilefs/store)+mariadb 172.16.249.128

拓扑图

wKiom1NyagmhyrJnAAGRtGB0Qi4937.jpg

二、实现过程

1、nginx安装

配置文件如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#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 mogfs_cluster {
     server 172.16.249.128:7001;
     server 172.16.249.129:7001;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
}
upstream jsp_server {
    server 172.16.249.100:8080;
    server 172.16.249.101:8080;
}
     server {
         listen       80;
        # server_name  localhost;
        # location / {
         #    root   html;
         #    index  index.html index.htm;
        # }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
     location ~* ^( /images/ .*)$ {
              mogilefs_tracker mogfs_cluster;
              mogilefs_domain images;
          mogilefs_noverify on;
          mogilefs_pass $1 {
         proxy_pass $mogilefs_path;
         proxy_hide_header Content-Type;
         proxy_buffering off;
}
}
     location ~* ^( /text/ .*)$ {
              mogilefs_tracker mogfs_cluster;
              mogilefs_domain text;
              mogilefs_noverify on;
              mogilefs_pass $1 {
                 proxy_pass $mogilefs_path;
                 proxy_hide_header Content-Type;
                 proxy_buffering off;
}
}
   location ~* (\.jsp| do )$ {
         proxy_pass http: //jsp_server ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
}                                                                                                                     
         error_page   500 502 503 504   /50x .html;
         location =  /50x .html {
             root   html;
         }
     }
}

2、安装JDK+Tomcat

tomcat1配置文件如下(server.xml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?xml version= '1.0'  encoding= 'utf-8' ?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or  more
   contributor license agreements.  See the NOTICE  file  distributed with
   this work  for  additional information regarding copyright ownership.
   The ASF licenses this  file  to You under the Apache License, Version 2.0
   (the  "License" ); you may not use this  file  except  in  compliance with
   the License.  You may obtain a copy of the License at
       http: //www .apache.org /licenses/LICENSE-2 .0
   Unless required by applicable law or agreed to  in  writing, software
   distributed under the License is distributed on an  "AS IS"  BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License  for  the specific language governing permissions and
   limitations under the License.
-->
<!-- Note:  A  "Server"  is not itself a  "Container" , so you may not
      define subcomponents such as  "Valves"  at this level.
      Documentation at  /docs/config/server .html
  -->
<Server port= "8005"  shutdown = "SHUTDOWN" >
   <!-- Security listener. Documentation at  /docs/config/listeners .html
   <Listener className= "org.apache.catalina.security.SecurityListener"  />
   -->
   <!--APR library loader. Documentation at  /docs/apr .html -->
   <Listener className= "org.apache.catalina.core.AprLifecycleListener"  SSLEngine= "on"  />
   <!--Initialize Jasper prior to webapps are loaded. Documentation at  /docs/jasper-howto .html -->
   <Listener className= "org.apache.catalina.core.JasperListener"  />
   <!-- Prevent memory leaks due to use of particular java /javax  APIs-->
   <Listener className= "org.apache.catalina.core.JreMemoryLeakPreventionListener"  />
   <Listener className= "org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"  />
   <Listener className= "org.apache.catalina.core.ThreadLocalLeakPreventionListener"  />
   <!-- Global JNDI resources
        Documentation at  /docs/jndi-resources-howto .html
   -->
   <GlobalNamingResources>
     <!-- Editable user database that can also be used by
          UserDatabaseRealm to authenticate  users
     -->
     <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 >
   <!-- A  "Service"  is a collection of one or  more  "Connectors"  that share
        a single  "Container"  Note:  A  "Service"  is not itself a  "Container" ,
        so you may not define subcomponents such as  "Valves"  at this level.
        Documentation at  /docs/config/service .html
    -->
   <Service name= "Catalina" >
     <!--The connectors can use a shared executor, you can define one or  more  named thread pools-->
     <!--
     <Executor name= "tomcatThreadPool"  namePrefix= "catalina-exec-"
         maxThreads= "150"  minSpareThreads= "4" />
     -->
     <!-- A  "Connector"  represents an endpoint by  which  requests are received
          and responses are returned. Documentation at :
          Java HTTP Connector:  /docs/config/http .html (blocking & non-blocking)
          Java AJP  Connector:  /docs/config/ajp .html
          APR (HTTP /AJP ) Connector:  /docs/apr .html
          Define a non-SSL HTTP /1 .1 Connector on port 8080
     -->
     <Connector port= "8080"  protocol= "HTTP/1.1"
                connectionTimeout= "20000"
                redirectPort= "8443"  />
     <!-- A  "Connector"  using the shared thread pool-->
     <!--
     <Connector executor= "tomcatThreadPool"
                port= "8080"  protocol= "HTTP/1.1"
                connectionTimeout= "20000"
                redirectPort= "8443"  />
     -->
     <!-- Define a SSL HTTP /1 .1 Connector on port 8443
          This connector uses the JSSE configuration, when using APR, the
          connector should be using the OpenSSL style configuration
          described  in  the APR documentation -->
     <!--
     <Connector port= "8443"  protocol= "HTTP/1.1"  SSLEnabled= "true"
                maxThreads= "150"  scheme= "https"  secure= "true"
                clientAuth= "false"  sslProtocol= "TLS"  />
     -->
     <!-- Define an AJP 1.3 Connector on port 8009 -->
     <Connector port= "8009"  protocol= "AJP/1.3"  redirectPort= "8443"  />
     <!-- An Engine represents the entry point (within Catalina) that processes
          every request.  The Engine implementation  for  Tomcat stand alone
          analyzes the HTTP headers included with the request, and passes them
          on to the appropriate Host (virtual host).
          Documentation at  /docs/config/engine .html -->
     <!-- You should  set  jvmRoute to support load-balancing via AJP ie :
     <Engine name= "Catalina"  defaultHost= "localhost"  jvmRoute= "jvm1" >
     -->
     <Engine name= "Catalina"  defaultHost= "localhost" >
       <!--For clustering, please take a  look  at documentation at:
           /docs/cluster-howto .html  (simple how to)
           /docs/config/cluster .html (reference documentation) -->
       <!--
       <Cluster className= "org.apache.catalina.ha.tcp.SimpleTcpCluster" />
       -->
       <!-- Use the LockOutRealm to prevent attempts to guess user passwords
            via a brute-force attack -->
       <Realm className= "org.apache.catalina.realm.LockOutRealm" >
         <!-- This Realm uses the UserDatabase configured  in  the global JNDI
              resources under the key  "UserDatabase" .  Any edits
              that are performed against this UserDatabase are immediately
              available  for  use by the Realm.  -->
         <Realm className= "org.apache.catalina.realm.UserDatabaseRealm"
                resourceName= "UserDatabase" />
       < /Realm >
       <Host name= "www.essun.org"  appBase= "webapps"
             unpackWARs= "true"  autoDeploy= "true" >
             <Context path= ""  docBase= "essun"  />
             <Valve className= "org.apache.catalina.valves.AccessLogValve"  directory= "logs"
                    prefix= "essun_access_log."  suffix= ".txt"
                    pattern= "%h %l %u %t &quot;%r&quot; %s %b"  />
       < /Host >
       <Host name= "localhost"   appBase= "webapps"
             unpackWARs= "true"  autoDeploy= "true" >
         <!-- SingleSignOn valve, share authentication between web applications
              Documentation at:  /docs/config/valve .html -->
         <!--
         <Valve className= "org.apache.catalina.authenticator.SingleSignOn"  />
         -->
         <!-- Access log processes all example.
              Documentation at:  /docs/config/valve .html
              Note: The pattern used is equivalent to using pattern= "common"  -->
         <Valve className= "org.apache.catalina.valves.AccessLogValve"  directory= "logs"
                prefix= "localhost_access_log."  suffix= ".txt"
                pattern= "%h %l %u %t &quot;%r&quot; %s %b"  />
       < /Host >
     < /Engine >
   < /Service >
< /Server >

站点目录文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@essun tomcat] # cd webapps/essun/
[root@essun essun] # ls
index.jsp  WEB-INF
[root@essun essun] # ll WEB-INF/
total 8
drwxr-xr-x 2 root root 4096 May  2 11:07 classes
drwxr-xr-x 2 root root 4096 May  2 11:07 lib
[root@essun essun] # cat index.jsp
<%@  page language= "java"  %>
<html>
   < head ><title>essun.node2< /title >< /head >
   <body>    <h1><font color= "red" >essun.node2.org< /font >< /h1 >
     <table align= "centre"  border= "1" >