Tomcat 負載均衡 及Session共享
原文:https://www.sunjianhua.cn/archives/tomcat-high-availability.html
一、安裝java環境
二、安裝tomcat(apache-tomcat-7.0.54)
三、安裝nginx(tengine-2.2.0)
四、安裝redis
五、安裝keepalived (keepalived-1.3.5)
a.下載
$ wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz -P /usr/local/src/
b.編譯安裝
$ cd /usr/local/src/ && tar -zxvf keepalived-1.3.5.tar.gz && cd keepalived-1.3.5 $ ./configure --prefix=/usr/local/keepalived $ make && make install
六、配置高可用叢集
a.配置nginx
#在10.231伺服器執行
$ vi /usr/local/nginx/conf/vhosts/tomcats.conf upstream sunjianhua10231 { server 192.168.10.232:8080 fail_timeout=10s max_fails=10 weight=5; server 192.168.10.231:8080 fail_timeout=10s max_fails=10 weight=5; } server { listen 99; server_name 192.168.10.231; charset utf-8; location / { proxy_pass http://sunjianhua10231/; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } #在10.232伺服器執行 $ vi /usr/local/nginx/conf/vhosts/tomcats.conf upstream sunjianhua10232 { server 192.168.10.232:8080 fail_timeout=10s max_fails=10 weight=5; server 192.168.10.231:8080 fail_timeout=10s max_fails=10 weight=5; } server { listen 99; server_name 192.168.10.232; charset utf-8; location / { proxy_pass http://sunjianhua10232/; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } b.配置keepalived #此處操作兩臺伺服器均執行 $ mkdir -p /etc/keepalived $ vi /etc/keepalived/nginx_check.sh #!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi $ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ $ cp keepalived/etc/init.d/keepalived /etc/init.d/ $ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ $ ln -s /usr/local/keepalived/sbin/keepalived /sbin/ $ ln -s /usr/local/sbin/keepalived /usr/sbin/ $ chkconfig keepalived on $ chmod +x /etc/keepalived/nginx_check.sh
#一個在10.231上 (設定為Master,rid10232為10.231伺服器的hostname)
$ vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id rid10232
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 mcast_src_ip 192.168.10.232 priority 50 advert_int 1 authentication { auth_type PASS auth_pass fuckyou } track_script { chk_nginx } virtual_ipaddress { 192.168.10.16 } }
#一個在10.232上 (設定為BACKUP,rid10232為10.231伺服器的hostname)
$ vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id rid10232
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 mcast_src_ip 192.168.10.231 priority 100 advert_int 1 authentication { auth_type PASS auth_pass fuckyou } track_script { chk_nginx } virtual_ipaddress { 192.168.10.16 } }
七、keepalived+nginx高可用測試
啟動兩個tomcat
啟動10.231中的tomcat:sh /usr/local/tomcat_web/bin/startup.sh
啟動10.232中的tomcat:sh /usr/local/tomcat_web/bin/startup.sh
啟動兩個nginx
啟動: /usr/local/nginx/sbin/nginx
關閉:/usr/local/nginx/sbin/nginx -s stop
重啟:/usr/local/nginx/sbin/nginx -s reload
啟動兩個keepalived
啟動:service keepalived start
關閉:service keepalived stop
重啟:service keepalived restart
Ps:注意防火牆問題
訪問vip:http://192.168.10.16:99
訪問 nginx1:http://192.168.10.232:99
訪問 nginx2:http://192.168.10.231:99
1.關閉nginx1 keepalived會將他重新啟動
2.關閉192.168.10.231中的keepalived(service keepalived stop),該節點的網路介面中的vip
將會消失,此時vip已經漂移到了192.168.10.232,在通過vip訪問nginx叢集,訪問到的也是192.168.10.232了
八、Session共享
1.方案一:容器擴充套件session共享
上傳3個jar到/usr/local/tomcat_web/lib/
b.在/usr/local/tomcat_web/conf/context.xml中加入(注意ip,埠,密碼)
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.20.250" port="6379" password="redis1234" database="0" maxInactiveInterval="60" />
2.方案二:Spring Session 叢集
a.加入maven依賴