1. 程式人生 > >Apache + Tomcat做負載均衡的幾種方式

Apache + Tomcat做負載均衡的幾種方式

原文地址:

首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行連線。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的埠是 8080,裝好 tomcat 後通過 8080 埠可以直接使用 Tomcat 所執行的應用程式,你也可以將該埠改為 80。

既然 Tomcat 本身已經可以提供這樣的服務,我們為什麼還要引入 Apache 或者其他的一些專門的 HTTP 伺服器呢?原因有下面幾個:

1. 提升對靜態檔案的處理效能

2. 利用 Web 伺服器來做負載均衡以及容錯

3. 無縫的升級應用程式

這三點對一個 web 網站來說是非常之重要的,我們希望我們的網站不僅是速度快,而且要穩定,不能因為某個 Tomcat 宕機或者是升級程式導致使用者訪問不了,而能完成這幾個功能的、最好的 HTTP 伺服器也就只有 apache 的 http server 了,它跟 tomcat 的結合是最緊密和可靠的。

接下來我們介紹三種方法將 apache 和 tomcat 整合在一起。

JK

這是最常見的方式,你可以在網上找到很多關於配置JK的網頁,當然最全的還是其官方所提供的文件。JK 本身有兩個版本分別是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已經廢棄了,以後不再有新版本的推出了,所以建議你採用版本 1。

JK 是通過 AJP 協議與 Tomcat 伺服器進行通訊的,Tomcat 預設的 AJP Connector 的埠是 8009。JK 本身提供了一個監控以及管理的頁面 jkstatus,通過 jkstatus 可以監控 JK 目前的工作狀態以及對到 tomcat 的連線進行設定,如下圖所示:

圖 1:監控以及管理的頁面 jkstatus
圖 1:監控以及管理的頁面 jkstatus

在這個圖中我們可以看到當前JK配了兩個連線分別到 8109 和 8209 埠上,目前 s2 這個連線是停止狀態,而 s1 這個連線自上次重啟後已經處理了 47 萬多個請求,流量達到 6.2 個 G,最大的併發數有 13 等等。我們也可以利用 jkstatus 的管理功能來切換 JK 到不同的 Tomcat 上,例如將 s2 啟用,並停用 s1,這個在更新應用程式的時候非常有用,而且整個切換過程對使用者來說是透明的,也就達到了無縫升級的目的。關於 JK 的配置文章網上已經非常多了,這裡我們不再詳細的介紹整個配置過程,但我要講一下配置的思路,只要明白了配置的思路,JK 就是一個非常靈活的元件。

JK 的配置最關鍵的有三個檔案,分別是

httpd.conf
Apache 伺服器的配置檔案,用來載入 JK 模組以及指定 JK 配置檔案資訊

workers.properties
到 Tomcat 伺服器的連線定義檔案

uriworkermap.properties
URI 對映檔案,用來指定哪些 URL 由 Tomcat 處理,你也可以直接在 httpd.conf 中配置這些 URI,但是獨立這些配置的好處是 JK 模組會定期更新該檔案的內容,使得我們修改配置的時候無需重新啟動 Apache 伺服器。

其中第二、三個配置檔名都可以自定義。下面是一個典型的 httpd.conf 對 JK 的配置

# (httpd.conf)
# 載入 mod_jk 模組
LoadModule jk_module modules/mod_jk.so

#
# Configure mod_jk
#

JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn

接下來我們在 Apache 的 conf 目錄下新建兩個檔案分別是 workers.properties、uriworkermap.properties。這兩個檔案的內容大概如下

#
# workers.properties
#


# list the workers by name

worker.list=DLOG4J, status

# localhost server 1
# ------------------------
worker.s1.port=8109
worker.s1.host=localhost
worker.s1.type=ajp13

# localhost server 2
# ------------------------
worker.s2.port=8209
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.stopped=1

worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balanced_workers=s1, s2
worker.DLOG4J.sticky_session=1

worker.status.type=status

以上的 workers.properties 配置就是我們前面那個螢幕抓圖的頁面所用的配置。首先我們配置了兩個型別為 ajp13 的 worker 分別是 s1 和 s2,它們指向同一臺伺服器上執行在兩個不同埠 8109 和 8209 的 Tomcat 上。接下來我們配置了一個型別為 lb(也就是負載均衡的意思)的 worker,它的名字是 DLOG4J,這是一個邏輯的 worker,它用來管理前面配置的兩個物理連線 s1 和 s2。最後還配置了一個型別為 status 的 worker,這是用來監控 JK 本身的模組。有了這三個 worker 還不夠,我們還需要告訴 JK,哪些 worker 是可用的,所以就有worker.list = DLOG4J, status這行配置。

