日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

征服 Nginx + Tomcat

系統(tǒng) 2148 0
2年前一直折騰Apache,現(xiàn)如今更習慣Nginx。 ?搭建網(wǎng)站又遇到2年前遇到的問題——Session同步。 ?(參考我以前的帖子—— 征服 Apache + Tomcat )只不過現(xiàn)今擔當負載均衡的Apache換成了Nginx! ?
今天簡要說明一下Nginx+Tomcat負載均衡實現(xiàn), 重點介紹Nginx+Tomcat+Session共享實現(xiàn) 。?


相關(guān)內(nèi)容:?
征服 Apache + SSL ?
征服 Apache + SVN ?
征服 Apache + SVN +? LDAP ?
征服 Apache + Tomcat ?
征服 Nginx ?
征服 Nginx + Tomcat ?


Nginx負載均衡,其實主要就是用upstream、server指令,再配以權(quán)重等等參數(shù)。如果為了讓nginx支持session共享,還需要額外增加一個模塊。?

一、Nginx負載均衡 ?
在http{...}中配置一個upstream{...},參考如下:?
引用

??? upstream tomcat {?
??????? server 10.11.155.26:8080;?
??????? server 10.11.155.41:8080;?
??? }?

接著修改location節(jié)點,配置代理:?
引用
location / {?
????? ...?
??????????? proxy_pass http://tomcat;?

????? ...?
}

當訪問根路徑時,會輪播路由到兩臺服務(wù)器上,至于后端服務(wù)器是tomcat還是jetty之類的,都無所謂,照葫蘆畫瓢就是了。 ?
當然,有的機器性能好,或者負載低,可以承擔高負荷訪問量,可以通過權(quán)重(weight),提升訪問頻率。數(shù)值越高,被分配到的請求數(shù)越多。?
server指令參數(shù)如下:?
  • weight——權(quán)重,數(shù)值越大,分得的請求數(shù)就越多,默認值為1。
  • max_fails——對訪問失敗的后端服務(wù)器嘗試訪問的次數(shù)。默認值為1,當設(shè)置為0時將關(guān)閉檢查。
  • fail_timeout——失效超時時間,當多次訪問失敗后,對該節(jié)點暫停訪問。
  • down——標記服務(wù)器為永久離線狀態(tài),用于ip_hash指令。
  • backup——僅當非backup服務(wù)器全部宕機或繁忙時啟用。

例如,可以這樣配置:?
引用

??? upstream tomcat {?
??????? server 10.11.155.26:8080 weight=5;?
??????? server 10.11.155.41:8080 weight=10;?
??? }?

后者分得的請求數(shù)就會較高。?

二、Nginx+Tomcat+Session共享 ?
為了讓Nginx支持Tomcat的Session共享,需要對其升級,增加jvmroute模塊。?

1.下載 nginx-upstream-jvm-route 組件、對nginx源碼做補丁。 ?
我把nginx-upstream-jvm-route下載到了/opt/software路徑下。?
先切換到nginx源碼目錄下,執(zhí)行:?
Shell代碼?? 收藏代碼
  1. patch?-p0?<?/opt/software/nginx_upstream_jvm_route/jvm_route.patch??

引用
patching file src/http/ngx_http_upstream.c?
Hunk #1 succeeded at 4095 (offset 358 lines).?
Hunk #3 succeeded at 4227 (offset 358 lines).?
Hunk #5 succeeded at 4326 (offset 358 lines).?
patching file src/http/ngx_http_upstream.h?
Hunk #1 succeeded at 90 (offset 5 lines).?
Hunk #3 succeeded at 118 (offset 5 lines).

說明補丁做好了! ?

2.升級nginx ?
先別急著折騰nginx-upstream-jvm-route,先看看nginx當時安裝時的參數(shù):?
Shell代碼?? 收藏代碼
  1. nginx?-V??

引用
nginx version: nginx/1.2.0?
configure arguments: --prefix=/opt/servers/nginx --user=nginx --group=www --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre=/opt/software/pcre-8.10 --with-zlib=/opt/software/zlib-1.2.5 --with-http_stub_status_module --with-http_realip_module --with-http_gzip_static_module

記得先備份nginx.conf! ?
使用追加參數(shù)(--add-module),增設(shè)nginx-upstream-jvm-route模塊, --add-module=/opt/software/nginx_upstream_jvm_route ,編譯安裝。?
Shell代碼?? 收藏代碼
  1. ./configure?--prefix=/opt/servers/nginx?--user=nginx?--group=www?--pid-path=/var/run/nginx.pid?--error-log-path=/var/log/nginx/error.log?--http-log-path=/var/log/nginx/access.log?--with-pcre=/opt/software/pcre- 8.10?--with-zlib=/opt/software/zlib- 1.2. 5?--with-http_stub_status_module?--with-http_realip_module?--with-http_gzip_static_module?--add-module=/opt/software/nginx_upstream_jvm_route?&&?make?&&?make?insatll??

如果沒有錯誤提示,nginx就成功升級了! ?

