1. 程式人生 > >nginx反代httpd,實現三種tomcat代理模型至後端的tomcat服務器,會話綁定的三種方式

nginx反代httpd,實現三種tomcat代理模型至後端的tomcat服務器,會話綁定的三種方式

httpmod_jkajp 會話綁定

構建tomcat集群,實現前端一臺nginx反代,到後端的apache服務器,由apache負責向後端的tomcat服務器進行資源調度,這樣的模式比直接用nginx反代到後端主機,tomcat服務器所受到的壓力會更小,服務將會更加穩定,這樣的模式是經過實踐檢驗出來的。如果nginx直接調度到後端tomcat服務器,則只支持http和https,而不支持ajp,http與https模式的設定,可以讓外來客戶直接訪問tomcat服務器,而不需要經過我們設置好的前端nginx的端口,這樣是十分不安全的做法,所以常用的模式都是ajp以及mod_jk,這種模式就可以阻止外來用戶直接訪問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服務器,會話綁定的三種方式