Nginx+Lua+Tomcat搭建分布式集群

Nginx+Tomcat+cluster集群搭建

Tomcat1 --> 带有newrelic的主Tomcat复制版本

Tomcat2 --> 纯净的相同版本的Tomcat

Nginx1.8

SSL证书原始文件和密码

安装Nginx

1 nginx1.8 download - http://nginx.org/download/nginx-1.8.0.tar.gz 2 安装nginx支持文件: 3 ![](http://i.imgur.com/16kENRp.png) 4 --prefix 为Nginx的安装目录 5 6 ![](http://i.imgur.com/HVl7fIX.png) 7 8 下载1.0.2版本OpenSSL,并解压 9 wget http://www.openssl.org/source/openssl-1.0.2e.tar.gz 10 11 下载Nginx_lua模块并解压 12 wget https://github.com/chaoslawful/lua-nginx-module/archive/v0.10.4.tar.gz 13 14 下载Lua语言 15 wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz 16 解压 - make 17 出现如下内容表示编译成功 18 OK Successfully built LuaJIT 19 make[1]: Leaving directory `/usr/local/src/LuaJIT-2.0.2/src' 20 ==== Successfully built LuaJIT 2.0.2 ==== 21 make install 22 出现如下内容,表示安装成功 23 ==== Successfully installed LuaJIT 2.0.2 to /usr/local ==== 24 环境变量 25 export LUAJIT_LIB=/usr/local/lib 26 export LUAJIT_INC=/usr/local/include/luajit-2.0 27 28 安装devel_kit 29 wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz 30 解压 31 32 安装命令 33 ./configure --prefix=/usr/local/nginx-1.8 --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-openssl=/usr/local/download/openssl-1.0.2e --with-http_spdy_module --add-module=/usr/local/ngx_devel_kit-0.2.19 --add-module=/usr/local/lua-nginx-module-0.10.4 34 35 #--add-module=/usr/local/jakarta/nginx_jvm_route/nginx_upstream_jvm_route 36 #with-http_stub_status_module -- 监控Nginx运行状态 37 #with-http_ssl_module -- 开启Nginx支持ssl 38 #with-openssl -- 使用哪一个openssl,注意这里是openssl的源码而不是安装后的目录 39 #ngx_devel_kit+lua-nginx-module 是lua语言扩展包 40 #SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。(SPDYSpeedy 的昵音,意思是更快) 41 42 make --尝试安装看看是否出错 43 make install 开始正式安装 44 45 如果出错用这个命令 46 ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

配置Nginx

