Apache2+Tomcat7+mod_jk2.2.3叢集負載均衡配置(目前最強悍)
前言
目前公司專案升級,一方面對程式碼進行重構,另外一方面優化伺服器效能。下面就著重分享下Apache的叢集和負載均衡配置。雖然網上相關的文章數不勝數,不過感覺寫的都不是很到位。我這篇文章主要是根據我在實際專案配置的過程中一點點的記錄下來的,希望能夠幫到需要的人,從而人少走點彎路。。。
準備環境
1. Apache
下載最新的apache版本2.2.18,官方下載地址為http://httpd.apache.org/download.cgi#apache22.
2. Tomcat
下載最新tomcat版本7.0.14,官方下載地址為http://tomcat.apache.org/download-70.cgi.
下載最新版本JK1.2.31,官方下載地址為http://tomcat.apache.org/download-connectors.cgi.
應用配置
1.Apache配置
安裝Apache程式到指定目錄,假設我們安裝到d:/Apache2 ,找到該目錄下面conf/httpd.conf .主要修改過程包括如下幾個步驟:
- 查詢DocumentRoot 關鍵字,修改預設的應用目錄d:/Apache2/htdocs 為d:/wwwroot ,主要方便以後釋出程式。
-
查詢<Directory "D:/Apache2/htdocs"> 修改為<Directory "D:/wwwroot">
- 查詢DirectoryIndex 關鍵字,在末尾新增index.jsp index.php etc.
重啟apache服務,建立內容It works!到index.html中並且拷貝到wwwroot目錄下,然後在遊覽器訪問http://localhost,如果看到It works!字樣,則說明apache配置成功。
2.JK配置
- 在d:\apache2目錄下面建立conf.d 資料夾,主要用來存放叢集需要的配置檔案。
- 建立mod_jk.conf存放到d:\apache2\conf.d中。具體配置內容如下:
-
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
- # 與tomcat整合實現負載均衡配置
- JkWorkersFile conf.d/workers.properties
- # 訪問url地址規則定義和過濾
- JkMountFile conf.d/uriworkermap.properties
- JkShmFile logs/mod_jk.shm
- # 記錄負載均衡日誌
- JkLogFile logs/mod_jk.log
- # Set the jk log level [debug/error/info]
- JkLogLevel info
- # Select the log format
- JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
- # JkOptions indicates to send SSK KEY SIZE
- JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
- # JkRequestLogFormat
- JkRequestLogFormat "%w %V %T"
- #對tomcat專案別名,此處一定要配置,否則你專案的靜態檔案無法呼叫
- Alias /OneByOne /opt/wwwroot/webapps/OneByOne
- #設定tomcat釋出檔案的許可權,必須配置,否則報403錯誤
- <Directory "/opt/wwwroot/webapps">
- #Options FollowSymLinks
- Options Indexes FollowSymLinks
- #Options Indexes MultiViews
- AllowOverride None
- Order deny,allow
- #Deny from all
- allow from all
- Satisfy all
- </Directory>
- # 定義需要由tomcat解析的訪問url
- JkMount /* controller
- # 排除不需要由tomcat解析的地址,比如下面定義的dbm是php工程,所以訪問目錄就需要排除
- JkUnMount /dbm* controller
- 新建並且編輯workers.properties檔案,負載均衡配置如下所示:
- # 定義worker,此處的list名稱必須和mod_jk.conf檔案中的controller名稱一致
- worker.list=controller
- # Define Node1
- worker.tomcat1.port=8009
- worker.tomcat1.host=localhost
- worker.tomcat1.type=ajp13
- worker.tomcat1.lbfactor=1
- worker.tomcat1.connection_pool_size=10
- worker.tomcat1.connection_pool_timeout=600
- worker.tomcat1.socket_connect_timeout=300
- # Define Node2
- worker.tomcat2.port=9009
- worker.tomcat2.host=localhost
- worker.tomcat2.type=ajp13
- worker.tomcat2.lbfactor=1
- worker.tomcat2.connection_pool_size=10
- worker.tomcat2.connection_pool_timeout=600
- worker.tomcat2.socket_connect_timeout=300
- # Load-balancing behaviour
- worker.controller.type=lb
- worker.controller.balance_workers=tomcat1, tomcat2
- worker.controller.sticky_session=0
- worker.controller.sticky_session_force=1
- #loadbalancer
- ***************************************************************************************/
- 新建並編輯uriworkermap.properties檔案,具體的配置程式碼如下:
- /*=controller
- !/*.html=controller
- !/*.css=controller
- !/*.gif=controller
- !/*.jpg=controller
- !/*.png=controller
- !/*.js=controller
上面都配置好了以後,別忘了新增Include conf.d/*.conf 到apache的httpd.conf配置檔案中。目的讓apache能夠找到mod_jk.conf配置檔案。
3.tomcat配置
這邊我配置了兩個tomcat,將下載的tomcat檔案解壓到d:\tomcat1和d:\tomcat2目錄下,然後分別修改所在目錄下面server.xml配置檔案,tomcat1修改的截圖如下:
tomcat2中的server.xml配置截圖如下:
上面兩個配置檔案中的節點connector中的屬性port和jvmRouter值需要和worker.properties中的設定一致。這個就不一一闡述了,相信搞程式的一看就明白。
測試叢集
1. 建立test專案,這個我也就直接拷貝網上的例子。然後將專案拷貝到d:\webapps目錄下面。
index.jsp內容:
Java程式碼- <%@ page contentType="text/html; charset=GBK" %>
- <%@ page import="java.util.*" %>
- <html><head><title>Cluster App Test</title></head>
- <body>
- Server Info:
- <%
- out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
- <%
- out.println("<br> ID " + session.getId()+"<br>");
- // 如果有新的 Session 屬性設定
- String dataName = request.getParameter("dataName");
- if (dataName != null && dataName.length() > 0) {
- String dataValue = request.getParameter("dataValue");
- session.setAttribute(dataName, dataValue);
- }
- out.println("<b>Session 列表</b><br>");
- System.out.println("============================");
- Enumeration e = session.getAttributeNames();
- while (e.hasMoreElements()) {
- String name = (String)e.nextElement();
- String value = session.getAttribute(name).toString();
- out.println( name + " = " + value+"<br>");
- System.out.println( name + " = " + value);
- }
- %>
- <form action="test2.jsp" method="POST">
- 名稱:<input type=text size=20 name="dataName">
- <br>
- 值:<input type=text size=20 name="dataValue">
- <br>
- <input type=submit>
- </form>
- </body>
- </html>
2. 啟動兩個tomcat,然後重啟apache,直接在瀏覽器訪問http://localhost/test。