1. 程式人生 > >用jk整合Apache和tomcat實現負載均衡

用jk整合Apache和tomcat實現負載均衡

最近剛看完一些關於如何用jk整合Apachetomcat的資料,為了防止自己忘記,把它們在這裡都寫下來。部分內容摘抄於網路。

首先下載tomcat, apachejk

1. 下載, 安裝於“C:/Program Files/Apache Software Foundation/Apache2.2

2. 下載放在“Apache Software Foundation/Apache2.2/modules and rename it to mod_jk.so

JK 是通過 AJP 協議與 Tomcat 務器進行通訊的,Tomcat 預設的 AJP Connector 的埠是 8009

<tomcat>/conf/server.xml:

<!-- Define an AJP 1.3 Connector on port 8009 -->

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

JK 本身提供了一個監控以及管理的頁面 jkstatus,通過 jkstatus 可以監控 JK 目前的工作狀態以及對到 tomcat 的連線進行設定,如下圖所示:

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,通過JkMount,比如:

JkMount /*.do route1

JkUnMount /output/*loadbalancer (如果有不想轉發目錄,則用JkUnMount)

#關掉主機Lookup,如果為on,很影響效能,可以有10多秒鐘的延遲。

HostnameLookups Off

但是獨立這些配置的好處是 JK 模組會定期更新該檔案的內容,使得我們修改配置的時候無需重新啟動 Apache 伺服器。

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

Apache Software Foundation/Apache2.2/conf/httpd.conf

# (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.propertiesuriworkermap.properties。這兩個檔案的內容大概如下

#

# workers.properties

#

# list the workers by name

worker.list=route1, status

# localhost server 1

# ------------------------

worker.s1.port=8009#ajp13 埠號,在tomcatserver.xml配置,預設8009

worker.s1.host=localhost#tomcat的主機地址,如不為本機,請填寫ip地址

worker.s1.type=ajp13

worker.s1.lbfactor=1#server的加權比重,值越高,分得的請求越多

# localhost server 2

# ------------------------

worker.s2.port=8109

worker.s2.host=localhost

worker.s2.type=ajp13

worker.s2.lbfactor=1

worker.s2.stopped=1

worker.route1.type=lb

worker.retries=3

worker.route1.balanced_workers=s1, s2

worker.route1.sticky_session=1

worker.status.type=status

具體的引數含義如下:

Aworker.list=route1, status

設定工作的負載平衡器,各Tomcat節點不能加入此列表。Bworker. s1.lbfactor=1

負載平衡的權重比,如果此權重比越大,則分配到此節點的請求越多,如以上兩個節點的權重比為1:1,則為平均分配。

Cworker.route1.balanced_workers=s1, s2

指定此負載平衡器負責的Tomcat應用節點。Dworker.loadbalancer.sticky_session=true

   
此處指定叢集是否需要會話複製,如果設為true(或1),則表明為會話粘性,不進行會話複製,當某使用者的請求第一次分發到哪臺Tomcat後,後繼的請求會一直分發到此Tomcat伺服器上處理。這樣設的壞處是,當相應的tomcat掛掉,那麼session就會丟失如果設為false,則表明需求會話複製。Eworker.loadbalancer.sticky_session_force=true

   
如果上面的sticky_session設為true時,建議此處也設為true,此引數表明如果叢集中某臺Tomcat伺服器在多次請求沒有響應後,是否將當前的請求,轉發到其它Tomcat伺服器上處理;此引數在sticky_session=true時,影響比較大,會導致轉發到其它Tomcat 伺服器上的請求,找不到原來的session,所以如果此時請求中有讀取session中某些資訊的話,就會導致應用的null異常。

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

/*=route1

/jkstatus=status

!/*.gif=route1

!/*.jpg=route1

!/*.png=route1

!/*.css=route1

!/*.js=route1

!/*.htm=route1

!/*.html=route1

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

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

Apache模組提供了DEFLATE輸出過濾器,允許伺服器在將輸出內容傳送到客戶端以前進行壓縮,以節約頻寬

LoadModule deflate_module modules/mod_deflate.so

<Location />

SetOutputFilter DEFLATE

</Location>

壓縮是由DEFLATE過濾器實現的。下面的指令會對其所在容器中的文件啟用壓縮:

SetOutputFilter DEFLATE

一些流行的瀏覽器不能正確處理所有壓縮內容,因此你可能需要將gzip-only-text/html標記設為"1"來僅僅允許壓縮html檔案(見下面)。如果你設定了"1"以外的任何值,都將被忽略。

如果你想將壓縮限制在幾種特定的MIME型別上,可以使用指令。下面的例子僅僅允許對html文件進行壓縮:

<Directory "/your-server-root/manual">
AddOutputFilterByType DEFLATE text/html
</Directory>

對於那些不能正確處理所有壓縮內容的瀏覽器,可以使用指令針對特定的瀏覽器設定no-gzip標記以取消壓縮。為了取得更好的效果,你可以將no-gzipgzip-only-text/html配合使用。在這種情況下,下面的設定將會覆蓋上面的設定。看看從配置示例中摘錄的片斷:

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4/.0[678] no-gzip
BrowserMatch /bMSIE !no-gzip !gzip-only-text/html

第一條指令表示如果User-Agent字串表示它是一個Navigator 4.x的瀏覽器,這種瀏覽器不能正確處理除text/html之外的所有型別。而4.06, 4.07, 4.08版的Navigator完全不能處理任何壓縮內容,因此第二條指令對這些瀏覽器完全禁用壓縮。

第三個指令修正了上面兩條對瀏覽器的推測,因為微軟的IE也將它自己標識成"Mozilla/4"但是它實際上能夠處理所有的壓縮內容。因此又在User-Agent頭中額外匹配了字串"MSIE"("/b"表示"單詞邊界"),並且取消了前面的限制。

注意

force-gzip環境變數將會忽略瀏覽器的"accept-encoding",始終傳送經過壓縮的內容

相關推薦

jk整合Apachetomcat實現負載均衡

最近剛看完一些關於如何用jk整合Apache和tomcat的資料,為了防止自己忘記,把它們在這裡都寫下來。部分內容摘抄於網路。 首先下載tomcat, apache和jk。 1. 下載, 安裝於“C:/Program Files/Apache Software Foundat

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

結合apachetomcat實現多域名、多埠繫結

1、本機測試的話,要先配置主機頭系統:windowsxp     C:\WINDOWS\system32\drivers\etc\hosts檔案 新增     127.0.0.1       www.abc.com     127.0.0.1       www.efg.c

Ubuntu整合ApacheTomcat

前兩篇已經寫了Apache和Tomcat的安裝,本文主要探討Apache和Tomcat的整合。 〇、為什麼要整合 Tomcat也有webserver的功能,但一般只用作除錯,其強項還是在於處理動態網頁,靜態網頁不如Apache這種專業的webserver。 一、整合是什

apachetomcat有什麼不同,為什麼要整合apache tomcat

轉自:[url]http://zhidao.baidu.com/question/94817329.html[/url]1. Apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件。2. Apache和Tomc

整合整合ApacheTomcat

Apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件。 Apache和Tomcat都可以做為獨立的web伺服器來執行,但是Apache不能解釋java程式(jsp,serverlet)。 Apache和T

nginx+tomcat實現負載均衡以及session共享(linux centos7環境)

processes 解壓 smo eve cti 下載 gen cli -c 一、nginx的安裝 1.準備三份tomcat tomcat1 設置端口 8080 tomcat2 設置端口 8081 tomcat3 設置端口 8082 2. 下載nginx 3. 解壓到/ho

Nginx 服務器 之Nginx與tomcat實現負載均衡

nobody 服務器 listen server events 本文講解我們如何使用Nginx做反向帶服務器,實現nginx與tomcat服務器集群做負載均衡。一、nginx與tomcat實現負載均衡1、在/usr/local/ngnix/conf 創建文件 nginx-tomcat.

nginx 配置tomcat 實現負載均衡

events key 配置tomcat type files 準備 mys all quest 環境:準備三臺機械: 兩臺安裝tomcat 一臺安裝nginx;安裝步驟省略;tomcat一臺的IP:http://192.168.195.132:8080另一臺tomcat一臺

Nginx+Tomcat實現負載均衡及動靜分離

動靜 webapps ado art index.jsp mod connector mct 圖片 內部模擬兩臺服務器taoba1和taobao2 當訪問 www.taobao.com 時候會依據負載均衡策略來進行訪問 拷貝兩份tomcat文件,分別命名為taobao

專案部署、收集靜態檔案、nginxuwsgi實現負載均衡

專案部署 1)靜態檔案伺服器 ​ 開發階段: live-server ​ 部署階段: nginx ​ 域名: www.meiduo.site Django專案靜態檔案收集: # 設定setting配置檔案 STATIC_ROOT = '指定收集靜態檔案的儲存目錄'

springboot專案Nginx+Tomcat實現負載均衡結合Redis實現session共享問題

對於分散式使用Nginx+Tomcat實現負載均衡,當同一個使用者登入後,再次訪問可能分發到不同的服務,這樣我們就取不到之前登入session,出現未登入現象。所以我們必須解決共享session問題。  方式一:儲存在資料庫中 , 使用者登入時,把session資訊儲存在資

Nginx+Redis+Tomcat實現負載均衡專案session共享

                                <div class="article-copyright">                     版權宣告:本文為博主原創文章,未經博主允許不得轉載。                    h

Nginx +tomcat 實現負載均衡叢集

一、 工具   nginx-1.8.0   apache-tomcat-6.0.33 二、 目標 實現高效能負載均衡的Tomcat叢集: 三、 步驟 1、首先下載Nginx,要下載穩定版: 2、然後解壓兩個Tomcat,分別命名為apache-tomcat-6.0.33-1和

Ribbon、FeignEureka實現負載均衡

現有兩個SpringBoot應用,應用 A和應用B:應用A通過Feign遠端呼叫應用B,但如果應用B單個應用無法支撐應用A的大量請求,則可如下實現應用B的多例項。1.應用B多個例項都註冊到同一個Eureka,且所有例項的配置檔案中的:spring.application.na

nginx+tomcat實現負載均衡以及雙機熱備(tomcat宕機導致客戶端無法訪問)

首先,在這裡分享一個java技術交流群,純粹技術交流,拒絕廣告,歡迎各位進群交流。QQ群:817997079 大家都知道nginx可以代理多臺伺服器(以tomcat為例),那麼當被nginx代理的tomcat伺服器宕機時,我們怎麼保證客戶端能繼續訪問系統?接下來就說一下ng

Nginx+Tomcat實現負載均衡小demo

一、搭建Tomcat服務         下載安裝JDK和Tomcat就不說了,太簡單了。由於是win7單機環境測試,啟動多個Tomcat服務可以通過在server.xml配置檔案中修改埠實現。準備兩個Tomcat,比如使用兩個不同版本的Tomcat(相同版本可以更改下檔名

Linux中Apache+Tomcat+JK實現負載均衡群集的完整過程

個人原創,一個字一個字地碼的,尊重版權,轉載請註明出處! 最近在開發的專案需要承受很高的併發量。綜合各種情況,決定使用Apache+Tomcat+JK的方式實現負載均衡,並且作為一個統一的服務還要實現群集(同步Session)。 在網上找了很多資料,都是零零散散的,沒有一個完整的過程。通過幾天的努力,完

配置了APACHETOMCAT整合後,firefox中的window.parent.document不能(http_proxy的埠問題)

    我在linux上使用http_proxy的方式配置了apache跟tomcat的負載均衡,後來發現在firefox中window.parent.document.getElementById("menu").src="content/contentNav.jsp";沒