由於公司新業務突然上來了,單個Tomcat實例已經不能滿足業務發展的需要了,只能通過搭建集群來解決問題了。所以就出現了下面的內容:
1.Redis保存Session信息
為了保存Session信息在集群中可用,所以session信息不能保存Tomcat中,因為如果是這樣的話要想實現Session信息的共享就必須通過Session復制的方式來同步Tomcat之間的Session信息,這樣比較費力費力而且性能消耗比較大,所以選擇通過redis來實現Session信息的保存和共享。
1.1Redis的安裝
教程很多,不做贅述。(http://www.redis.cn/)
1.2Tomcat 使用Redis保存Session信息的配置修改
下面只考慮一個Redis的情況,如果需要配置Redis的主從和集群還需要其他處理。
1.2.1context.xml修改(位於conf目錄下面)
<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中倉庫中獲取到。
1.2.2server.xml修改(位於conf目錄下面)
修改服務監聽和關閉端口。
1.3所需要的相關Jar包文件(放在Tomcat下面的lib目錄中)
通過上面的Github地址可以知道,還需要tomcat-redis-session-manager、redis的客戶端操作工具jedis以及commons-pool2的支持,但是實際的操作過程中發現還需要commons-logging-1.2\commons-pool-1.6、tomcat-juli-7.0.69的支持。注意注意相應的版本信息問題,如果jedis的版本信息過高就會出錯,下面是我的相應的jar包列表。
2.Tomcat集群部署
2.1可以首先簡單測試一下上面的Tomcat信息是否完成了Session信息保存在Redis中。很簡單,寫一個頁面訪問成功后,打印出相應的Session信息,關閉Tomcat后重啟在此訪問,判斷Session信息是否一致即可,一致說明Session信息成功保存在了redis中,否則沒有
2.2將上面的tomcat復制多個即可,注意修改相應的服務端口號信息
3.Nginx
因為有多個Tomcat實例,為了是每一個實例都可以正常的對外服務,所以需要一個統一的請求處理入口,然后通過請求分發來實現對服務的處理,也就是負載均衡和轉發 。因為有些其他的特殊需求,要保證每一個服務和IP的關系,通過IP_HASH作為負載均衡的策略處理。
3.1Nginx的安裝(centos)
第一步:下載穩定版本的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)
3.2Nginx負責均衡的配置
3.2.1 找到Nginx的安裝路徑(默認):/usr/local/nginx
3.2.2 修改配置文件conf/nginx.conf
#設定負載均衡的服務器列表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.提供服務
4.1 啟動Redis服務
4.2放入服務逐個啟動Tomcat
4.3啟動Nginx服務
4.4可以正常提供服務了。
5.改進與說明
這只是提供了構建一個Tomcat集群的簡單的思路和實現,還有很多完善的地方,針對服務的高可用和穩定性還需要做很多的工作,以后會把服務慢慢的加上去。