日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx+Tomcat集群环境搭建

發(fā)布時間:2024/3/26 Nginx 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx+Tomcat集群环境搭建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Tomcat集群能帶來什么?

  • 提高服務(wù)的性能、并發(fā)能力、以及高可用性
  • 提高項目架構(gòu)的橫向擴展能力
  • 提高服務(wù)的性能

    實際公司線上生產(chǎn)環(huán)境都會選擇一臺機器部署一個tomcat,多臺機器完成集群,畢竟一臺機器部署多個tomcat還是有一些共享瓶頸的,例如它們的網(wǎng)卡只有一個,內(nèi)存和磁盤IO等都是共用的。而多臺機器共同提供相同的服務(wù),能夠充分利用每一臺機器的資源,自然能夠提高服務(wù)的性能。

    并發(fā)能力

    很好理解,一臺tomcat的http線程池是有限的,那么兩臺能承載的http線程自然是一臺的2倍。

    高可用性

    簡單理解在Nginx下面掛了多臺tomcat節(jié)點,當(dāng)其中一臺tomcat掛掉的時候,那么我們可以把這個節(jié)點從Nginx負載均衡tomcat集群的配置當(dāng)中移除,那么對于請求nginx還會打到可用的tomcat服務(wù)器上,并不影響我們提供的服務(wù)。所以tomcat集群就能帶來一定的高可用性。

    橫向擴展能力

    假設(shè)對于一臺服務(wù)器,通過不斷的升級它的cpu、內(nèi)存、更換固態(tài)硬盤等,我們認為這是縱向提高機器的配置,來達到提高tomcat所提供服務(wù)的性能,隨著硬件不斷提高,成本是指數(shù)級上升的。
    而橫向擴展能力則不同,比如天貓的雙11活動,因為平時訪問量沒有那么高,但是雙11訪問量非常高,當(dāng)tomcat集群完成后我們就可以做一個橫向擴展,只要增加tomcat節(jié)點就可以了,根據(jù)實際數(shù)據(jù)、歷史數(shù)據(jù)去做一個評估,當(dāng)然這個還要有一定的動態(tài)能力,根據(jù)實際的情況動態(tài)的增加幾個節(jié)點,讓nginx進行熱部署,就把新增的節(jié)點加入到集群中。

    Tomcat集群實現(xiàn)原理

    通過Nginx負載均衡對多個tomcat進行請求轉(zhuǎn)發(fā),也就是說將多個用戶的請求通過一定的策略打到集群的各個tomcat服務(wù)器中。

    Tomcat集群帶來了什么新問題

    1.Session登錄信息存儲及讀取問題

    通常在單tomcat環(huán)境下,我們都是將登錄信息存儲在原生提供的Session對象中。那么在集群環(huán)境下,當(dāng)用戶A發(fā)起登錄請求被轉(zhuǎn)發(fā)到tomcat1上,最終登錄的session信息存儲到了tomcat1上,用戶A此時訪問系統(tǒng)的某個服務(wù),該請求被轉(zhuǎn)發(fā)到了tomcat2上,但是tomcat2并沒有該用戶的登錄信息,所以會提示用戶未登錄,顯然這是不合理的。
    所以在集群環(huán)境下我們必須要解決多個tomcat之間session共享問題,讓用戶只需要登錄一次就可以繼續(xù)訪問其他的服務(wù)。

    2.服務(wù)器定時任務(wù)并發(fā)的問題

    當(dāng)服務(wù)器存在定時任務(wù)時,假設(shè)配置的30分鐘執(zhí)行一次,那么到了執(zhí)行的時間點,多個tomcat就會同時啟動這個定時任務(wù),帶來的問題就是首先如果定時任務(wù)的業(yè)務(wù)邏輯很復(fù)雜時,非常容易造成線上的數(shù)據(jù)錯亂,其次我們其實只希望有一臺服務(wù)器去執(zhí)行定時任務(wù)就夠了,那么多臺同時執(zhí)行也會帶來不必要的資源浪費。

    3.根據(jù)項目架構(gòu)和現(xiàn)有業(yè)務(wù)還有可能有更多的問題

    對于實際不同的場景還會有很多的問題,所以隨著項目架構(gòu)的演進,從架構(gòu)層面的變化會引起代碼層面的變化以及解決方案的變化,不要想當(dāng)然的認為集群就是多部署幾臺tomcat就行了。

    Tomcat集群架構(gòu)

    如圖為tomcat集群后簡要的架構(gòu)圖,左側(cè)是一個分布式的Redis Session Server,無論用戶請求哪臺tomcat,都將session信息存儲在這里,tomcat請求session也都從這里獲取。所以這里還需要做單點登錄功能。
    同時可以利用分布式Redis來做一個分布式鎖,解決多個tomcat在同一時間點啟動定時任務(wù)的問題。

    ?

    Nginx負載均衡配置

    負載均衡用于從 “upstream” 模塊定義的后端服務(wù)器列表中選取一臺服務(wù)器接受用戶的請求。模塊內(nèi)的server是服務(wù)器列表。Nginx負載均衡常用策略主要有以下5種,下面進行分別介紹這幾種策略,包括一些擴展的配置參數(shù)。

    輪詢

    默認的負載均衡策略,每個請求會按時間順序逐一分配到不同的后端服務(wù)器
    優(yōu)點:實現(xiàn)簡單
    缺點:不考慮每臺服務(wù)器的處理能力

    upstream www.silly.com{server 192.168.1.109:8080;server 192.168.1.111:8080; }

    權(quán)重

    在輪詢策略的基礎(chǔ)上指定輪詢的幾率,通過weight參數(shù)指定輪詢幾率,權(quán)重(weight)越高分配到需要處理的請求越多。
    weight默認值為1,如果多臺都配置了權(quán)重,比較相對值,意思是說如果兩臺服務(wù)器一臺權(quán)重為15,一臺為10,只代表訪問第一臺的概率是第二臺的1.5倍,而不是說25次訪問,有15次訪問第一臺。
    優(yōu)點:考慮了每臺服務(wù)器處理能力的不同(實際生產(chǎn)環(huán)境用的比較多的策略)

    upstream www.silly.com{server 192.168.1.109:8080 weight=10;server 192.168.1.111:8080 weight=15; }

    ip hash

    根據(jù)請求的IP,將IP進行哈希取模,分配到指定的服務(wù)器,對于同一客戶端IP的請求將發(fā)送到相同的服務(wù)器。
    優(yōu)點:能實現(xiàn)同一個用戶訪問同一個服務(wù)器,可以解決session共享問題。
    缺點:根據(jù)ip hash不一定分配平均,在IP變化的情況下也無法保證session會話。

    upstream www.silly.com{ip_hash;server 192.168.1.109:8080;server 192.168.1.111:8080; }

    url hash

    按訪問url的hash結(jié)果來分配請求,使每個url定向到同一個后端服務(wù)器
    優(yōu)點:能實現(xiàn)同一個服務(wù)訪問同一個服務(wù)器
    缺點:根據(jù)url hash分配請求會不平均,請求頻繁的url會請求到同一個服務(wù)器上

    upstream www.silly.com{server 192.168.1.109:8080;server 192.168.1.111:8080;hash $request_uri; }

    fair

    特點:按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配

    upstream www.silly.com{server 192.168.1.109:8080;server 192.168.1.111:8080;fair; }

    參數(shù)擴展

    down:表示當(dāng)前的server暫時不參與負載
    backup:當(dāng)其他非backup的機器down或者忙的時候,請求backup機器
    backup相當(dāng)于備用機器,能提高項目架構(gòu)的一定高可用性,用的不多,畢竟機器也是資源,需要成本

    upstream www.silly.com{ip_hash;server 192.168.1.109:8080 down;server 192.168.1.111:8080 weight=2;server 192.168.1.112:8080;server 192.168.1.115:8080 backup; }

    Tomcat集群環(huán)境搭建

    為了方便學(xué)習(xí)這里演示的是單機部署多應(yīng)用,也就是說在一臺Linux服務(wù)器上部署多個tomcat服務(wù)器,這里只配置兩臺tomcat,如果要配置更多臺tomcat實例,方法是一樣的,只需要保證tomcat的端口號必須不能重復(fù),必須是系統(tǒng)沒有使用的。

    安裝環(huán)境

    CentOS安裝參考:Linux安裝
    虛擬機使用參考:虛擬機的使用
    tomcat安裝參考:Linux下安裝Tomcat
    nginx安裝參考:Linux下安裝Nginx

    安裝兩個tomcat可以先解壓下載的tomcat安裝包,然后復(fù)制一份解壓縮目錄重命名即可。
    這里將nginx和tomcat都安裝在/usr/local目錄下,tomcat目錄分別命名為tomcat1和tomcat2。

    配置環(huán)境變量

    vim /etc/profile # 在文件末尾添加如下內(nèi)容 export CATALINA_BASE=/usr/local/tomcat1 export CATALINA_HOME=/usr/local/tomcat1 export TOMCAT_HOME=/usr/local/tomcat1export CATALINA_2_BASE=/usr/local/tomcat2 export CATALINA_2_HOME=/usr/local/tomcat2 export TOMCAT_2_HOME=/usr/local/tomcat2 # 通過vim的 ":wq" 命令進行保存退出 # 使配置生效 source /etc/profile

    修改兩個tomcat的編碼

    vim ${tomcat}/conf/server.xml
    進入tomcat安裝目錄,編輯conf目錄下的server.xml文件,找到如下節(jié)點添加編碼配置:URIEncoding="UTF-8"

    <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8"/>

    修改第二個tomcat的配置

    修改第二個tomcat的bin目錄下的catalina.sh文件,找到# OS注釋內(nèi)容,在其下面新增配置

    vim /usr/local/tomcat2/bin/catalina.sh # 新增如下配置 # OS specific support. $var _must_ be set to either true or false. export CATALINA_BASE=$CATALINA_2_BASE export CATALINA_HOME=$CATALINA_2_HOME

    修改第二個tomcat的conf目錄下的server.xml文件,,修改3個端口配置

    vim /usr/local/tomcat2/conf/server.xml # 修改以下3個端口,修改為9005,9080,9009 <Server port="9005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Connector port="9080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8"/><Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />

    為了方便對兩個tomcat進行區(qū)分,我們修改第二個tomcat的主頁logo圖片,即替換/usr/local/tomcat2/webapps/ROOT/tomcat.png,圖片名保持一致。

    防火墻配置

    如果開啟了防火墻,需要配置防火墻規(guī)則,先將兩個tomcat的端口進行開放,主要是為了測試,在配置了Nginx負載均衡后就可以關(guān)閉端口了。

    vim /etc/sysconfig/iptables # 添加如下規(guī)則 -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT -A INPUT -p tcp -m tcp --dport 9080 -j ACCEPT # 重啟iptables service iptables restart

    tomcat驗證

    分別啟動兩個tomcat,即執(zhí)行命令:${tomcat}/bin/startup.sh
    注意檢查兩個tomcat啟動使用的環(huán)境變量是否正確。

    分別訪問兩個tomcat,這里是在windows下訪問虛擬機的IP + 端口。

    host配置

    由于我們是在本機進行搭建,所以需要配置host虛擬域名映射,如果是線上環(huán)境有真實域名,請忽略此步。
    修改瀏覽器所在的主機的host文件,這里修改的是windows的host文件:C:\Windows\System32\drivers\etc
    在末尾添加一行配置:192.168.0.109 www.silly.com
    打開cmd,執(zhí)行命令:ping www.silly.com,回復(fù)中顯示的是虛擬機的IP則說明OK。

    Nginx配置

  • 修改nginx主配置文件nginx.conf
  • vim /usr/local/nginx/conf/nginx.conf # 在注釋內(nèi)容上面添加如下內(nèi)容 include vhost/*.conf; # another virtual host

    ? ? ?2.?在Nginx安裝目錄的conf目錄下新建一個vhost目錄,然后在vhost目錄下新建配置文件,文件? ? ? ? ? ?名需要以.conf結(jié)尾

    cd /usr/local/nginx/conf/ mkdir vhost cd vhost/ vim www.silly.com.conf

    配置文件添加如下內(nèi)容,這里server_name配置的是主機對應(yīng)的域名,proxy_pass是反向代理配置,upstream是負載均衡配置。

    upstream www.silly.com{server 127.0.0.1:8080 weight=1;server 127.0.0.1:9080 weight=2; }server {listen 80;autoindex on;server_name silly.com www.silly.com;access_log /usr/local/nginx/logs/access.log combined;index index.html index.htm index.jsp index.php;location / {proxy_pass http://www.silly.com;add_header Access-Control-Allow-Origin *;} }

    集群驗證

    啟動Nginx,即執(zhí)行命令:${nginx}/sbin/nginx,打開瀏覽器,清除緩存,訪問域名即http://www.silly.com,不停刷新瀏覽器,可以發(fā)現(xiàn)一會訪問到了8080的tomcat,一會訪問到了9090的tomcat,到此整個Tomcat集群及Nginx負載均衡環(huán)境也就搭建完成了,當(dāng)然關(guān)于nginx的配置還有很多細節(jié)的配置項這里就不做介紹了。

    多機部署多應(yīng)用

    事實上多機部署多應(yīng)用更加簡單,所以學(xué)會單機部署多應(yīng)用也就自然能搞定實際生成環(huán)境多機的部署了。

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的Nginx+Tomcat集群环境搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。