軟件及環境是:
虛擬機上裝centos 5.5
IP為:192.168.0.51 裝上nginx和tomcat ?6.0.32 命名為 Tomcat1
一臺win7上裝tomcat ?6.0.32? IP為:192.168.0.50 ?命名為 Tomcat2
首先裝nginx,我是參照http://blog.s135.com/nginx_php_v6/?配了一個Nginx + PHP(FastCGI)環境,然后再加上Tomcat的轉發。
我的nginx.conf 修改如下
#######################################################################
#
#?This?is?the?main?Nginx?configuration?file.??
#
#?More?information?about?the?configuration?options?is?available?on?
#???*?the?English?wiki?-?http://wiki.nginx.org/Main
#???*?the?Russian?documentation?-?http://sysoev.ru/nginx/
#
#######################################################################

#----------------------------------------------------------------------
#?Main?Module?-?directives?that?cover?basic?functionality
#
#???http://wiki.nginx.org/NginxHttpMainModule
#
#----------------------------------------------------------------------

user??????????????nginx;
worker_processes??8;

error_log??/var/log/nginx/error.log;
#error_log??/var/log/nginx/error.log??notice;
#error_log??/var/log/nginx/error.log??info;

pid????????/var/run/nginx.pid;


#----------------------------------------------------------------------
#?Events?Module?
#
#???http://wiki.nginx.org/NginxHttpEventsModule
#
#----------------------------------------------------------------------

events?{
????worker_connections??10240;
}


#----------------------------------------------------------------------
#?HTTP?Core?Module
#
#???http://wiki.nginx.org/NginxHttpCoreModule?
#
#----------------------------------------------------------------------