1 user root; 2 worker_processes 4; 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 use epoll;#linux专用,速度很快 12 worker_connections 1024; 13 } 14 15 16 http { 17 include mime.types; 18 default_type application/octet-stream; 19 20 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 21 # '$status $body_bytes_sent "$http_referer" ' 22 # '"$http_user_agent" "$http_x_forwarded_for"'; 23 24 #access_log logs/access.log main; 25 26 #禁止显示nginx版本,安全性问题 27 server_tokens off; 28 29 sendfile on; 30 #tcp_nopush on; 31 32 #keepalive_timeout 0; 33 keepalive_timeout 120; 34 35 gzip on; 36 gzip_min_length 1k;#1k以下文件禁用gzip 37 gzip_buffers 4 16k; 38 gzip_http_version 1.0; 39 gzip_comp_level 4;#数字大压缩比例高,cpu负载大 40 gzip_types text/html,application/x-javascript,text/css; 41 gzip_vary on; 42 43 #improve fastcgi_buffers to solve 504error 44 fastcgi_buffers 8 128k; 45 46 #time out time 47 send_timeout 120; 48 49 #404error page 50 51 #fastcgi_intercept_errors on; 52 53 #http请求转发 301重定向 54 server { 55 listen 80; 56 server_name localhost_80; 57 58 rewrite ^(.*)$ https://$host$1 permanent; 59 } 60 61 upstream tomcatserver { 62 ip_hash;#用户所访问的服务器绑定与ip,除非ip改变否则不会访问其他的server 63 server localhost:8080 weight=6; 64 server localhost:8081 weight=4 max_fails=3 fail_timeout=30s; #backup 备用服务器 65 #1.轮询(默认) 66 #2.fair; 响应优先/upstream_fair支持 67 #3.url_hash 相同的url分到相同后端 - 静态缓存 68 #4.ip_hash ip绑定,相同ip分到相同后端 - 弊端 69 #jvm_route第三方。目前支持版本1.4,sessionId绑定 70 } 71 72 #2 - 请求频率 73 #令牌原理,cooke的token作为标识符,每秒限制x个请求 74 limit_req_zone $cookie_token zone=session_limit:10m rate=30r/s; 75 76 # HTTPS server 77 server { 78 listen 443 ssl spdy; 79 server_name dev.seoclarity.net; 80 81 ssl on; 82 ssl_certificate /home/ssl/wildcard/chained.crt; 83 ssl_certificate_key /home/ssl/wildcard/seoclarity_net.key; 84 #openssl支持的加密版本,拒绝sslv2 和 sslv3 85 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 86 #ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; 87 ##只支持安全的加密算法,拒绝例如MD5之类的非安全算法 88 ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5; 89 ssl_prefer_server_ciphers on; 90 #ssl加密过的key缓存时间10分钟,不需要每次都和客户端握手 91 ssl_session_cache shared:SSL:10m; 92 #完全正向加密(Perfect Forward Secrecy,PFS93 #http://baike.baidu.com/link?url=HzOVQe-j2wN4JDJVFx_EiuPBoZp0TGN2sn8R_n4We2VedkkRX1B8UlMCO6qzIzEfXKzgGn0x_9PK7o5bAOJQha 94 #黑客保存拦截的数据待破解后一次性解密,PFS应对 95 #加密的随机数默认1024字节 96 ssl_dhparam /home/ssl/wildcard/dhparam.pem; 97 ssl_session_timeout 30m; 98 #缓冲区 99 ssl_buffer_size 1400; 100 101 index index.html index.htm index.jsp; 102 103 location / { 104 proxy_pass http://tomcatserver; 105 106 #2 - 请求频率 107 #令牌原理,cooke的token作为标识符 108 #burst作为备用的访问请求数,比如上面限制30r/s但是第一秒访问30+burst的请求也是允许的,但是第二秒将严格限制30r/s 109 #nodelay,如果不设置该选项,严格使用平均速率限制请求数 110 #第125个请求时,5个请求放到第2秒执行 111 #设置了的话,25个请求严格在第一秒,超过的请求直接503 112 limit_req zone=session_limit burst=10;#nodelay 113 114 #1 - 限制请求 115 #API、爬虫 禁用 - CC攻击 116 rewrite_by_lua ' 117 #从cookie中取随机数 118 local random = ngx.var.cookie_random 119 #cookie中无随机数 120 if(random == nil) then 121 #生成随机数 122 random = math.random(999999) 123 end 124 #ip+随机数 MD5加密 --> token 125 local token = ngx.md5("opencdn" .. ngx.var.remote_addr .. random) 126 #如果cookie中token != 计算的token 127 if (ngx.var.cookie_token ~= token) then 128 #放置token 129 ngx.header["Set-Cookie"] = {"token=" .. token, "random=" .. random} 130 #让客户端重新请求 131 return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.uri) 132 end 133 '; 134 135 proxy_redirect off; 136 #后端常用参数转发,不加这些后端经常取到客户ip是127.0.0.1 137 proxy_set_header Host $host; 138 proxy_set_header X-Real-IP $remote_addr; 139 proxy_set_header REMOTE-HOST $remote_addr; 140 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 141 proxy_set_header Cookie $http_cookie; 142 #文件上传最大size 143 client_max_body_size 5m; 144 client_body_buffer_size 256k; 145 proxy_connect_timeout 10; 146 proxy_send_timeout 30; 147 proxy_read_timeout 120; 148 proxy_buffer_size 256k; 149 proxy_buffers 4 256k; 150 proxy_busy_buffers_size 256k; 151 proxy_temp_file_write_size 256k; 152 #proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; 153 } 154 155 #监控nginx状态 156 location /ngx_status { 157 stub_status on; 158 access_log off; 159 #allow 127.0.0.1; 160 #deny all; 161 } 162 163 #静态文件访问 164 location ~* ^.+\.(swf|gif|png|jpg|js|css)$ { 165 root /home/actonia/source/0729/trunk/saas/WebContent; 166 expires 15m; 167 } 168 169 #error page 170 error_page 500 502 503 504 /50x.html; 171 location = /50x.html { 172 root html; 173 } 174 } 175 }

