因爲公司新業務忽然上來了,單個Tomcat實例已經不能知足業務發展的須要了,只能經過搭建集羣來解決問題了。因此就出現了下面的內容:html
爲了保存Session信息在集羣中可用,因此session信息不能保存Tomcat中,由於若是是這樣的話要想實現Session信息的共享就必須經過Session複製的方式來同步Tomcat之間的Session信息,這樣比較費力費力並且性能消耗比較大,因此選擇經過redis來實現Session信息的保存和共享。nginx
教程不少,不作贅述。(http://www.redis.cn/)c++
下面只考慮一個Redis的狀況,若是須要配置Redis的主從和集羣還須要其餘處理。git
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> <Manager className="com.radiadesign.catalina.session.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60" />
上面的配置文件中className 須要和tomcat-redis-session-manager包的路徑信息保持一致,這個能夠jar包能夠經過Github獲取(https://github.com/jcoleman/tomcat-redis-session-manager),本身打包獲取,沒有從MAVEN中倉庫中獲取到。github
修改服務監聽和關閉端口。redis
經過上面的Github地址能夠知道,還須要tomcat-redis-session-manager、redis的客戶端操做工具jedis以及commons-pool2的支持,可是實際的操做過程當中發現還須要commons-logging-1.2\commons-pool-1.六、tomcat-juli-7.0.69的支持。注意注意相應的版本信息問題,若是jedis的版本信息太高就會出錯,下面是個人相應的jar包列表。centos
2.Tomcat集羣部署tomcat
2.1能夠首先簡單測試一下上面的Tomcat信息是否完成了Session信息保存在Redis中。很簡單,寫一個頁面訪問成功後,打印出相應的Session信息,關閉Tomcat後重啓在此訪問,判斷Session信息是否一致便可,一致說明Session信息成功保存在了redis中,不然沒有服務器
2.2將上面的tomcat複製多個便可,注意修改相應的服務端口號信息session
由於有多個Tomcat實例,爲了是每個實例均可以正常的對外服務,因此須要一個統一的請求處理入口,而後經過請求分發來實現對服務的處理,也就是負載均衡和轉發 。由於有些其餘的特殊需求,要保證每個服務和IP的關係,經過IP_HASH做爲負載均衡的策略處理。
第一步:下載穩定版本的Nginx,解壓
第二步:yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
第三步:進入解壓目錄 ./configure --with-http_ssl_module
第四步: make & make install
能夠參考文章(http://www.cnblogs.com/skynet/p/4146083.html)
#設定負載均衡的服務器列表ip_hash
upstream backend {
server 127.0.0.1:8080 ;
server 127.0.0.1:8081 ;
server 127.0.0.1:8082 ;
server 127.0.0.1:8083 ;
ip_hash;
}
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
}
關於nginx的配置文件的使用在這裏不作說明。第一個配置須要指明負載發服務器地址和使用負載均衡策略。
4.1 啓動Redis服務
4.2放入服務逐個啓動Tomcat
4.3啓動Nginx服務
4.4能夠正常提供服務了。
這只是提供了構建一個Tomcat集羣的簡單的思路和實現,還有不少完善的地方,針對服務的高可用和穩定性還須要作不少的工做,之後會把服務慢慢的加上去。