旅行網(wǎng)站開發(fā)需求說明書百度網(wǎng)頁怎么制作
今天看到"基于apache的tomcat負載均衡和集群配置?"這篇文章成為javaEye熱點。
略看了一下,感覺太復雜,要配置的東西太多,因此在這里寫出一種更簡潔的方法。
?
要集群tomcat主要是解決SESSION共享的問題,因此我利用memcached來保存session,多臺TOMCAT服務器即可共享SESSION了。
?
你可以自己寫tomcat的擴展來保存SESSION到memcached。
這里推薦使用memcached-session-manager這個開源項目(http://code.google.com/p/memcached-session-manager/?),下面簡稱msm。
如何安裝nginx、memcached、tomcat這些就不多說了。
先說明一下測試環(huán)境:
tomcat1、nginx、memcached安裝在192.168.1.11
tomcat2安裝在192.168.1.101
下面分步實現(xiàn)基于nginx的tomcat負載均衡和集群配置
?
一,tomcat集群
??? 1,先下載msm及其依賴包
????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
?
2,將這5個包放到$TOMCAT_HOME/lib目錄下
3,修改$TOMCAT_HOME/conf/server.xml
?
-
?<Context docBase="E:/java_codes/TestSession/WebContent" 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>
?這里的memcachedNodes是填寫memcached節(jié)點,多個節(jié)點時可以以空隔分開,如:
?n1:localhost:11211 n2:localhost:11212
?sessionBackupTimeout的單位為分鐘
?
?E:/java_codes/TestSession/WebContent?替換成你的WEB目錄
?
? 修改后重啟兩個TOMCAT即可,這個時候已經(jīng)解決SESSION的共享問題.
二,配置nginx實現(xiàn)負載均衡
?? 以我的nginx.conf為例
-
#user nobody; worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #gzip on; upstream www.docyeah.com { server 192.168.1.11:8080; server 192.168.1.101:8080; } server { listen 80; server_name www.docyeah.com; charset utf-8; location / { root html; index index.html index.htm; proxy_pass http://www.docyeah.com; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 100m; } location ~ ^/(WEB-INF)/ { deny all; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
?
將www.docyeah.com替換成你的域名
192.168.1.11和192.168.1.101替換成你服務器的IP
?
OK,已經(jīng)完成。啟動nginx即可。
這是我采用的負載均衡及集群方案,希望大家拍磚.
?
補充:nginx在配置upstream時,有兩個參數(shù):
ip_hash(同一IP一直使用同一臺server服務)
weight(server的使用權重,數(shù)值越大,nginx分發(fā)的請求越多)
通過配合這兩個參數(shù),能粗糙地解決session共享的問題。
對于一些不是太依賴session的應用,或者只有用戶登錄時保存,那么我認為可以用Cookies代替。
即使真的要Session共享,我認為手動寫代碼保存到Memcached比為Tomcat加插件好,這樣能獲得更好的可控性。