Tomcat1配置文件

1<?xml version='1.0' encoding='utf-8'?> 2 3<Server port="8035" shutdown="SHUTDOWN"> 4 5 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 6 <Listener className="org.apache.catalina.core.JasperListener" /> 7 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 8 <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> 9 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 10 11 <GlobalNamingResources> 12 13 <Resource name="UserDatabase" auth="Container" 14 type="org.apache.catalina.UserDatabase" 15 description="User database that can be updated and saved" 16 factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 17 pathname="conf/tomcat-users.xml" /> 18 </GlobalNamingResources> 19 20 <Service name="Catalina"> 21 22 <Connector port="8080" maxHttpHeaderSize="8192" 23 maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 24 enableLookups="false" redirectPort="443" acceptCount="100" 25 connectionTimeout="20000" disableUploadTimeout="true" 26 compression="on" 27 maxPostSize="0" 28 URIEncoding="UTF-8" 29 compressionMinSize="2048" 30 noCompressionUserAgents="gozilla, traviata" 31 compressableMimeType="text/html,text/xml,text/javascript,text/css,application/json" /> 32 33 <Connector port="8039" protocol="AJP/1.3" redirectPort="443" URIEncoding="UTF-8" /> 34 35 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1nginx"> 36 37 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 38 channelSendOptions="8"> 39 40 <Manager className="org.apache.catalina.ha.session.DeltaManager" 41 expireSessionsOnShutdown="false" 42 notifyListenersOnReplication="true"/> 43 44 <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 45 <Membership className="org.apache.catalina.tribes.membership.McastService" 46 address="228.0.0.4"#这个地址是广播地址 47 port="33451"#这个端口号2个要一样(相同广播地址相同端口认定为同一个组播) 48 frequency="500" 49 dropTime="3000"/> 50 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 51 address="auto"#组播 52 port="4000" 53 autoBind="100" #从4000开始,100以内随机挑选一个 54 selectorTimeout="5000" 55 maxThreads="6"/> 56 57 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 58 <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 59 </Sender> 60 <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 61 <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 62 </Channel> 63 64 <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 65 filter=""/> 66 <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 67 68 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 69 tempDir="/tmp/war-temp/" 70 deployDir="/tmp/war-deploy/" 71 watchDir="/tmp/war-listen/" 72 watchEnabled="false"/> 73 74 <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> 75 <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 76 77 </Cluster> 78 79 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 80 resourceName="UserDatabase"/> 81 82 <Host name="localhost" appBase="webapps" 83 unpackWARs="true" autoDeploy="true" 84 xmlValidation="false" xmlNamespaceAware="false"> 85 86 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 87 prefix="localhost_access_log." suffix=".txt" pattern="combined" resolveHosts="false"/> 88 89 </Host> 90 </Engine> 91 </Service> 92</Server>

Tomcat2配置文件

