Nginx+LAT(Apache+tomcat)的實作和Apache反向代理和負載均衡tomcat的不同方式以及使用memcached儲存tomcat的session會話
一.Nginx+LAT(Apache+tomcat)的環境結構;
1.Nginx +Apache實作負載均衡使用者請求至tomcat,其中Nginx是負載均衡排程器,Apache和tomcat在同一台機器上,Apache将關于JSP的請求發送至tomcat。
2.實驗結構圖:

3.環境介紹,在兩台CentOS7上都安裝Tomcat和Apache,實作動态.jsp内容的請求。在一台CentOS6上安裝LAMP實作靜态内容加.php的請求。一台Nginx實作負載均衡排程,且實作session sticky。
二.Nginx+LAT的實作過程;
1.在CentOS7上安裝Tomcat和Apache:
在CentOS7上Tomcat可以通過本地CD光牒鏡像挂載安裝。也可以通過源碼安裝,在安裝tomcat之前要先安裝好JDK環境。The Java Platform Standard Edition Development Kit (JDK) includesboth the runtime environment (Java virtual machine, the Java platform classesand supporting files) and development tools (compilers, debuggers,toollibraries and other tools).
在此講述一下源碼安裝的過程:
a. 安裝jdk,jdk的版本要使用穩定的版本;可以從官方下載下傳rpm類型的jdk軟體包進行安裝;jdk-7u79-linux-x64.rpm
b. 安裝好JAVA運作環境之後就可以安裝tomcat:apache-tomcat-8.0.23.tar.gz
到此安裝完成;隻需運作catalina.sh start就可以啟動tomcat
在CentOS7上使用yum 安裝tomcat和Apache即可:yuminstall tomcat,yum install httpd會解決依賴的關系;
2.在安裝好tomcat和Apache的主機上進行相關配置:(兩個節點的配置相似隻是部分主機名不同和測試頁面不同)
在配置之前在/etc/hosts添加一下内容:
172.16.99.72node72.zkchang.com node72
172.16.99.71 node71.zkchang.com node71
并設定好主機名,關閉防火牆和selinux
a. 在tomcat上添加一虛拟主機,并提供測試頁面;
在目錄/etc/tomcat目錄下編寫service.xml檔案;在<Engine> </Engine>中添加如下内容:
建立目錄:
~]# mkdir /test/webapps/test1 –pv
webapps]# mkdir test1/{WEB-INF,MATE-INF,classes,lib} –pv
建立測試index.jsp網頁頁面:在/test/webapps/test1目錄下建立檔案index.jsp内容如下:
先測試一下tomcat是否正常運作:
b. 使用Apache反代tomcat,使tomcat不直接接收用戶端的請求;
Apache可以通過mod_jk和mod_proxy子產品跟tomcat整合,但是mod_proxy隻有在Apache2.2.x系列的版本中才提供,Apache反向代理tomcat有三種種方法,一種是通過mod_proxy+mod_proxy_http
第二種是通過mod_proxy+mod_proxy_ajp.第三種通過mod_jk子產品,但是mod_jk子產品隻支援ajp協定,所在tomcat的server.xml檔案中要使用ajp協定。
檢視目前Apache是否支援mod_proxy,mod_proxy_http,mod_proxy_ajp子產品:
本次實驗使用mod_proxy+mod_proxy_http進行反向代理後端的tomcat
編輯httpd的配置檔案:
注釋中心主機:
#DocumentRoot"/var/www/html"
打開IncludeOptional conf.d/*.conf此項
在/etc/httpd/conf.d/目錄下建立一檔案并添加如下内容:
另一台的tomcat(172.16.99.72)和Apache的配置和此節點的配置相似,隻是相應的修改了主機名,以及測試内容不同。
啟動httpd服務,在浏覽器中進行測試:
3.在172.16.99.12(node12)上安裝LAP,用于響應靜态内容和.php的動态内容:
yum groupinstall" Server Platform Development" "Development tools"
a. 安裝httpd:
安裝apr和apr-util
安裝httpd:
httpd安裝完畢
b. 安裝php:
解決依賴關系:
# yum -y install bzip2-devel libmcrypt-devel(要通過epel源下載下傳)libxml2-devel
編譯安裝php-5.6.4.tar.xz
1.為服務提供配置檔案:
# cp php.ini-production /etc/php.ini
2.編輯httpd的配置檔案,是apache支援php
# vim /etc/httpd/httpd.conf
添加如下二行
AddTypeapplication/x-httpd-php .php
AddType application/x-httpd-php-source .phps
3.定位至DirectoryIndexindex.html
修改為: DirectoryIndex index.php index.html
c. 測試
在/usr/local/httpd/htdocs/目錄下建立一檔案index.php 内容為:
<?php
phpinfo();
?>
4.在172.16.99.10(node10)上安裝nginx,實作對後端伺服器的負載均衡:
Nginx安裝使用的是yum安裝,nginx的rpm安裝包存在epel源上。也可以通過源碼進行安裝;
在安裝和配置之前node10要能夠通路兩台tomcat的主機名,還要關閉防火牆和selinux。
Yum安裝nginx;
在/etc/nginx/nginx.conf配置檔案中添加如下内容:
在/etc/nginx/conf.d/default.conf的配置如:
啟動nginx伺服器,進行測試:
由于nginx的負載均衡排程算法為ip_hash,是以在第一通路之後,再次通路時會定向上次通路的節點上。
以下實驗的配置都是在上述環境的基礎實作的,也可重新配置實驗環境
三.啟動Manager功能;
由于是yum安裝的tomcat,預設在安裝完之後在/usr/share/tomcat/webapps/目錄下不會有apache-tomcat的首頁,需要安裝以下兩個包:yum install tomcat-admin-webapps tomcat-webapps。安裝之後,會在/usr/share/tomcat/webapps/目錄下生成以下目錄:examples host-manager manager ROOT sample
由于上述試驗中,在server.xml檔案中把defaultHost定義為”node71.zkchang.com”,在此為虛拟機添加一個ip(#ip addr add 172.16.99.100/16 dev eth0:0),在server.xml檔案中,把預設的<Hostname="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">中的name=”localhost”修改為:Name=”172.16.99.100”。重新新啟動tomcat服務。進行通路:
而後重新開機tomcat。
四.Apache使用mod_ajp子產品和mod_proxy子產品進行反向代理tomcat:
使用ajp協定方向代理tomcat其實很簡單,隻需在/etc/httpd/conf.d/proxy.conf添加如下内容即可:
重新開機httpd伺服器;
上述指令說明:
ProxyPreserveHost{On|Off}:如果啟用此功能,代理會将使用者請求封包中的Host:行發送給後端的伺服器,而不再使用ProxyPass指定的伺服器位址。如果想在反向代理中支援虛拟主機,則需要開啟此項,否則就無需打開此功能。
ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多級代理中控制代理請求的流向。預設為Off
ProxyRequests{On|Off}:是否開啟apache正向代理的功能。在做反向代理時,必須關閉此項。
ProxyPassReverse:用于讓apache調整HTTP重定向響應封包中的Location、Content-Location及URI标簽所對應的URL,在反向代理環境中必須使用此指令避免重定向封包繞過proxy伺服器
ProxyPass [path] !|url [key=value key=value ...]]:将後端伺服器某URL與目前伺服器的某虛拟路徑關聯起來作為提供服務的路徑,path為目前伺服器上的某虛拟路徑,url為後端伺服器上某URL路徑。使用此指令時必須将ProxyRequests的值設定為Off。需要注意的是,如果path以“/”結尾,則對應的url也必須以“/”結尾,反之亦然。
ProxyPass後的參數:
loadfactor:用于負載均衡叢集配置中,定義對應後端伺服器的權重,取值範圍為1-100
retry:當apache将請求發送至後端伺服器得到錯誤響應時等待多長時間以後再重試。機關是秒鐘。
如果Proxy指定是以balancer://開頭,即用于負載均衡叢集時,其還可以接受一些特殊的參數,如下所示:
lbmethod:apache實作負載均衡的排程方法,預設是byrequests,即基于權重将統計請求個數進行排程,bytraffic則執行基于權重的流量計數排程,bybusyness通過考量每個後端伺服器的目前負載進行排程。
maxattempts:放棄請求之前實作故障轉移的次數,預設為1,其最大值不應該大于總的節點數。
nofailover:取值為On或Off,設定為On時表示後端伺服器故障時,使用者的session将損壞;是以,在後端伺服器不支援session複制時可将其設定為On。
stickysession:排程器的stickysession的名字,根據web程式語言的不同,其值為JSESSIONID或PHPSESSIONID。
上述指令除了能在banlancer://或ProxyPass中設定之外,也可使用ProxySet指令直接進行設定,如:
<Proxy balancer://hotcluster>
BalancerMember http://www1.lllkkk.com:8080 =1
BalancerMember http://www2.lllkkk.com:8080 loadfactor=2
ProxySet lbmethod=bytraffic
</Proxy>
五.實作Apache通過mod_proxy子產品負載均衡後端的tomcat.并實作stickysession
實驗通過172.16.99.71上的httpd負載均衡node71:172.16.99.72上和node71:172.16.99.71 上的tomcat;
在node71上:在/etc/httpd/conf.d/目錄下編寫proxybc.conf檔案,添加如下内容:
重新開機httpd伺服器即可。在這沒有進行會話綁定,
進行會話綁定,bcproxy.conf的配置檔案内容為:
六.memcached儲存session會話
使用memcached儲存tomcat的session會話:tomcat-session-memcached 。也就是使用session服務儲存session會話.
在Nginx+LAT實驗環境的基礎上來實作tomcat的session儲存
實作這一功能需要一個元件:memcached-session-manager.下載下傳此元件并安裝至各個tomcat節點的安裝目錄下的lib目錄中。(node71,node72),下載下傳memcached-session-manager-1.8.3.jar memcached-session-manager-tc7-1.8.3.jar這兩個元件和安裝時,要與你安裝tomcat的版本保持一緻:
由于是rpm安裝的tomcat。Lib目錄存在/usr/share/tomcat/lib/。将相關連的元件複制到此目錄下:(兩個tomcat 節點都需複制)
分别在node71:172.16.99.71 和node72:172.16.99.72上定義一個用于測試的context容器,并在此容器中建立一個會話管理器:
Yum 安裝memcached服務,并啟動;(另外一節點同樣)
兩個節點上的的Apache上面的配置如下:
Node71和node72:配置檔案:(做反向代理tomcat),此處配置和上述的Nginx+LAT實驗環境上的Apache的配置相同:
使用node10 :172.16.99.10做nginx對後端tomcat的負載均衡:
在/etc/nginxnginx.conf檔案中的http段内定義upstream:
在/etc/nginx/conf.d/default.conf中定義對upstream的引用;
檢測nginx的配置檔案是否有錯,(nginx -t)無錯啟動Ngnix伺服器。
重新啟動tomcat和Apache進行測試:
發現會話并沒有發生變化,在node72上使用memcached-tool 127.0.0.1檢視緩存:
到此是基于memcached緩存tomcat的session會話的實作