Apache+Tomcat+jk叢集
Apache+Tomcat+jk叢集
原理:JK外掛的負載均衡器根據在worker.properties中配置的lbfactor(負載平衡因數),負責為集群系統中的Tomcat伺服器分配工作負荷,以實現負載平衡。每個Tomcat伺服器間用叢集管理器(SimpleTcpCluster)進行通訊,以實現HTTP回話的複製,比如Session。
一、搭建環境
作業系統:CentOS7
Jdk:1.7
Apache:2.4.33
Tomcat:7.0
Jk:1.2.43
二、安裝包準備
Cenos映象檔案
jdk-7u80-linux-x64.tar.gz(jdk)
httpd-2.4.33.tar.gz (
apache-tomcat-7.0.88.tar.gz(Tomcat)
tomcat-connectors-1.2.43-src.tar.gz(Jk)
安裝Apache所需要的依賴包:
apr-1.6.3.tar.gz
apr-util-1.6.1.tar.gz
apr-iconv-1.2.2.tar.gz
pcre-8.39.tar.gz
三、叢集部署步驟
3.1安裝在VMware安裝centos7
https://blog.csdn.net/hui_2016/article/details/68927487
3.2 安裝配置jdk
1、將centos自帶jdk刪除
2、將jdk壓縮包拷貝到/urs/local下面
3、解壓:#tar -zxvf jdk-7u80-linux-x64.tar.gz
4、配置Java環境變數在/etc/profile 末尾
5、把selinux=enforcing改為selinux=disabled 在/etc/selinux/config檔案中;
3.3安裝Apache步驟
3.3.1安裝依賴包
1、下圖四個安裝包拷貝到/urs/local下面
2、安裝apr——執行以下程式碼
# tar -zxvf apr-1.6.3.tar.gz
# cd apr-1.6.3
# ./configure --prefix=/usr/local/apr
# make
# make install
3、安裝apr-util——執行以下程式碼
注意:apr-util 1.6.0以上的版本需要 expat 的支援,下載安裝expat步驟如下:
# wget https://sourceforge.net/projects/expat/files/expat/2.2.3/expat-2.2.3.tar.bz2
#tar -xjvf expat-2.2.3.tar.bz2
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr/local/expat
# make && make install
以上是apr-util 1.6.0所需要的步驟不然會報錯,接下來是apr-util的安裝
# tar -zxvf apr-util-1.6.1.tar.gz
# cd apr-util-1.6.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr/local/expat
# make
# make install
4、安裝pcre——執行以下程式碼
# tar -zxvf pcre-8.32.tar.gz
# cd pcre-8.39
# ./configure --prefix=/usr/local/pcre
# make
# make install
3.3.2安裝Apache
1、將httpd-2.4.33.tar.gz拷貝到/urs/local下
2、#cd /usr/local
3、 #tar -zxvf httpd-2.4.33.tar.gz
4、#cd httpd-2.4.33
5、./configure --prefix=/usr/local/apache --enable-so -enable-proxy -enable-proxy_http=shared --enable-module=so --enable-mods-shared=all --enable-proxy-ajp=shared --enable-proxy-balancer -with-mpm=worker --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre
[注意空格]
6、#make && make install
3.3.3 Apache 的配置及測試
1、# vim /apache/conf /httpd.conf
2、在檔案中開啟註釋ServerName,將ServerName值改為對應的IP地址,如下圖所示
3、檔案中的DirectoryIndex中新增 index.jsp,如下圖所示
4、檔案中以下2個註釋去掉:
#Include conf/extra/httpd-mpm.conf
#Include conf/extra/httpd-default.conf
5、儲存修改退出
6、# cd /urs/local/apache/bin
7、#./apachectl start
8、檢視程序服務:# ps -ef | grep httpd 顯示如下結果則說明已經情動服務
9、開啟瀏覽器訪問 輸入地址:http://127.0.0.1 如下介面,說明Apache安裝成功
3.4安裝Tomcat步驟
1、將apache-tomcat-7.0.88.tar.gz拷貝到/urs/local 下面,解壓
#tar -zxvf apache-tomcat-7.0.88.tar.gz
2、將解壓後的資料夾重新命名為tomcat1,複製一份為tomcat2,方便區分,可利用xftp遠端連線工具進行該步驟。
3、Server.xml具體修改3.6節會詳細講解
3.5安裝jk
1、將安裝包tomcat-connectors-1.2.43-src.tar.gz(Jk)目錄拷貝到
/usr/local目錄下
2、#cd /usr/local
3、# tar -zxvf tomcat-connectors-1.2.43-src.tar.gz
4、編譯安裝mod_jk。
#cd /tomcat-connectors-1. 2.43-src/native
# chmod 755buildconf.sh
# ./buildconf.sh
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make
# make install
5、將/tomcat-connectors-1.2.53/apache-2.0下的mod_jk.so檔案拷貝到apache安裝目錄下的modules資料夾下面。
3.6整合Apache+Tomcat+jk
3.6.1修改Tomcat 的server.xml
1、# cd /usr/local/tomcat1/conf
2、# vim server.xml
3、修改<Engine>的配置,開啟<Cluster>標籤,儲存退出
4、#vim /usr/local/tomcat2/conf/server.xml 【修改tomcat2的server.xml】
5、修改對應的埠號,以防埠產生衝突
①預設8005
②預設8080
③預設8009
6、修改<Engine>的配置,開啟<Cluster>標籤,儲存退出
3.6.2 Apache配置——修改 httpd.conf
1、# vim/urs/local/apache/conf/httpd.xml
2、在檔案最後新增一下內容:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
#日誌檔案
JkLogFile logs/mod_jk.log
#tomcat執行模式
JkLogLevel debug
#收到.jsp結尾的檔案交給負載均衡器處理,可自行配置
JkMount /*.jsp loadbalancer
3.6.3 Apache配置——建立workers.properties
1、# touch /urs/local/apache/conf/workers.properties
2、# vim workers.properties
3、workers.properties具體配置如下:
# workers 列表
worker.list=tomcat1,tomcat2, loadbalancer, status
# 第一個tomcat1
worker.tomcat1.port=8009 #對應tomcat的server.xml中配置的ajp13埠號
worker.tomcat1.host=127.0.0.1 #tomcat1的主機IP地址,如不為本機,請填寫IP地址
worker.tomcat1.type=ajp13 #定向包協議
worker.tomcat1.lbfactor=1 #server的負載分配權重,值越高,分得的請求越多
#以下為非必要配置,這部分配置tomcat2的配置同tomcat1
#worker.tomcat1.cachesize=1000 #配置tomcat的jk連線快取大小 (非必要)
#worker.tomcat1.cachesize_timeout=600 # (非必要)
#worker.tomcat1.reclycle_timeout=300 # (非必要)
#worker.tomcat1.socket_keepalive=1 #防止防火牆切斷未啟用的網路連線(非必要)
#worker.tomcat1.socket_timeout=300 #(非必要)
#worker.tomcat1.local_worker=1 # (非必要)
#worker.tomcat1.retries=3 # (非必要)
# tomcat2
worker.tomcat2.port=9009
worker.tomcat2.host=172.**.***.202 #tomcat2的主機IP地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
# load balancerworker -負載均衡控制器
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2 #指定分擔請求的tomcat
worker.loadbalancer.sticky_session=1 #設定為粘性session
worker.loadbalancer.sticky_session_force=0 #設定當多次請求未響應,請求將轉發
worker.status.type=status
注意:
與servel.xml 中的jvmRoute一致
3.6.4 Web專案建立
1、新建web專案
2、index測試程式碼
<%@ 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);
%>
<forma"method="POST">
名稱:<input type=textsize=20 name="dataName">
<br>
值:<inpu ttype=textsize=20 name="dataValue">
<br>
</form>
</body>
</html>
3、修改web.xml 檔案
在<web-app>標籤裡新增<distributable/>,確保session能夠複製
4、將專案打成war包,放到tomcat1和tomcat2的webapps下面
四、測試
1、將Apache和Tomcat依次啟動
2、訪問http://127.0.0.1/專案名/index.jsp
測試結果:
Worker.properties中 .sticky_session=1 設定為有粘性,一個使用者在一個Tomcat中建立了會話後則此後這個使用者的所有操做都由這個Tomcat伺服器承擔,所以訪問一直出現的是tomcat1當tomcat1關閉時,會由tomcat2承擔,但是sessionID不改變。
ID C3253704969A27AE48AD5EFDE4285708.tomcat1
ID C3253704969A27AE48AD5EFDE4285708.tomcat2
參考:
https://jingyan.baidu.com/article/ab0b5630b632dbc15afa7dc4.html
https://blog.csdn.net/h12kjgj/article/details/73421570
https://blog.csdn.net/guoyf123321/article/details/50724746【web專案參考】
五、知識點延伸
workers.properties配置 詳解
1、worker常見屬性
ajp13:此型別表示當前worker為一個執行著的Tomcat例項。
Lb :lb即load balancing,專用於負載均衡場景中的woker;此worker並不真正負責處理使用者請求,而是將使用者請求排程給其它型別為ajp13的worker。
Status :使用者顯示分散式環境中各實際worker工作狀態的特殊worker,它不處理任何請求,也不關聯到任何實際工作的worker例項。具體示例如請參見後文中的配置。
Host :Tomcat 7的worker例項所在的主機
Port :Tomcat 7例項上AJP1.3聯結器的埠
connection_pool_minsize :最少要儲存在連線池中的連線的個數;預設為pool_size/2
connection_pool_timeout:連線池中連線的超時時長
Mount :由當前worker提供的context路徑,如果有多個則使用空格格開;此屬性可以由JkMount指令替代
retries :錯誤發生時的重試次數
socket_timeout :mod_jk等待worker響應的時長,預設為0,即無限等待
socket_keepalive :是否啟用keep alive的功能,1表示啟用,0表示禁用
Lbfactor :worker的權重,可以在負載均衡的應用場景中為worker定義此屬性
method :可以設定為R、T或B;預設為R,即根據請求的個數進行排程;T表示根據已經發送給worker的實際流量大小進行排程;B表示根據實際負載情況進行排程。
sticky_session :在將某請求排程至某worker後,源於此址的所有後續請求都將直接排程至此worker,實現將使用者session與某worker繫結。預設為值為1,即啟用此功能。如果後端的各worker之間支援session複製,則可以將此屬性值設為0。
https://www.cnblogs.com/wala-wo/p/5119225.html【引數詳細講解】
文章可能存在不足的地方,僅供參考。