在《高可用筆記(1)nginx》中已經使用過nginx反向代理tomcat的http服務,本文将介紹如何用nginx+tomcat+redis的組合實作負載均衡。
多個tomcat的部署的web應用怎麼實作統一出口?
答:用nginx代理多個tomcat,可以根據實際情況設定不同的權重weight。
多個tomcat的session共享問題怎麼解決?
答:将session的資料儲存到同一個redis資料庫中。将會用到tomcat-redis-session-manager插件。
host1 192.168.30.1 (redis/master, nginx, tomcat)
host2 192.168.30.2 (redis/slave, tomcat)
host3 192.168.30.3 (redis/slave, tomcat)
經過前面兩個筆記,host1的redis、nginx和tomcat均已安裝好,host2和host3的redis也已經安裝好。
還需要在host2和host3安裝tomcat:
拷貝host1的hellonginx項目到host2和host3的相應目錄,稍作修改:
修改host1的配置檔案/etc/nginx/conf.d/http_proxy.conf:
第一次:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2QTMxQzNmVWOjZ2NyUDN1QGM3EmZiJTNhVTZ4UWN1UjMhFDZmFTOm9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
第二次:
第三次:
第四次:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2QTMxQzNmVWOjZ2NyUDN1QGM3EmZiJTNhVTZ4UWN1UjMhFDZmFTOm9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
......
如果host2當機了,那麼第一次是host1,第二次是host3,第三次又是host1。
顯然host1是不能當機的,整個環境的高可用還必須借助keepalived+vip,後面的筆記會講到。
redis的高可用在上一個筆記中已經部署好了,在這裡也僅僅是儲存session的作用,就不在贅述了。
那麼如何将tomcat的session儲存到redis中呢?
該tomcat-redis-session-manager出場了。
commons-pool2-2.4.2.jar
jedis-2.9.0.jar
tomcat-redis-session-manager-2.0.0.jar
重新開機三個tomcat,完成!
注意:
這裡使用的tomcat-redis-session-manager是v2.0.0,配合的另外兩個jar是commons-pool2-2.4.2和jedis-2.9.0的。這個版本支援redis-sentinels配置。
小于v2.0.0版本的tomcat-redis-session-manager需要配合commons-pool-1.x和jedis-2.1.0。并且不支援redis-sentinels,隻能配置單個redis的host和ip。
附件是上面三個jar包。