初識TomCat之4——TomCat負載均衡及基於IP的Session sticky
當一個tomcat服務器性能遇到瓶頸時,通常的做法是將tomcat服務器橫向擴容,使用多臺tomcat服務器來響應用戶請求,但此時又引入了一個新問題,就是用戶每次請求都會隨機給他分配一個tomcat服務器,下面介紹如何實現tomcat實現負載均衡和會話綁定
二、實驗拓撲
本次實驗采用3臺主機,操作系統為centos 7.4,JDK版本為1.8,tomcat版本為8.5,拓撲如下圖所示:
當用戶請求指定的域名時,靜態內容由反代服務器自身響應,動態內容轉交後端tomcat服務器響應,為避免不必要障礙,關閉3臺主機的iptables和selinux。
三、配置Nginx作為反代服務器
1.配置後端tomcat服務器(以tomcat1為例)
(1)安裝JDK和tomcat(略)
(2)在tomcat配置文件conf/server.xml中,新增一個虛擬主機,主機名為“www.ark.com”,並指定主機位置和根目錄
(3)創建對應的目錄及主頁文件(略),啟動tomcat,測試訪問是否正常
(4)在tomcat2上做相同的配置
2.配置前端nginx服務器
(1)安裝nginx程序(略)
(2)在nginx的配置文件conf/nginx.conf中添加upstream段,並設置tomcat1和tomcat2為上遊服務器地址
(3)由於要實現動靜分離,所以在安裝目錄下的web目錄中提供一個主頁作為靜態頁面
(4)所有以.jsp或者.do結尾的請求都發往上遊服務器,由於上遊服務器的默認虛擬主機不是www.ark.com,所以要使用proxy_set_header配置項,啟用該配置項後,nginx再向上遊服務器傳遞請求時就會帶上請求首部,至此操作完成。
(5)此時請求www.ark.com時,靜態內容會由nginx自身響應
(6)而動態內容請求會以輪詢的方式傳遞到2個tomcat服務器上
(7)如果要實現會話綁定,只需要在upstream配置段啟用ip_hash選項,來自同一IP的請求就會始終被發往一個tomcat服務器
四、配置apache作為反代服務器
apache服務器實現動靜分離有一定的困難,但相對於nginx他又可以和tomcat之間以效率更高的ajp協議進行通訊,具體采用哪種方法根據業務需求選擇,繼續使用上個實驗的環境
1.配置apache負載均衡
(1)關閉前端服務器的nginx服務,安裝apache服務(略)
(2)找到conf/httpd.conf配置文件註銷根目錄
(3)在conf.d目錄下創建一個vhosts.conf配置文件,供虛擬主機使用,在配置文件中首先定義一個集群,將所有的請求都發給後端服務器,關鍵要開啟ProxPreserveHost選項,該選項可以將用戶請求的主機名傳遞至後端,類似nginx中的proxy_set_header,至此操作完成
(4)在使用IP地址(172.16.10.10)請求時,得到的是tomcat主頁
(5)而動態內容請求會以輪詢的方式傳遞到2個tomcat服務器上
(6)如果要使用ajp協議,無非是將proxy中的http協議與端口換成ajp協議和對應的端口號
2.apache會話綁定
(1)首先在tomcat服務器的Engine上設置jvmroute(此處以tomcat1為例)
(2)然後再到apache服務器的proxy配置段將設置的jvmroute名稱填寫進route選項,並開啟stickysession選項,重啟tomcat和apache服務器,會話已實現綁定,馬哥視頻中http協議需要添加set-cookie配置項才能實現session綁定,在測試中發現不添加該配置項也可以實現
(3)使用ajp協議也只需要將apache服務器上的http協議改為ajp協議即可
補充說明
apache啟用負載均衡功能是通過proxy_balancer_module子模塊實現的
該模塊有一個內置的管理界面,可以在線管理後端的負載策略
只需要在VirtualHost段中增加一個Location即可,且不要將對該Location的請求傳遞到後端
初識TomCat之4——TomCat負載均衡及基於IP的Session sticky