3.修改upstream配置 ?
要讓Nginx支持Tomcat的jvmRoute,并共享session,在upstream下作如下修改:?
引用

??? upstream tomcat {?
??????? server 10.11.155.26:8080 srun_id=tomcat1;?
??????? server 10.11.155.41:8080 srun_id=tomcat2;?

??????? jvm_route $cookie_JSESSIONID|sessionid reverse;?
??? }?

srun_id 跟tomcat配置有關(guān)。?

4.Tomcat集群配置(Tomcat6、7通用) ?
該配置參考 征服 Apache + Tomcat ,以下僅作簡要說明。?
a.修改server.xml?
找到 Engine 節(jié)點,并設(shè)置 jvmRoute ,這里指定 tomcat1 。?
Xml代碼?? 收藏代碼
  1. < Engine? name= "Catalina"? defaultHost= "localhost"? jvmRoute= "tomcat1" >??

可以直接粘貼以下代碼,并對應(yīng)修改 Receiver 節(jié)點中的 address 屬性,指向本機:?
Xml代碼?? 收藏代碼
  1. < Cluster? className= "org.apache.catalina.ha.tcp.SimpleTcpCluster"??
  2. ?????????? channelSendOptions= "8" >??
  3. ???? < Manager? className= "org.apache.catalina.ha.session.DeltaManager"??
  4. ????????????? expireSessionsOnShutdown= "false"??
  5. ????????????? notifyListenersOnReplication= "true" />??
  6. ???? < Channel? className= "org.apache.catalina.tribes.group.GroupChannel" >??
  7. ??????? < Membership? className= "org.apache.catalina.tribes.membership.McastService"??
  8. ??????????????? address= "224.0.0.0"??
  9. ??????????????? port= "45564"??
  10. ??????????????? frequency= "500"??
  11. ??????????????? dropTime= "3000" />??
  12. ??????? < Receiver? className= "org.apache.catalina.tribes.transport.nio.NioReceiver"??
  13. ???????????????? address= "10.11.155.26"??
  14. ???????????????? port= "4000"??
  15. ???????????????? autoBind= "100"??
  16. ???????????????? selectorTimeout= "5000"??
  17. ???????????????? maxThreads= "6" />??
  18. ??????? < Sender? className= "org.apache.catalina.tribes.transport.ReplicationTransmitter" >??
  19. ??????????? < Transport? className= "org.apache.catalina.tribes.transport.nio.PooledParallelSender" />??
  20. ??????? </ Sender >??
  21. ??????? < Interceptor? className= "org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />??
  22. ??????? < Interceptor? className= "org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />??
  23. ???? </ Channel >??
  24. ???? < Valve? className= "org.apache.catalina.ha.tcp.ReplicationValve"??
  25. ??????????? filter= ".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />??
  26. ???? < Valve? className= "org.apache.catalina.ha.session.JvmRouteBinderValve" />??
  27. ???? < ClusterListener? className= "org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />??
  28. ???? < ClusterListener? className= "org.apache.catalina.ha.session.ClusterSessionListener" />??
  29. ?? </ Cluster >??

注:如果本機上有多個tomcat并存, Receiver 節(jié)點中的 port 屬性,使其綁定在不同的端口上。?
Membership 節(jié)點 address 屬性配置多播地址,可使用 route 命令將其打開,參考如下:?
Shell代碼?? 收藏代碼
  1. route?add?-net? 224.0. 0.0/ 8?dev?eth0???

b.修改應(yīng)用的 web.xml ?
在web.xml末尾增加 <distributable /> ?
Xml代碼?? 收藏代碼
  1. < web-app >??
  2. ...??
  3. ???????? < distributable? />???
  4. </ web-app >??


至此,已完成所有配置,重啟tomcat、nginx,訪問服務(wù)測試頁面(見附件),強行關(guān)閉其中一臺tomcat,令請求轉(zhuǎn)向另一個臺tomcat,測試session是否同步:?
征服 Nginx + Tomcat ?
session共享成功,非粘性實現(xiàn)。 ?


相關(guān)內(nèi)容:?
征服 Apache + SSL ?
征服 Apache + SVN ?
征服 Apache + SVN +? LDAP ?
征服 Apache + Tomcat ?
征服 Nginx ?
征服 Nginx + Tomcat ?

征服 Nginx + Tomcat


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 绥芬河市| 西平县| 色达县| 北安市| 壤塘县| 山东省| 双鸭山市| 五家渠市| 永胜县| 漳浦县| 鸡西市| 抚松县| 阿拉善盟| 赤水市| 朝阳市| 综艺| 肥东县| 宁河县| 德兴市| 宜良县| 宿迁市| 社旗县| 桑日县| 中卫市| 兴和县| 南康市| 江北区| 澜沧| 澎湖县| 商都县| 乌鲁木齐市| 巴塘县| 湘潭县| 舒兰市| 依安县| 定襄县| 那曲县| 磴口县| 峨眉山市| 浦城县| 铜川市|