nginx反代httpd,實現三種tomcat代理模型至後端的tomcat服務器,會話綁定的三種方式
在這裏實現三種httpd的代理模式,proxy_http_module,proxy_ajp_module,以及mod_jk。並對後端tomcat主機實現負載均衡,session sticky,session cluster,session server操作。
IP配置:
前端nginx:
eno16777736 192.168.72.3
eno33554976 172.16.25.2
httpd調度器:
eno16777736 172.16.25.1
tomcatA:
eno16777736 172.16.25.101
tomcatB:
eno16777736 172.16.25.102
1.負載均衡+session sticky
①proxy_http_moudle
nginx反代:
只需要設置proxy_pass反代即可;
httpd配置:
在報文首部設置Cookie作為標記,當環境env路由改變後即通過ProxySet stickysession觸發,將會話保存
Proxy balancer://tcsrvs則是我們在httpd中設置的反代多臺服務器的組,相當於nginx中的upstream,
haproxy中的backend。兩臺主機的域名需要寫入到httpd調度器中的/etc/hosts中,否則無法正常解析域名。
route=tomcatA
route=tomcatB
需要我們在後端tomcat服務器的server.xml中的Engine中指定,如
tomcat服務器配置
安裝tomcat服務
在本地光盤中有tomcat的安裝包
#yum install -y tomcat tomcat-webapps tomcat-lib tomcat-admin-webapps tomcat-docs-webapps
自定義tomcat應用
如:
#mkdir -pv /testapp2/webapps/ROOT/{WEB-INF,lib,classes}
#vim /testapp2/webapps/ROOT/index.jsp (設置jsp頁面進行測試)
修改tomcat主配置文件server.xml讓其能夠通過指定域名訪問到我們設置的應用
訪問192.168.72.3
因為進行了session sticky所以一直訪問到的都是同一個
當我們將tomcatB的服務down掉後
這樣就實現了基於proxy_http_module的http模式
②基於proxy_ajp_module
ajp的配置於http的不同就在於對端口以及協議的不同。
需要修改httpd調度器的配置為:
最好將後端tomcat的關於http的connector註釋掉;
並修改Engine中的defaultHost指向我們設置好的域名
訪問結果如上。
③基於mod_jk
首先,需要在httpd調度器上編譯mod_jk,因為默認是不存在的,從網上鏡像站點上下載
tomcat-connectors-VERSION
#yun install -y "Development tools" "Server Platform Develop"
安裝編譯環境。
#yum install -y httpd-devel
#tar -xf tomcat-connectors-VERSION.tar.gz
#cd tomcat-connectors-VERSION/native
#./configure --with-apxs
#make -j 4 && make install
到此,mod_jk便編譯完成,可以通過/usr/lib64/httpd/modules/mod_jk進行查看
編寫mod_jk配置文件
在/etc/httpd/conf.d/jk_proxy_tomcat.conf中
LoadModule裝載模塊
JkWorkersFile用於設置任務配置信息
JkLogFile用於設置日誌文件
JkLogLevel用於設置日誌等級
JkMount到訪問到任何數據,都由tcsrvs這個組進行處理,該組設置在workers.properties任務文件中;
/etc/httpd/conf.d/workers.properties
任務文件當中需要設置組中所有tomcat服務器的信息,如host,type,port,lbfactor權重等,有多少個
tomcat服務器則設置多少組。
worker.tcsrvs.type設置為輪詢的方式。
worker.tcsrvs.balance_workers=tomcatA,tomcatB用於設置負載均衡的服務器列表
worker.tcsrvs.sticky_session=0表示不支持會話綁定,註意,該行不能省略,否則雖然不出錯,但其默認還是綁定;
若需要會話綁定則需要將0置1即可;
2.負載均衡+session server
對tomcat服務器進行負載均衡操作,使用的是httpd調度器的mod_jk形式,關於前端的nginx與httpd,配置同前面一般無二
在這裏就不進行細說了,主要是對後端兩臺tomcat服務器實現seession server,即將會話全部放在一臺服務器上,當tomcat
服務器需要時則從session server中取,這樣的話session server必須設置高可用,否則當session server掛掉後,便無法正常
提供服務。
導入session server實現所需要的jar包,下載如下jar文件至各tomcat節點的tomcat安裝目錄下的lib目錄中,其中的${version}
要換成你所需要的版本號,tc${6,7,8}要換成與tomcat版本相同的版本號。將這些jar包放置在/usr/share/java/tomcat中。
在tomcat主配置文件server.xml中設置Context別名,並在該Host上下文中添加session server配置段
Context上下文設置的訪問路徑path="/test",其應用保存在/testapp2/webapps中,所以需要我們手動進行配置
#mkdir -pv /testapp2/webapps/{lib,classes,WEB-INF}
#vim index.jsp (創建jsp文件)
將/etc/tomcat/web.xml復制到手動創建應用的WEB-INF中,並添加<distributable/>
memcachedNodes為session server的節點,有幾臺就設幾個節點,failoverNodes則是作為備用節點,當n2節點掛掉後
頂上去的。在這裏要說一下,session server是基於memcached實現的,所以必須先安裝memcached緩存。
設置jvmRoute,該標簽需同前面httpd中的一般無二;
使用8009端口的ajp協議進行訪問時,需要將8080端口的Connector上下文註釋掉。
到此一臺tomcat配置完成,只需要在另一臺主機處進行相同的設置即可
訪問結果:
訪問內容的會話ID以及,創建會話時間都相同。
3.負載均衡+session cluster
session cluster的實現,適用於多個tomcat服務器之間,相互備份對方的session,這樣
每臺tomccat的服務器中就擁有所有的session,這樣,即便一臺tomcat或多臺tomcat
down掉後,只要有一臺服務器正常工作,會話就將繼續保持,但如果所有的tomcat服
務器down掉就無法正常利用會話工作。
session cluster實現方式同session server差不多,不同在於對server.xml中的cluster集
群的上下文配置。
如:
需要進行修改的也就是前半段配置,Membership上下文用於設置cluster之間的組播通信地址,端口,
以及持續時間,超時時間等;
Receiver上下文則是用於設置cluster之間互相發送會話數據的IP地址,端口,時間等;需要將IP地址改
為當前服務器中可用的IP地址;
後半段配置無需變動。
將之前的session server相關配置註釋掉。
nginx反代httpd,實現三種tomcat代理模型至後端的tomcat服務器,會話綁定的三種方式