1<?xml version='1.0' encoding='utf-8'?> 2<Server port="8036" shutdown="SHUTDOWN"> 3 4 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 5 <Listener className="org.apache.catalina.core.JasperListener" /> 6 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 7 <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> 8 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 9 10 <GlobalNamingResources> 11 12 <Resource name="UserDatabase" auth="Container" 13 type="org.apache.catalina.UserDatabase" 14 description="User database that can be updated and saved" 15 factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 16 pathname="conf/tomcat-users.xml" /> 17 </GlobalNamingResources> 18 19 <Service name="Catalina"> 20 21 <Connector port="8081" maxHttpHeaderSize="8192" 22 maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 23 enableLookups="false" redirectPort="443" acceptCount="100" 24 connectionTimeout="20000" disableUploadTimeout="true" 25 compression="on" 26 maxPostSize="0" 27 URIEncoding="UTF-8" 28 compressionMinSize="2048" 29 noCompressionUserAgents="gozilla, traviata" 30 compressableMimeType="text/html,text/xml,text/javascript,text/css,application/json" /> 31 32 <Connector port="8040" protocol="AJP/1.3" redirectPort="443" URIEncoding="UTF-8" /> 33 34 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2nginx"> 35 36 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 37 channelSendOptions="8"> 38 39 <Manager className="org.apache.catalina.ha.session.DeltaManager" 40 expireSessionsOnShutdown="false" 41 notifyListenersOnReplication="true"/> 42 43 <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 44 <Membership className="org.apache.catalina.tribes.membership.McastService" 45 address="228.0.0.4"# 46 port="33451"# 47 frequency="500" 48 dropTime="3000"/> 49 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 50 address="auto"# 51 port="4000"# 52 autoBind="100" 53 selectorTimeout="5000" 54 maxThreads="6"/> 55 56 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 57 <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 58 </Sender> 59 <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 60 <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 61 </Channel> 62 63 <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 64 filter=""/> 65 <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 66 67 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 68 tempDir="/tmp/war-temp/" 69 deployDir="/tmp/war-deploy/" 70 watchDir="/tmp/war-listen/" 71 watchEnabled="false"/> 72 73 <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> 74 <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 75 76 </Cluster> 77 78 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 79 resourceName="UserDatabase"/> 80 81 <Host name="localhost" appBase="webapps" 82 unpackWARs="true" autoDeploy="true" 83 xmlValidation="false" xmlNamespaceAware="false"> 84 85 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 86 prefix="localhost_access_log." suffix=".txt" pattern="combined" resolveHosts="false"/> 87 88 </Host> 89 </Engine> 90 </Service> 91</Server>

以下是摘抄的组播解释

