最近在项目上遇到单台tomcat服务器压力过大问题,尝试使用Ngnix做分发。
大概结构是这样的:
有一台单独的Ngnix服务器,开放了一个端口(1002)接收数据,然后实际的应用部署在其他三台服务器上:
Ngnix 的配置如下:
##---------------------------------------------------------------------------
upstream uplog{
server 192.168.5.112:3002 weight=6;
server 192.168.5.114:3002 weight=6;
server 192.168.5.116:3002 weight=6;
}
server {
listen 1002;
server_name 192.168.5.43;
access_log /var/www/nginx/log.log;
error_log /var/www/nginx/logError.log;
location / {
proxy_pass http://uplog;
}
}
}
然后其他三台tomcat的配置如下:
<?xml version='1.0' encoding='utf-8'?>
<Server port="2002" shutdown="SHUTDOWN">
<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.GlobalResourcesLifecycleListen er" />
<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="<span style="color:#ff0000;">3002</span>" protocol="HTTP/1.1"
acceptCount="5000"
connectionTimeout="15000"
maxHttpHeaderSize="8192"
useBodyEncodingForURI="true"
enableLookups="false"
maxThreads="5000"
maxKeepAliveRequests="100"
keepAliveTimeout="10000"
redirectPort="4002" URIEncoding="UTF-8"/>
<!--
<Connector executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
acceptCount="5000"
connectionTimeout="15000"
maxHttpHeaderSize="8192"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="5000"
maxKeepAliveRequests="100"
keepAliveTimeout="10000"
/>
-->
<Engine name="Catalina" defaultHost="<span style="color:#ff0000;">192.168.5.112</span>">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="<span style="color:#ff0000;">192.168.5.112</span>" appBase="webapps" unpackWARs="false" autoDe ploy="false">
<Context path="/data" docBase="/var/www/appLog" reloadable="fals e" sessionCookiePath="/" />
</Host>
</Engine>
</Service>
</Server>
tomcat配置对应的 defaultHost 和resourceName和Ngix对应的配置一定要写IP,如果 写hostname就无法接收到。
还有就是tomcat服务器上的防火墙一定要记得关闭,否则是无法做到分发的。