天天看點

高可用筆記(3)nginx+tomcat+redis首先來看負載均衡需要解決的2個問題準備測試環境nginx代理多個tomcattomcat的session共享

在《高可用筆記(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:

第一次:

高可用筆記(3)nginx+tomcat+redis首先來看負載均衡需要解決的2個問題準備測試環境nginx代理多個tomcattomcat的session共享

第二次:

高可用筆記(3)nginx+tomcat+redis首先來看負載均衡需要解決的2個問題準備測試環境nginx代理多個tomcattomcat的session共享

第三次:

高可用筆記(3)nginx+tomcat+redis首先來看負載均衡需要解決的2個問題準備測試環境nginx代理多個tomcattomcat的session共享

第四次:

高可用筆記(3)nginx+tomcat+redis首先來看負載均衡需要解決的2個問題準備測試環境nginx代理多個tomcattomcat的session共享

......

如果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包。