1<!-- 2 Cluster(集群,) 节点,如果你要配置tomcat集群,则需要使用此节点. 3 className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. 4 channelSendOptions可以设置为24810,每个数字代表一种方式 5 2 = Channel.SEND_OPTIONS_USE_ACK(确认发送) 6 4 = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送) 7 8 = Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送) 8 在异步模式下,可以通过加上确认发送(Acknowledge)来提高可靠性,此时channelSendOptions设为10 9--> 10<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> 11 <!-- 12 Manager决定如何管理集群的Session信息。Tomcat提供了两种Manager:BackupManager和DeltaManager 13 BackupManager-集群下的所有Session,将放到一个备份节点。集群下的所有节点都可以访问此备份节点 14 DeltaManager-集群下某一节点生成、改动的Session,将复制到其他节点。 15 DeltaManager是Tomcat默认的集群Manager,能满足一般的开发需求 16 使用DeltaManager,每个节点部署的应用要一样;使用BackupManager,每个节点部署的应用可以不一样. 17 18 className-指定实现org.apache.catalina.ha.ClusterManager接口的类,信息之间的管理. 19 expireSessionsOnShutdown-设置为true时,一个节点关闭,将导致集群下的所有Session失效 20 notifyListenersOnReplication-集群下节点间的Session复制、删除操作,是否通知session listeners 21 maxInactiveInterval-集群下Session的有效时间(单位:s)22 maxInactiveInterval内未活动的Session,将被Tomcat回收。默认值为1800(30min) 23 --> 24 <Manager className="org.apache.catalina.ha.session.DeltaManager" 25 expireSessionsOnShutdown="false" 26 notifyListenersOnReplication="true"/> 27 28 <!-- 29 Channel是Tomcat节点之间进行通讯的工具。 30 Channel包括5个组件:Membership、Receiver、Sender、Transport、Interceptor 31 --> 32 <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 33 <!-- 34 Membership维护集群的可用节点列表。它可以检查到新增的节点,也可以检查到没有心跳的节点 35 className-指定Membership使用的类 36 address-组播地址 37 port-组播端口 38 frequency-发送心跳(向组播地址发送UDP数据包)的时间间隔(单位:ms)。默认值为500 39 dropTime-Membership在dropTime(单位:ms)内未收到某一节点的心跳,则将该节点从可用节点列表删除。默认值为3000 40 41 : 组播(Multicast):一个发送者和多个接收者之间实现一对多的网络连接。 42 一个发送者同时给多个接收者传输相同的数据,只需复制一份相同的数据包。 43 它提高了数据传送效率,减少了骨干网络出现拥塞的可能性 44 相同组播地址、端口的Tomcat节点,可以组成集群下的子集群 45 --> 46 <Membership className="org.apache.catalina.tribes.membership.McastService" 47 address="228.0.0.4" 48 port="45564" 49 frequency="500" 50 dropTime="3000"/> 51 52 <!-- 53 Receiver : 接收器,负责接收消息 54 接收器分为两种:BioReceiver(阻塞式)、NioReceiver(非阻塞式) 55 56 className-指定Receiver使用的类 57 address-接收消息的地址 58 port-接收消息的端口 59 autoBind-端口的变化区间 60 如果port为4000,autoBind为100,接收器将在4000-4099间取一个端口,进行监听 61 selectorTimeout-NioReceiver内轮询的超时时间 62 maxThreads-线程池的最大线程数 63 --> 64 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 65 address="auto" 66 port="4000" 67 autoBind="100" 68 selectorTimeout="5000" 69 maxThreads="6"/> 70 71 <!-- 72 Sender : 发送器,负责发送消息 73 Sender内嵌了Transport组件,Transport真正负责发送消息 74 --> 75 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 76 <!-- 77 Transport分为两种:bio.PooledMultiSender(阻塞式)、nio.PooledParallelSender(非阻塞式) 78 --> 79 <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 80 </Sender> 81 82 <!-- 83 Interceptor : Cluster的拦截器 84 TcpFailureDetector-网络、系统比较繁忙时,Membership可能无法及时更新可用节点列表, 85 此时TcpFailureDetector可以拦截到某个节点关闭的信息, 86 并尝试通过TCP连接到此节点,以确保此节点真正关闭,从而更新集群可以用节点列表 87 --> 88 <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 89 90 <!-- 91 MessageDispatch15Interceptor-查看Cluster组件发送消息的方式是否设置为 92 Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster标签下的channelSendOptions为8)93 设置为Channel.SEND_OPTIONS_ASYNCHRONOUS时, 94 MessageDispatch15Interceptor先将等待发送的消息进行排队,然后将排好队的消息转给Sender 95 --> 96 <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 97 </Channel> 98 99 <!-- 100 Valve : 可以理解为Tomcat的拦截器 101 ReplicationValve-在处理请求前后打日志;过滤不涉及Session变化的请求 102 vmRouteBinderValve-Apache的mod_jk发生错误时,保证同一客户端的请求发送到集群的同一个节点 103 --> 104 <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> 105 <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 106 107 <!-- 108 Deployer : 同步集群下所有节点的一致性。Deployer没试验成功过。。。 109 --> 110 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 111 tempDir="/tmp/war-temp/" 112 deployDir="/tmp/war-deploy/" 113 watchDir="/tmp/war-listen/" 114 watchEnabled="false"/> 115 <!-- 116 ClusterListener : 监听器,监听Cluster组件接收的消息 117 使用DeltaManager时,Cluster接收的信息通过ClusterSessionListener传递给DeltaManager 118 --> 119 <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 120</Cluster>

Nginx证书提取方法

http://blog.sina.com.cn/s/blog_4b81125f0100ky4e.html

服务器需要启用组播

查看是否启用组播

netstat -gn

1因为tomcat的session同步功能需要用到组播,默认都是打开的. 2可以通过指令打开 3route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

其他注意事项

项目修改:

11.applicationContext-security.xml 取消https 22.web.xml 启用分布式: <distributable/> 否则会出现session无故丢失情况

关于Tomcat/部署代码 一些其他改动

