Nginx+Tomcat在Windows下做负载均衡.docx
《Nginx+Tomcat在Windows下做负载均衡.docx》由会员分享,可在线阅读,更多相关《Nginx+Tomcat在Windows下做负载均衡.docx(8页珍藏版)》请在冰豆网上搜索。
Nginx+Tomcat在Windows下做负载均衡
一、为什么需要对Tomcat服务器做负载均衡:
Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站的运行。
另外,在访问量大的情况下,Tomcat的线程数会不断增加。
由于Tomcat自身对内存的占用有控制,当对内存的占用达到最大值时便会出现内存溢出,对网站的访问严重超时等现象,这时便需要重新启动Tomcat以释放占用的内存,这样做便会阻断网站运行。
所以对Tomcat做负载均衡便很有必要。
目前可以和Tomcat做负载均衡的主流服务器是Apache,但是Nginx由于功能多、配置简单等优点逐渐成为很多负载均衡服务器的首选。
Nginx的并发数可达到50000,所以理论上可以和Tomcat以1:
100的比例来配置,这样便可以很好的解决网站并发瓶颈问题。
二、Nginx+Tomcat在Windows下负载均衡配置方法:
Nginx+Tomcat在Windows下做负载均衡相对在Linux下简单不少,因为不论是Nginx还是Tomcat只需要下载Windows下的安装包解压到某个目录下,然后就可以做配置了。
我选择的Nginx是nginx-0.8.49这个版本,Tomcat选择的是apache-tomcat-6.0.26。
下面就是配置过程:
1.将nginx-0.8.49.rar压缩包直接解压到某个目录下(如D:
/负载均衡/nginx)。
2.将apache-tomcat-6.0.26.rar压缩包解压,因为是做负载均衡,所以至少要解压两个。
(如分别解压到D:
/负载均衡/tomcat_1和D:
/负载均衡/tomcat_2下面)。
3.将要发布的项目发布到两个Tomcat根目录下的webapps下,保证两个Tomcat下面的项目名称相同。
4.修改其中一个Tomcat的配置文件,该配置文件位于Tomcat目录下的/conf/下,文件名为server.xml,修改其中的为,修改其中的
connectionTimeout="20000"
redirectPort="8443"/>
为
connectionTimeout="20000"
redirectPort="8443"/>
修改后的文件如下:
xmlversion='1.0'encoding='utf-8'?
>
--
LicensedtotheApacheSoftwareFoundation(ASF)underoneormore
contributorlicenseagreements. SeetheNOTICEfiledistributedwith
thisworkforadditionalinformationregardingcopyrightownership.
TheASFlicensesthisfiletoYouundertheApacheLicense,Version2.0
(the"License");youmaynotusethisfileexceptincompliancewith
theLicense. YoumayobtainacopyoftheLicenseat
http:
//www.apache.org/licenses/LICENSE-2.0
Unlessrequiredbyapplicablelaworagreedtoinwriting,software
distributedundertheLicenseisdistributedonan"ASIS"BASIS,
WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
SeetheLicenseforthespecificlanguagegoverningpermissionsand
limitationsundertheLicense.
-->
--Note:
A"Server"isnotitselfa"Container",soyoumaynot
definesubcomponentssuchas"Valves"atthislevel.
Documentationat/docs/config/server.html
-->
--APRlibraryloader.Documentationat/docs/apr.html-->
--InitializeJasperpriortowebappsareloaded.Documentationat/docs/jasper-howto.html-->
--Preventmemoryleaksduetouseofparticularjava/javaxAPIs-->
--JMXSupportfortheTomcatserver.Documentationat/docs/non-existent.html-->
--GlobalJNDIresources
Documentationat/docs/jndi-resources-howto.html
-->
--Editableuserdatabasethatcanalsobeusedby
UserDatabaseRealmtoauthenticateusers
-->
type="org.apache.catalina.UserDatabase"
description="Userdatabasethatcanbeupdatedandsaved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
--A"Service"isacollectionofoneormore"Connectors"thatshare
asingle"Container"Note:
A"Service"isnotitselfa"Container",
soyoumaynotdefinesubcomponentssuchas"Valves"atthislevel.
Documentationat/docs/config/service.html
-->
--Theconnectorscanuseasharedexecutor,youcandefineoneormorenamedthreadpools-->
--
maxThreads="150"minSpareThreads="4"/>
-->
--A"Connector"representsanendpointbywhichrequestsarereceived
andresponsesarereturned.Documentationat:
JavaHTTPConnector:
/docs/config/http.html(blocking&non-blocking)
JavaAJP Connector:
/docs/config/ajp.html
APR(HTTP/AJP)Connector:
/docs/apr.html
Defineanon-SSLHTTP/1.1Connectoronport8080
-->
connectionTimeout="20000"
redirectPort="8443"/>
--A"Connector"usingthesharedthreadpool-->
--
port="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
-->
--DefineaSSLHTTP/1.1Connectoronport8443
ThisconnectorusestheJSSEconfiguration,whenusingAPR,the
connectorshouldbeusingtheOpenSSLstyleconfiguration
describedintheAPRdocumentation-->
--
maxThreads="150"scheme="https"secure="true"
clientAuth="false"sslProtocol="TLS"/>
-->
--DefineanAJP1.3Connectoronport8009-->
--AnEnginerepresentstheentrypoint(withinCatalina)thatprocesses
everyrequest. TheEngineimplementationforTomcatstandalone
analyzestheHTTPheadersincludedwiththerequest,andpassesthem
ontotheappropriateHost(virtualhost).
Documentationat/docs/config/engine.html-->
--YoushouldsetjvmRoutetosupportload-balancingviaAJPie:
-->
--Forclustering,pleasetakealookatdocumentationat:
/docs/cluster-howto.html (simplehowto)
/docs/config/cluster.html(referencedocumentation)-->
--
-->
--Therequestdumpervalvedumpsusefuldebugginginformationabout
therequestandresponsedatareceivedandsentbyTomcat.
Documentationat:
/docs/config/valve.html-->
--
-->
--ThisRealmusestheUserDatabaseconfiguredintheglobalJNDI
resourcesunderthekey"UserDatabase". Anyedits
thatareperformedagainstthisUserDatabaseareimmediately
availableforusebytheRealm. -->
resourceName="UserDatabase"/>
--Definethedefaultvirtualhost
Note:
XMLSchemavalidationwillnotworkwithXerces2.2.
-->
unpackWARs="true"autoDeploy="true"
xmlValidation="false"xmlNamespaceAware="false">
--SingleSignOnvalve,shareauthenticationbetweenwebapplications
Documentationat:
/docs/config/valve.html-->
--
-->
--Accesslogprocessesallexample.
Documentationat:
/docs/config/valve.html-->
--
prefix="localhost_access_log."suffix=".txt"pattern="common"resolveHosts="false"/>
-->
5.修改Nginx配置文件nginx.conf,该文件位于Nginx根目录下的/conf下面。
①在#gzip on;后面加入下面配置:
upstreambackend{
serverlocalhost:
8080;
serverlocalhost:
8088;
ip_hash;
}
其中serverlocalhost:
8080为第一个Tomcat的启动地址,serverlocalhost:
8088为第二个Tomcat的启动地址,ip_hash用于做session同步。
②修改第一个server{}配置中的listen 80;改为新的端口号,因为我的本机80端口被IIS占用,因此将此处改为listen800;。
并将
location/{
root html;
index index.htmlindex.htm;
}
改为:
location/{
root html;
index index.htmlindex.htm;
proxy_pass http:
//backend;
proxy_redirect off;
proxy_set_header Host$host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 432k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
其中proxy_pass参数和upstreambackend{}对应。
经过上面这些步骤,负载均衡配置就完成,下面前分别启动两台tomcat,然后双击nginx根目录下的nginx.exe文件或者用startnginx启动nginx,打开浏览器,输入地址:
http:
//localhost:
800便可看到下面画面:
这说明已经成功跳转到Tomcat上面。
下面以来电秀具体项目为例,输入地址:
http:
//localhost:
800/ldxwebpersonal/personal/index/index.action