天天看點

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

Nginx+LAT(Apache+tomcat)的實作和Apache反向代理和負載均衡tomcat的不同方式以及使用memcached儲存tomcat的session會話

一.Nginx+LAT(Apache+tomcat)的環境結構;

    1.Nginx +Apache實作負載均衡使用者請求至tomcat,其中Nginx是負載均衡排程器,Apache和tomcat在同一台機器上,Apache将關于JSP的請求發送至tomcat。

    2.實驗結構圖:

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

  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是否正常運作:

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

    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服務,在浏覽器中進行測試:

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

  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();

    ?>

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

  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+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話
Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

    由于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服務。進行通路:

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

而後重新開機tomcat。

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話
Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

四.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伺服器即可。在這沒有進行會話綁定,

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

    進行會話綁定,bcproxy.conf的配置檔案内容為:

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

六.memcached儲存session會話

使用memcached儲存tomcat的session會話:tomcat-session-memcached 。也就是使用session服務儲存session會話.

         在Nginx+LAT實驗環境的基礎上來實作tomcat的session儲存

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存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服務,并啟動;(另外一節點同樣)

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

    兩個節點上的的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進行測試:

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話
Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

發現會話并沒有發生變化,在node72上使用memcached-tool 127.0.0.1檢視緩存:

Nginx+LAT(apache+tomcat)的實作和使用memcached儲存tomcat的session會話

到此是基于memcached緩存tomcat的session會話的實作