怎么配置Nginx+Tomcat的集群和負(fù)載均衡

這篇文章主要介紹“怎么配置Nginx+Tomcat的集群和負(fù)載均衡”,在日常操作中,相信很多人在怎么配置Nginx+Tomcat的集群和負(fù)載均衡問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么配置Nginx+Tomcat的集群和負(fù)載均衡”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、古雷港網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為古雷港等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

Tomcat 集群是當(dāng)單臺(tái)服務(wù)器達(dá)到性能瓶頸,通過橫向擴(kuò)展的方式提高整體系統(tǒng)性能的有效手段。Nginx 是一個(gè)高性能的 HTTP 和反向代理 web  服務(wù)器,可以通過簡(jiǎn)單的配置實(shí)現(xiàn) Tomcat 集群的負(fù)載均衡。

1. 概述

對(duì)于 Web 應(yīng)用來說,集群***的問題就是 Session 信息的共享,一般有以下解決方法:

  • 使用粘性會(huì)話,比如,使用 IP Hash 的負(fù)載均衡策略,將當(dāng)前用戶的請(qǐng)求都集中到一臺(tái)服務(wù)器上;缺點(diǎn)是單點(diǎn)故障,會(huì)話丟失

  • 使用 Session 復(fù)制,使用 Tomcat 自帶的 Session  復(fù)制策略,將會(huì)話信息同步到集群的各個(gè)節(jié)點(diǎn);缺點(diǎn)是消耗更多內(nèi)存和帶寬,適用于小型集群

  • 使用第三方緩存中間件緩存整個(gè)集群會(huì)話信息,比如 redis 緩存,可由應(yīng)用程序控制與 Session 的關(guān)聯(lián),也可以適配 Tomcat

  • 當(dāng)然了,也可以把會(huì)話信息存到共享文件系統(tǒng)或者數(shù)據(jù)庫

在配置 Nginx 的過程中,可能會(huì)遇到以下問題:

  • 配置 upstream 名稱時(shí)不能使用下劃線,比如 tomcat_ha,否則 Tomcat 會(huì)拋出 The character [_] is never  valid in a domain name 的異常

  • 在 windows 上殺掉所有的 nginx.exe 進(jìn)程,taskkill /fi "imagename eq nginx.exe" /f

  • 在  windows 上有個(gè) pid 為 4 的系統(tǒng)進(jìn)程會(huì)占用 80 端口,所以這里將 nginx 改為了 8000

在配置 Tomcat 集群的過程中,需要注意的問題:

  • 確保 web.xml 配置了

    元素
  • 確保 Context 的 Manager 別被替換成了標(biāo)準(zhǔn)會(huì)話管理器

  • Receiver.address 不要配置成 auto,因?yàn)槟J(rèn)可能會(huì)綁定 127.0.0.1;Receiver.port 可改也可不改,Tomcat  會(huì)自行檢測(cè) 4000-4100 范圍內(nèi)的可用端口,自動(dòng)處理沖突

  • 如果在不同服務(wù)器上,需要關(guān)閉防火墻或開端口,還有時(shí)間同步

2. Nginx 核心配置

Nginx 使用的是默認(rèn)配置,添加和修改的核心配置如下:

