1. 程式人生 > >Tomcat 負載均衡 及Session共享

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/
tomcat_session.png

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依賴
spring-session1.png

b.加入spring session配置在web.xml中
spring-session2.png

c.加入主從複製及session配置檔案
spring-session6.png
spring-session3.png
spring-session4.png
spring-session5.png