接下來便是 URI 的對映配置了,我們需要指定哪些連結是由 Tomcat 處理的,哪些是由 Apache 直接處理的,看看下面這個檔案你就能明白其中配置的意義

/*=DLOG4J
/jkstatus=status

!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J

相信你已經明白了一大半了:所有的請求都由 DLOG4J 這個 worker 進行處理,但是有幾個例外,/jkstatus 請求由 status 這個 worker 處理。另外這個配置中每一行資料前面的感嘆號是什麼意思呢?感嘆號表示接下來的 URI 不要由 JK 進行處理,也就是 Apache 直接處理所有的圖片、css 檔案、js 檔案以及靜態 html 文字檔案。

通過對 workers.properties 和 uriworkermap.properties 的配置,可以有各種各樣的組合來滿足我們前面提出對一個 web 網站的要求。您不妨動手試試!

http_proxy

這是利用 Apache 自帶的 mod_proxy 模組使用代理技術來連線 Tomcat。在配置之前請確保是否使用的是 2.2.x 版本的 Apache 伺服器。因為 2.2.x 版本對這個模組進行了重寫,大大的增強了其功能和穩定性。

http_proxy 模式是基於 HTTP 協議的代理,因此它要求 Tomcat 必須提供 HTTP 服務,也就是說必須啟用 Tomcat 的 HTTP Connector。一個最簡單的配置如下

ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / http://localhost:8080/

在這個配置中,我們把所有 http://localhost 的請求代理到 http://localhost:8080/ ,這也就是 Tomcat 的訪問地址,除了 images、css、js 幾個目錄除外。我們同樣可以利用 mod_proxy 來做負載均衡,再看看下面這個配置

ProxyPass /images !
ProxyPass /css ! 
ProxyPass /js !

ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember http://server1:8080/
BalancerMember http://server2:8080/
BalancerMember http://server3:8080/
</Proxy>

配置比 JK 簡單多了,而且它也可以通過一個頁面來監控叢集執行的狀態,並做一些簡單的維護設定。

圖 2:監控叢集執行狀態
圖 2:監控叢集執行狀態

ajp_proxy

ajp_proxy 連線方式其實跟 http_proxy 方式一樣,都是由 mod_proxy 所提供的功能。配置也是一樣,只需要把 http:// 換成 ajp:// ,同時連線的是 Tomcat 的 AJP Connector 所在的埠。上面例子的配置可以改為:

ProxyPass /images !
ProxyPass /css ! 
ProxyPass /js !

ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember ajp://server1:8080/
BalancerMember ajp://server2:8080/
BalancerMember ajp://server3:8080/
</Proxy>

採用 proxy 的連線方式,需要在 Apache 上載入所需的模組,mod_proxy 相關的模組有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so, 其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是採用 http_proxy 方式則需要載入 mod_proxy.so 和 mod_proxy_http.so;如果是 ajp_proxy 則需要載入 mod_proxy.so 和 mod_proxy_ajp.so這兩個模組。


相關推薦

Apache + Tomcat負載均衡方式

原文地址: 首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行連線。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的埠是 8080,裝好 tomcat 後通過 8080 埠可以直接使用 Tomcat 所執行的應用程式,你也可以將該埠

ApacheTomcat 配置負載均衡(mod-proxy方式)-無session共享、無粘性session

轉:https://blog.csdn.net/wangjunjun2008/article/details/38268483 mod-proxy方式實現負載均衡是利用了Apache 2.x版本自帶的mod_proxy模組使用代理技術來連線Tomcat; http_proxy模式基於HTTP協議

ApacheTomcat 配置負載均衡(mod-proxy方式)

mod-proxy方式實現負載均衡是利用了Apache 2.x版本自帶的mod_proxy模組使用代理技術來連線Tomcat; http_proxy模式基於HTTP協議,要求Tomcat提供HTTP服務,也就是必須啟用Tomcat的HTTP Connector; ajp_p

apache+tomcat 搭建負載均衡系統

apache tomcat 負載均衡 apache+tomcat+mod_jk 搭建負載均衡系統。0.os系統采用centos6.8 x64 2.6.32-642.el6.x86_641.首先安裝好jdk環境本次采用jdk-8u111-linux-x64.gz jdk和jre的安裝目錄要不同,否

Nginx+Tomcat負載均衡時一臺伺服器宕機實現自動切換

思路:有兩種方式。 第一種:設定一臺伺服器為備機,只有當訪問的伺服器異常時才會訪問它; 第二種:設定伺服器轉發請求超時時間。 一、設定備機: 在安裝目錄下(例E:\nginx-1.14.0\conf)開啟nginx.conf修改 upstream netitcast.com {

tomcat專案部署的方式

1.無需路徑指向部署 1.1. 把專案打成war包放到webapps目錄下。 1.2.在bin目錄下執行命令 startup.bat 啟動專案。(在bin目錄裡按 shift+右鍵 即可調出命令框。關閉專案 shutdown.bat)   2.server.xml 部署

Tomcat執行PHP的方式

環境:作業系統:IBM aix5.3(當然linux環境和windows下肯定是沒問題的)1 執行php當然首選apache這裡就不講apache方式了,可見於http://www.blogjava.net/freeman1984/archive/2011/06/10/352043.html,但是在aix

Nginx:實現負載均衡方式

要理解負載均衡,必須先搞清楚正向代理和反向代理。 注: 正向代理,代理的是使用者。 反向代理,代理的是伺服器 什麼是負載均衡 當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗

【Nginx】實現負載均衡方式

要理解負載均衡,必須先搞清楚正向代理和反向代理。 正向代理與反向代理【總結】 注: 正向代理,代理的是使用者。 反向代理,代理的是伺服器 什麼是負載均衡 當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰

Nginx如何實現負載均衡,Nginx負載均衡方式

大家好,我是IT修真院武漢分院第15期學員,一枚正直善良的JAVA程式設計師。今天給大家分享一下,修真院官網JAVA任務6中需要使用的Nginx負載均衡1.背景介紹在網站創立初期,我們一般都使用單臺機器對臺提供集中式服務,但是隨著業務量越來越大,無論是效能上還是穩定性上都有了

nginx 負載均衡方式

負載均衡機制 nginx提供如下幾種負載均衡機制(或方式): 迴圈機制 – 迴圈分發對應用伺服器的請求 最少連線機制 – 將請求傳送給連線數最少的伺服器 ip-hash機制 – 哈西函式用於確定請求被配那個伺服器(基於客戶端IP地址) 預設的負載均

NGINX負載均衡分發請求的方式

1、輪詢(預設)每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。 2、weight指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。 3、i

Nginx 負載均衡輪詢策略

一、nginx的upstream目前支援負載均衡方式的分配 1、RR(預設) 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。 例如:  upstream tomcats {  server 10.1.1.107:88 max_fails

Nginx負載均衡輪詢策略

叢集環境為了解決單點無法支撐高併發的情況,叢集採用多臺伺服器提供服務,一般在叢集中使用nginx 將來自客戶端的請求轉發給伺服器端 nginx負載均衡可用提高網站的吞吐量,緩解單臺伺服器的壓力。 一. Nginx是什麼 Nginx是一個開源且高效能、可靠的HTTP中介軟體、代理服務 1. IO多路複用epol

即時通信常見的方式,此處只學習記錄

維護 時間 最簡 安裝 記錄 htm websocket 雙向 new 1. 輪詢 利用ajax每隔一段時間就請求一次服務器,服務器返回數據。 優點:最簡單的解決方案 缺點:對服務器壓力很大,浪費帶寬 2. 長輪詢 利用ajax請求服務器,當有數據變化

nginx負載均衡 tomcat獲得客戶端真實ip

需要 項目 參考 real nginx代理 x-real-ip 發現 百度 通過 因項目需要做tomcat2臺機器的負載均衡,配置好負載環境後,發現tomcat的日誌一律是我前置nginx代理服務器的ip 通過百度教材發現需要修改nginx的配置文件,修改代理頭信息,傳遞

Linux 下 tomcat基於nginx負載均衡

tomcat 負載 測試目的:在一臺裝有nginx服務器上訪問nginx這臺的ip地址,刷新一次就會顯示後端三臺不同的tomcat服務器的測試頁。測試環境:三臺centos 6.8 一臺 centos 7.3軟件版本: nginx 1.12.1

生產環境使用nginx負載均衡配置的五策略

寫入 8.0 pass 其它 所有 highlight ups ron debug nginx的upstream目前支持5種方式的分配1.輪詢(默認) 每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。 2.weight指定輪詢幾率,w

tomcat的虛擬目錄對映常用的方式

我們在專案部署的時候,可以採用多種方式,接下來我們將在實際中比較常用的幾種方式總結如下。 1.可以直接將我們的專案丟到tomcat的webapps目錄下,這樣當tomcat重啟的時候,我們就可以訪問到專案中的頁面了 舉例: ①明確了專案要提供外界訪問的名稱為:J

Tomcat設定session超時的方式

Tomcat的會話超時可以在多個級別上設定:tomcat例項級別、Web應用級別、servlet級別以及執行時Context程式碼級別。 較低級別的設定會覆蓋較高級別的設定。 Tomcat可以在以下幾個地方設定session超時: 1 Web容器級別 在conf/web.xml中 Xml程式