http {   ...   #gzip  on;      #設(shè)置負(fù)載均衡的服務(wù)器列表和權(quán)重   upstream tomcat-ha {       #ip_hash;        server 172.31.1.41:8080 weight=1;       server 172.31.1.42:8080 weight=1;   }      server {       listen       8000;       server_name  localhost;        #charset koi8-r;       #access_log  logs/host.access.log  main;        location / {           root   html;           index  index.html index.htm;           #轉(zhuǎn)發(fā)請(qǐng)求           proxy_pass http://tomcat-ha$request_uri;           proxy_set_header Host $http_host;           proxy_set_header X-Real-IP $remote_addr;           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;           proxy_set_header X-Forwarded-Proto $scheme;       }       ...   } }

3. Tomcat 集群配置

啟用集群配置,在元素中添加以下配置:

<!-- channelSendOptions=6 同步復(fù)制 --> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">   <!-- 集群 Session 管理器 -->   <Manager className="org.apache.catalina.ha.session.BackupManager"              expireSessionsOnShutdown="false"              notifyListenersOnReplication="true"              mapSendOptions="6"/>   <!--   <Manager className="org.apache.catalina.ha.session.DeltaManager"            expireSessionsOnShutdown="false"            notifyListenersOnReplication="true"/>   -->   <!-- 集群內(nèi)部通信配置 -->   <Channel className="org.apache.catalina.tribes.group.GroupChannel">     <Membership className="org.apache.catalina.tribes.membership.McastService"                 address="228.0.0.4"                 port="45564"                 frequency="500"                 dropTime="3000"/>     <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"               address="192.168.10.2"               port="5000"               selectorTimeout="100"               maxThreads="6"/>     <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">       <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>     </Sender>     <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>     <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>     <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>   </Channel>   <!-- 此 vavle 攔截請(qǐng)求,并將 Session 信息發(fā)給內(nèi)部節(jié)點(diǎn) -->   <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"          filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>   <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>

簡(jiǎn)單描述下工作原理:

  • nginx 將請(qǐng)求轉(zhuǎn)發(fā)給 Tomcat1,請(qǐng)求登錄認(rèn)證,創(chuàng)建會(huì)話,生成 Cookie,在響應(yīng)返回之前,將 Session 信息復(fù)制到  Tomcat2

  • 再次請(qǐng)求時(shí),nginx 將帶著會(huì)話 Cookie 的請(qǐng)求轉(zhuǎn)發(fā)給了 Tomcat2,Tomcat2 發(fā)現(xiàn)內(nèi)部 Session 池中有關(guān)聯(lián)的已認(rèn)證成功的  Session 對(duì)象,不再認(rèn)證返回請(qǐng)求資源

4. 驗(yàn)證負(fù)載均衡和 Session 復(fù)制

4.1 測(cè)試環(huán)境

  • 使用兩臺(tái) PC 部署 Tomcat,對(duì)應(yīng)關(guān)系是:172.31.1.41-Tomcat1,172.31.1.42-Tomcat2

  • 部署基于使用 Tomcat 自帶的 SessionExample 程序,編寫了一個(gè) tomcat-benchmark 的 web 應(yīng)用

  • 結(jié)合 Tomcat 自帶的 Manager 應(yīng)用,查看已部署應(yīng)用內(nèi)部 Session 池

4.2 負(fù)載均衡

修改 tomcat-benchmark 部署描述符文件中的 context-param 為 "I'm Tomcat 1/2" 用于區(qū)分兩個(gè)  Tomcat,啟動(dòng) Nginx 和 Tomcat,在瀏覽器訪問 172.31.1.42:8000 可以看到請(qǐng)求在兩個(gè)服務(wù)器間切換:

怎么配置Nginx+Tomcat的集群和負(fù)載均衡

4.3 Session 復(fù)制

為了方便理解,這里先把 Nginx 的負(fù)載均衡策略設(shè)置成 ip_hash:

  • 假設(shè) Nginx 始終將請(qǐng)求定位到 Tomcat1 上,然后在 Tomcat1 上創(chuàng)建會(huì)話,往會(huì)話中添加一些屬性

  • 關(guān)閉 Tomcat1 模擬故障,此時(shí) Nginx 會(huì)帶著之前的會(huì)話 Cookie 將請(qǐng)求轉(zhuǎn)發(fā)到 Tomcat2,上

  • 查看 Tomcat2 上是否存在與 Cookie(JSESSIONID) 關(guān)聯(lián)的 Session 信息,若有表示復(fù)制成功

整個(gè)過程如下:

怎么配置Nginx+Tomcat的集群和負(fù)載均衡

正好與上述描述的相反,可以看到 Session 信息從 Tomcat2 復(fù)制到了 Tomcat1 中。

到此,關(guān)于“怎么配置Nginx+Tomcat的集群和負(fù)載均衡”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

文章標(biāo)題:怎么配置Nginx+Tomcat的集群和負(fù)載均衡
當(dāng)前路徑:http://muchs.cn/article34/jpiese.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)標(biāo)簽優(yōu)化、網(wǎng)站導(dǎo)航品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)