使用Apache對Tomcat進行負載均衡

翻譯:瘋狂的技術宅
原文標題:Load balancing tomcat with Apache
原文連接:http://programmergate.com/loa...
本文首發微信公衆號:充實的腦洞apache

有時候咱們須要把本身的應用部署在多個Tomcat實例上,這種場景一般是在使用大量內存進行存儲,而且擁有大量的活躍用戶時。使用多個實例的主要優勢是能夠把請求和負載分擔到多個節點上,以提供高可用性並加快服務請求。segmentfault

負載均衡是將客戶端請求分發到多個可用節點的過程,一般是經過接收請求的Web服務器將應用程序暴露給客戶端,並根據每一個節點的可用性和壓力將它們分發到配置好的應用程序服務器。 在本文中,咱們將介紹如何經過Apache Web服務器配置簡單的Tomcat負載均衡器。windows

clipboard.png

1. 安裝Tomcat實例

本教程在2臺不一樣的Windows機器上安裝2個Tomcat實例。一般能夠在同一臺機器上配置多個Tomcat實例,可是建議將其分別安裝在不一樣的機器上,以便將負載分配到2個物理內存而不是1個。瀏覽器

2. 下載並安裝Apache

這裏下載最新穩定的Apache版本,你能夠在其中一臺Tomcat機器上設置Apache,或者爲其單獨分配一臺機器。tomcat

clipboard.png

將下載的文件解壓縮到D:盤,並設置conf文件夾下httpd.conf文件中的SRVROOT變量:服務器

Define SRVROOT "D:\Apache24"

要安裝Apache,請以管理員身份運行cmd,把路徑切換到爲D:Apache24bin,執行如下命令:微信

httpd -k install

如今,Apache Web服務器已成功安裝在你的計算機上。負載均衡

要啓動Apache,請以管理員身份在D:Apache24bin路徑下運行如下命令:jvm

sc start Apache2.4

默認狀況下,Apache將在端口80上運行,若是要檢查它是否意境成功的啓動,能夠在你的瀏覽器上訪問localhost,將看到如下頁面:this

clipboard.png

3. 下載mod_jk模塊

這裏下載mod_jk模塊,這個插件負責Apache和tomcat之間的通訊。

clipboard.png

解壓縮mod_jk.zip文件並將 mod_jk.so 複製到 D:Apache24modules 中。

4. 配置Apache負載均衡

編輯D:\Apahe24\conf\http.conf 文件

  • 在LoadModule指令末尾添加如下內容:
LoadModule jk_module modules/mod_jk.so
  • 在文件結尾處添加如下內容:
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
 
JkMount /* loadbalancer
JkMount / loadbalancer

workers.properties

在conf目錄下建立workers.properties文件,此文件定義了要負載均衡的多個Tomcat實例以及負載均衡器。如下是worker.properties的內容:

# 定義負載均衡器,這裏的名稱是loadbalancer
worker.list=loadbalancer
 
# Define the properties of first tomcat worker named tomcat1
worker.tomcat1.port=8008
worker.tomcat1.host=<ip>
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
 
# 定義名爲tomcat1的第一個tomcat worker的屬性
worker.tomcat2.port=8009
worker.tomcat2.host=<ip>
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
 
# 定義負載均衡器及其管理的worker的屬性
workers which manage.
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1, tomcat2
  • worker.<workerName>.port: 定義tomcat實例運行的ajp端口。
  • worker.<workerName>.host: Tomcat機器的IP地址或主機名。
  • worker.<workerName>.type: worker的類型,在這個例子中咱們使用2種類型的worker

    • ajp13: 該worker直接與tomcat實例通訊。
    • lb: 一個負載均衡器worker,負責管理和負載均衡多個ajp13 worker。
  • worker.<workerName>.lbfactor: 定義Tomcat節點的強度,在將請求轉發給Tomcat節點時,負載均衡器worker將參考這個值。
  • worker.loadbalancer.balance_workers: 定義要由負載均衡器管理的 ajp13 worker 的名稱。

5. 配置Tomcat實例

修改每一個Tomcat實例的啓動配置,以匹配Apache中相應的工做屬性。

將tomcat1的TOMCAT_HOME/conf/server.xml文件編輯爲下面的內容:

<!-- Define the http port of tomcat -->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" 
redirectPort="8443" URIEncoding = "utf-8"/>
 
<!-- Define the ajp port of tomcat, this port should match the one 
in workers.properties -->
<Connector port="8008" protocol="AJP/1.3" redirectPort="8443"   
URIEncoding = "utf-8"/>
 
<!-- Define the jvm routing of tomcat, this routes to tomcat1 -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

將tomcat2的TOMCAT_HOME/conf/server.xml文件編輯爲下面的內容:

<!-- Define the http port of tomcat -->
<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" 
redirectPort="8143" URIEncoding = "utf-8"/>
 
<!-- Define the ajp port of tomcat, this port should match the one 
in workers.properties -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8143"   
URIEncoding = "utf-8"/>
 
<!-- Define the jvm routing of tomcat, this routes to tomcat2 -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

重啓tomcat節點和Apache服務器後,會成功創建負載均衡,Apache能夠把請求轉發到在Tomcat1和Tomcat2上

PS: 該應用程序經過Apache主機名和端口訪問。

關注微信公衆號:充實的腦洞, 一個技術宅的保留地
相關文章
相關標籤/搜索