http?{
????include???????/etc/nginx/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??/var/log/nginx/access.log??main;

server_names_hash_bucket_size??128;
client_header_buffer_size??32k;
large_client_header_buffers??4??32K;
client_max_body_size?8m;


????sendfile????????on;
????tcp_nopush?????on;

????#keepalive_timeout??0;
????keepalive_timeout??65;

????#gzip??on;

gzip_min_length?1k;
gzip_buffers?4??16k;
gzip_http_version?1.1;
gzip_comp_level?2;
gzip_types?text/plain?application/x-javascript?text/css?application/xml;
gzip_vary??on;

upstream??tserver??{
????????server???192.168.0.51:8080?weight=1;
????????server???192.168.0.50:8080?weight=1;
?}
????
????#
????#?The?default?server
????#
????server?{
????????listen???????80;
????????server_name??_;

????????#charset?koi8-r;

????????#access_log??logs/host.access.log??main;

?????????location?~?.*\.(php|php5)?$
????????{
??????????root??/www/ROOT;??????
??????????#fastcgi_pass??unix:/tmp/php-cgi.sock;
?????????fastcgi_pass??127.0.0.1:9000;
?????????fastcgi_index?index.php;
?????????include?fcgi.conf;
????????}

????????location?~?\.(jsp|jspx|do|htm)?$?{
?????????proxy_set_header??Host?$host;??
?????????proxy_set_header??X-Real-IP??$remote_addr;
?????????proxy_pass?http://tserver;#轉向tomcat處理???????
????????}

????????location?~?(/dwr/)??{
?????????proxy_set_header??Host?$host;
?????????proxy_set_header??X-Real-IP??$remote_addr;
?????????proxy_pass?http://tserver;#轉向tomcat處理
????????}


????????location?/?{
????????????root???/www/ROOT;
????????????index??index.html?index.jsp?default.jsp?index.do?default.do;
????????}

????????error_page??404??????????????/404.html;
????????location?=?/404.html?{
????????????root???/www/ROOT;
????????}

????????#?redirect?server?error?pages?to?the?static?page?/50x.html
????????#
????????error_page???500?502?503?504??/50x.html;
????????location?=?/50x.html?{
????????????root???/www/ROOT;
????????}

????????#?proxy?the?PHP?scripts?to?Apache?listening?on?127.0.0.1:80
????????#
????????#location?~?\.php$?{
????????#????proxy_pass???http://127.0.0.1;
????????#}

????????#?pass?the?PHP?scripts?to?FastCGI?server?listening?on?127.0.0.1:9000
????????#
????????#location?~?\.php$?{
????????#????root???????????html;
????????#????fastcgi_pass???127.0.0.1:9000;
????????#????fastcgi_index??index.php;
????????#????fastcgi_param??SCRIPT_FILENAME??/scripts$fastcgi_script_name;
????????#????include????????fastcgi_params;
????????#}

????????#?deny?access?to?.htaccess?files,?if?Apache's?document?root
????????#?concurs?with?nginx's?one
????????#
????????#location?~?/\.ht?{
????????#????deny??all;
????????#}
????}

????#?Load?config?files?from?the?/etc/nginx/conf.d?directory
????include?/etc/nginx/conf.d/*.conf;

}

下一步是配置Tomcat集群。分別打開tomcat1和tomcat2下conf中server.xml
<Server port="8005" shutdown="SHUTDOWN">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
? ?maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
? ?enableLookups="false" redirectPort="8443" acceptCount="100"
? ?connectionTimeout="20000" disableUploadTimeout="true" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
找到<Engine name="Catalina" defaultHost="localhost">
Tomcat1下的修改為<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
Tomcat2下的修改為<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
tomcat1找到
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改為?
<Cluster?className="org.apache.catalina.ha.tcp.SimpleTcpCluster"?
????????????channelSendOptions="6">

????????????<Manager?className="org.apache.catalina.ha.session.DeltaManager"
????????????????expireSessionsOnShutdown="false"
????????????????notifyListenersOnReplication="true"/>
????????????<!--
????????????<Manager?className="org.apache.catalina.ha.session.BackupManager"
????????????????expireSessionsOnShutdown="false"
????????????????notifyListenersOnReplication="true"
????????????????mapSendOptions="6"/>
????????????-->
????????????<Channel?className="org.apache.catalina.tribes.group.GroupChannel">
????????????????<Membership?className="org.apache.catalina.tribes.membership.McastService"?
????????????????????address="228.0.0.5"?
????????????????????bind="192.168.0.51"?
????????????????????port="45564"?
????????????????????frequency="500"?
????????????????????dropTime="3000"/>
????????????????<Receiver?className="org.apache.catalina.tribes.transport.nio.NioReceiver"?
????????????????????address="192.168.0.51"?
????????????????????autoBind="100"?
????????????????????port="4001"?
????????????????????selectorTimeout="100"?
????????????????????maxThreads="6"/>
????????????????<Sender?className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
????????????????????<Transport?className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
????????????????</Sender>
????????????????<Interceptor?className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
????????????????<Interceptor?className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
????????????</Channel>
????????????<Valve?className="org.apache.catalina.ha.tcp.ReplicationValve"?filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
????????????
????????????<ClusterListener?className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
????????????<ClusterListener?className="org.apache.catalina.ha.session.ClusterSessionListener"/>
????????</Cluster>
tomcat2找到
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改為?
<Cluster?className="org.apache.catalina.ha.tcp.SimpleTcpCluster"?
????????????channelSendOptions="6">

????????????<Manager?className="org.apache.catalina.ha.session.DeltaManager"
????????????????expireSessionsOnShutdown="false"
????????????????notifyListenersOnReplication="true"/>
????????????<!--
????????????<Manager?className="org.apache.catalina.ha.session.BackupManager"
????????????????expireSessionsOnShutdown="false"
????????????????notifyListenersOnReplication="true"
????????????????mapSendOptions="6"/>
????????????-->
????????????<Channel?className="org.apache.catalina.tribes.group.GroupChannel">
????????????????<Membership?className="org.apache.catalina.tribes.membership.McastService"?
????????????????????address="228.0.0.5"?
????????????????????bind="192.168.0.50"?
????????????????????port="45564"?
????????????????????frequency="500"?
????????????????????dropTime="3000"/>
????????????????<Receiver?className="org.apache.catalina.tribes.transport.nio.NioReceiver"?
????????????????????address="192.168.0.50"?
????????????????????autoBind="100"?
????????????????????port="4000"?
????????????????????selectorTimeout="100"?
????????????????????maxThreads="6"/>
????????????????<Sender?className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
????????????????????<Transport?className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
????????????????</Sender>
????????????????<Interceptor?className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
????????????????<Interceptor?className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
????????????</Channel>
????????????<Valve?className="org.apache.catalina.ha.tcp.ReplicationValve"?filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
????????????
????????????<ClusterListener?className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
????????????<ClusterListener?className="org.apache.catalina.ha.session.ClusterSessionListener"/>
????????</Cluster>
還需要在程序的web.xml里面</web-app>前面加入以下這句話
<distributable/>?
session同步到這里設置完畢
服務器的啟動順序如下:?
tomcat1 --> |tomcat2 --> |nginx?
先啟動tocmat1,等tomcat1啟動完全的時候再啟動tomcat2,等兩個tocmat全啟動之后,再啟動nginx
負載的時候可以用APACHE或NGINX,如果什么都不用,兩臺一接防問了話,可能會出錯極session不同步的問題,網上也很多人介意不要做seeeion同步,這樣會降低機器的性能,有一個方法可以,就是NGINX的ip_hash,這樣至少可以保證客戶端去防問同一臺TOCMAT,除非那臺TOCMAT掛了
一、下載下列幾個 Jar包?
http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar?
http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar?
http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar?
http://spymemcached.googlecode.com/files/memcached-2.4.2.jar?
http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar?
將以下幾個Jar包Copy到 $TOMCAT_HOME/lib目下,每個Tomcat節點都需要有。?
二、配置Tomcat的Server.xml配置文件,樣本可以點擊這里下載,主要內容如下:?
http://www.javabloger.com/images/2010-05/webcluster/server.xml.txt?
<Context docBase="D:\webapp" path="" reloadable="true" >?
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"?
memcachedNodes="n1:localhost:11211"?
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"?
sessionBackupAsync="false"?
sessionBackupTimeout="100"?
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"?
copyCollectionsForSerialization="false"?
/>?
</Context>?
每個Tomcat的節點都需要修改。