環境:
雲服務器兩臺:192.168.0.2
192.168.0.3
系統:centos7
版本:Apache2.4
Tomcat8.5
Apache安裝在192.168.0.2上,並且使用mod_jk配置負載均衡,
Apache綁定域名a.com,和b.com,a.com作爲官網,php開發,
b.com作爲api接口域名,給app或前端頁面調用接口。
Tomcat安裝分別安裝在192.168.0.2和192.168.0.3上。
這裏不介紹軟件安裝方法,只介紹配置方法。
需求:如圖:
現需要
- 訪問a.com後,不需要tomcat處理,只需要請求到apache綁定的a.com的目錄下的資源文件即可。也就是訪問a.com,直接請求192.168.0.2上的a.com目錄文件。
- 訪問b.com後需要通過負載均衡分配給tomcat1和tomcat2處理。
Apache配置
本文apache爲yum安裝
vim /etc/httpd/conf/httpd.conf
在文件末尾添加上綁定的域名信息
綁定域名a.com
NameVirtualHost *80
<VirtualHost *:80>
DocumentRoot /var/www/html/a.com
ServerName a.com
DirectoryIndex index.html index.htm index.jsp
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/b.com
ServerName b.com
DirectoryIndex index.html index.htm index.jsp
JkMount /* controller #重點配置
JkMount /jkstatus stat #重點配置
</VirtualHost>
JkMount /* controller 意思是將此域名是所有請求都交由 controller控制器管理
JkMount /jkstatus 將此域名下的所有/jkstatus所有路徑都交由stat控制器管理
這裏的controller,stat控制器即是下文中workers.properties 配置的控制器。
如果不設置,那麼b.com的訪問跟會a.com訪問一樣會直接請求html/b.com的目錄文件了,那麼負載均衡將無法轉發任何流量。
配置負載均衡
apache2.4的httpd.conf文件末尾已自動加載conf.d下面的所有配置文件,所以我們只需要在這個目錄新建配置文件即可,無需再去httpd.conf添加引用
新建mod_jk.conf
vim /etc/httpd/conf.d/mod_jk.conf
LoadModule jk_module modules/mod_jk.so #編譯好的mod_jk.so文件,編譯好會自動在modules目錄生成
JkWorkersFile conf.d/workers.properties #加載負載均衡配置文件
JkMountFile conf.d/uriworkersmap.properties #加載負載均衡忽略文件
JkLogFile logs/mod_jk.log #設置日誌路徑
JkLogLevel info #設置日誌級別 info debug warn
新建workers.properties
vim /etc/httpd/conf.d/workers.properties
#work 控制器
worker.list = controller,stat
#========tomcat1========
worker.tomcat1.port=8009 #ajp13端口號,在tomcat下server.xml配置,默認 8009 默認無需修改
worker.tomcat1.host=192.168.0.2 #tomcat的主機地址
worker.tomcat1.type=ajp13 #協議類型
worker.tomcat1.lbfactor=1 # 值越高,分得的請求越多。
#========tomcat2========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.0.3
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller,負載均衡控制器========
worker.controller.type=lb #負載均衡控制器類型,lbfactor是負載平衡因數(Load Balance Factor)
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分擔請求的tomcat列表
# 粘性session(默認是打開的)
# 當該屬性值=true(或1)時,代表session是粘性的,
worker.controller.sticky_session=true
#錯誤發生時的重試次數
worker.retries=3
# 設置用於負載均衡的server的session可否共享
worker.controller.sticky_session_force=false
worker.stat.type=status #負載均衡狀態查看設置
worker.controller.sticky_session,設置爲1或true使用粘着session,設置爲0或false不使用粘着session。如果sticky_session設爲true時,建議sticky_session_force設爲false,
此參數表明如果集羣中某臺服務器在多次請求沒有響應後,將轉發當前的請求到其它服務器上處理;sticky_session=false時,影響比較大,會導致轉發到其它服務器上的請求,找不到原來的session,
所以如果此時請求中有讀取session中某些信息的話,就會導致應用的null異常。sticky_session、sticky_session_force的默認值分別爲true,false。
sticky_session | sticky_session_force | 含義 |
---|---|---|
true | false | SESSION會複製,有粘性 |
true | true | SESSION不復制,有粘性 |
false | false | SESSION會複製,無粘性 |
false | true | SESSION會複製,無粘性 |
新建
vim /etc/httpd/conf.d/uriworkersmap.properties
/*=controller
/jkstatus=stat
!/*.jpg=controller
!/*.gif=controller
!/*.png=controller
!/*.bmp=controller
!/*.html=controller
!/*.htm=controller
!/*.css=controller
!/*.js=controller
!/*.jpg=controller 表示controller控制器放行jpg文件
/jkstatus=stat 表示/jkstatus路徑又stat控制器控制
jkstatus目錄是查看負載均衡的狀態的頁面,如果不放行將無法查看此頁面
Tomcat設置
編輯配置文件
vim /usr/tomcat/apache-tomcat-8.5.31/conf/server.xml
編輯Engine標籤,添加上jvmRoute=“tomcat1”,tomcat1即workers.properties 中的tomcat名稱。
兩個tomcat都要修改,
192.168.0.2 jvmRoute="tomcat1"
192.168.0.3 jvmRoute="tomcat2"
測試
偷懶複製了個頁面,
在兩個tomcat的運行目錄下新建test.jsp文件;
test.jsp
vim /usr/tomcat/apache-tomcat-8.5.31/webapps/test.jsp
<%@ page language="java" %>
<html>
<head><title>Tomcat1 <!-- (tomcat2改爲2)--></title></head>
<body>
<h1><font color="red">Tomcat1 <!-- (tomcat2改爲2)--></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
訪問a.com:正常顯示a.com的網站類容
訪問b.com/test.jsp
由於啓用了session,所以刷新並不會改變處理的tomcat服務器,需要用瀏覽器的隱身模式訪問。
關掉後重新訪問:
可以看到b.com所有jsp的動態請求,都會交給tomcat1或者tomcat2處理。