1.Tomcat配置
11.结束热启动 2 Tomcat conf/Catalina/localhost/ROOT.xml 3 删除reloadable属性,编译时不会影响Tomcat正常运行 4 52.Tomcat8 cluster官方配置 6 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 7 channelSendOptions="8"> 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="4000" 22 autoBind="100" 23 selectorTimeout="5000" 24 maxThreads="6"/> 25 26 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 27 <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 28 </Sender> 29 <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 30 <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 31 </Channel> 32 33 <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 34 filter=""/> 35 <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 36 37 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 38 tempDir="/tmp/war-temp/" 39 deployDir="/tmp/war-deploy/" 40 watchDir="/tmp/war-listen/" 41 watchEnabled="false"/> 42 43 <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 44 </Cluster> 45 463.Tomcat自带session持久化 47取消注释,关闭功能。需要实现序列化 48<!-- Uncomment this to disable session persistence across Tomcat restarts --> 49<!-- 50<Manager pathname="" /> 51-->
2.关于newrelic配置
1如果Tomcat路径变化,需要修改bin/下的catalina.shNR_JAR 这个变量 2通用设置 : 3# ---- New Relic switch automatically added to start command on 2015 Oct 08, 05:12:50 4NR_JAR="$CATALINA_BASE"/newrelic/newrelic.jar; export NR_JAR 5JAVA_OPTS="$JAVA_OPTS -javaagent:$NR_JAR"; export JAVA_OPTS
3.整合Tomcat输出日志
11.进入 "从" Tomcat 2 32.vim bin/catalina.sh 4 53.增加变量 6 #---- Main Tomcat Path for log---- 7 CATALINA_MAIN_BASE="主Tomcat Path" 8 94.在所有的 10 -Dcatalina.base= 11 下增加 12 -Dcatalina.mainbase="$CATALINA_MAIN_BASE" \ 13 145.找到 CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out 15 修改为 CATALINA_OUT="$CATALINA_MAIN_BASE"/logs/catalina.out 16 176.打开conf/logging.properties文件 18 替换所有${catalina.base}为${catalina.mainbase} 19 207.重启"从"Tomcat,进入主Tomcat查看Log
4.Nginx配置
11.nginx默认的fastcgi进程响应缓冲区太小导致504 Gateway Time-out”错误。 2 fastcgi_buffers 8 128k; 3 42.提升超时等待时间,不要太长吃内存 5 keepalive_timeout 120; 6 73.解决Cookie问题 8 location9 proxy_set_header Cookie $http_cookie; 10 114.限制访问频率 12 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

tomcat配置https协议详细步骤

1.介绍了密码学的相关基础知识后,本文介绍如何在tomcat上搭建https服务。 环境:jdk7,tomcat7,windows72.我们使用java中自带的javatool工具来制作所需的https所需的证书,keytool是java自带的用于密钥和证书的生成和管理工具。3.这里先介绍两个文件格式: jks(java key store)

springboot部署到tomcat

把springboot项目按照平常的web项目一样发布到tomcat容器下多点经验:1.保证运行环境的jdk和开发环境一致,不然class文件无法被编译2.保证tomcat和java的版本匹配,不然tomcat无法启动3.集群一般会进行ip和域名的映射,如果tomcat服务器不在集群内,需要在所在服务器进行

Kubernetes和TensorFlow集群搭建

原创未名小宇宙2018012022:48:35@引用自今日头条莫问出处莫问归途本文演示在Kubernetes集群上搭建TensorFlow集群。集群如下:(请不要问node1哪去了,因为TA罢工了)!Kubernetes和TensorFlow集群搭建(https://oscimg.oschina.net/oscnet

mysql主从集群搭建;(集群复制数据)

1.搭建mysql5.7环境chownmysql:mysqlR/data/groupaddmysqluseraddgmysqlmysqlyuminstallnumactlrpmemysqllibsnodepsrpmivhmysqlcommunitycommon5.7.211

Kafka数据迁移MaxCompute最佳实践

前提条件搭建Kafka集群进行数据迁移前,您需要保证自己的Kafka集群环境正常。本文使用阿里云EMR服务自动化搭建Kafka集群,详细过程请参见:Kafka快速入门。本文使用的EMRKafka版本信息如下:EMR版本:EMR3.12.1集群类型:Kafka软件信息:Ganglia3.7.2ZooKeeper