溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

發(fā)布時間:2020-04-20 12:05:44 來源:億速云 閱讀:275 作者:三月 欄目:建站服務(wù)器

下文給大家?guī)砣绾螌崿F(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用億速云在行業(yè)內(nèi)累計的經(jīng)驗做一個解答。

一、nginx與tomcat實現(xiàn)負載均衡

1、在/usr/local/ngnix/conf  創(chuàng)建文件 nginx-tomcat.conf

文件內(nèi)容:

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

user  nobody;
worker_processes  2;
events {   
    worker_connections  1024;    
}
http{    # upstream 配置一組后端服務(wù)器,
    # 請求轉(zhuǎn)發(fā)到upstream后,nginx按策略將請求指派出某一服務(wù)器
    # 即配置用于負載均衡的服務(wù)器群信息    upstream tomcats{
        fair;
        server 121.42.41.143:8080;
        server 219.133.55.36;
    }
    server {
        listen       80;
        server_name  121.42.41.143;
        access_log  logs/tomcat-nginx.access.log  combined;        # 反向代理設(shè)置,將所有/路徑下請求發(fā)給本機上的tomcat
        location / {            #root   html;            index  index.html index.htm;            #==========Nginx提供的代理============
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcats;
        }
   }
}

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

2、使用該配置文件啟動nginx (啟動前先關(guān)閉nginx)

    [root@iZ28b4kreuaZ bin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-tomcat.conf

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

二、配置文件詳解:

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。 View Code

 

三、fair策略的安裝

fair策略:根據(jù)各個服務(wù)器的性能的不同,自動選擇使用響應(yīng)能力強的服務(wù)器。該策略是第三方提供的,所以要先安裝。

安裝步驟

1、下載 gnosek-nginx-upstream-fair-a18b409.tar.gz

2、解壓  tar zxvf gnosek-nginx-upstream-fair-a18b409.tar.gz

3、將解壓后的文件移動到 /usr/local目錄下并 改名為 nginx-upstream-fair

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

4、將該模塊添加到我們安裝的nginx中

a、首先進入nginx-1.8.1源文件目錄下在執(zhí)行:

[root@iZ28b4kreuaZ nginx-1.8.1]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-upstream-fair/

b、執(zhí)行:make    進行編譯

c、進入 nginx-1.8.1/objs/下將最新的nginx啟動項 覆蓋原來的 /usr/local/nginx/sbin/nginx啟動項。

    [root@iZ28b4kreuaZ objs]# cp nginx /usr/local/nginx/sbin

d、開啟Nginx 看看是可以使用

 四、在分布式服務(wù)器集群中session共享問題

問題:當我們的用戶在tomcat1服務(wù)器上登錄后,tomcat1會保存用戶的登錄信息,但當用戶的請求被代理服務(wù)器分配給tomcat2/tomcat3服務(wù)器時,這時就會出現(xiàn)tomcat2/tomcat3無法獲取用戶登錄信息,從而導(dǎo)致用戶需要重新登錄的現(xiàn)象。我們有三種解決方案:

1、同一個用戶的請求鎖定在同一臺服務(wù)器上,這樣就不會存在session在不同服務(wù)器之間共享問題。這種方案簡單,但缺乏容錯性(一旦服務(wù)器故障,那用戶的請求將被分配給其他服務(wù)器,這時就需要重新登錄)

實現(xiàn)方式:設(shè)置集群策略為 ip_hash ;

 upstream tomcats{
        ip_hash;
    }

2、session復(fù)制方式: 當任何服務(wù)器中session值發(fā)生改變,他都會將該改變廣播給其他服務(wù)器,當其他服務(wù)器收到廣播后也做相應(yīng)的改變,從而實現(xiàn)session在所有服務(wù)器中一直。缺點 當集群中tomcat服務(wù)器很多時會增加網(wǎng)絡(luò)負荷,性能低下。實現(xiàn)方式:

a、在tomcat的server.xml中配置session廣播

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

      <!-- 基于網(wǎng)絡(luò)廣播的策略,一個節(jié)點session變化,其它節(jié)點同步復(fù)制,節(jié)點多或數(shù)據(jù)量大時性能低下 -->
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
        <Channel className="org.apache.catalina.tribes.group.GroupChannel">   
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
                      address="192.168.6.223"  
                      port="8080"/> 
        </Channel>
      </Cluster>

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

b、在我們的分布式應(yīng)用的web.xml 中添加 <distributable/>標簽

<distributable/>:作用是公告我們的應(yīng)用可以處于集群環(huán)境中。

 3、通過創(chuàng)建額外的共享空間用來管理session,一般我們使用分布式緩存技術(shù)redis、memcached緩存技術(shù),在這里我么使用memcached。

  a、memcached的安裝:http://www.cnblogs.com/jalja/p/6121978.html

  b、memcached 的 session共享原理

   粘性共享:

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

  非粘性:

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

c、tomcat訪問memcached的相關(guān)環(huán)境(我們使用的是tomcat7)

  1. 復(fù)制jar包到tomcat/lib目錄,jar分三類

    1)spymemcached.jar memcached java客戶端        

    2)memcached相關(guān)的包  memcached-session-manager-{version}.jar       核心包         memcached-session-manager-tc{tomcat-version}-{version}.jar   Tomcat版本相關(guān)的包

    3)序列化工具包,有多種可選方案,不設(shè)置時使用jdk自帶序列化,其它可選kryo,javolution,xstream,flexjson等   msm-{tools}-serializer-{version}.jar  其它序列化工具相關(guān)包  一般第三方序列化工具不需要實現(xiàn)serializable接口

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。

d、配置Context,加入處理session的Manager  MemcachedBackupSessionManager
 Context配置查找順序:
        1)conf/context.xml 全局配置,作用于所有應(yīng)用
        2) conf/[enginename]/[hostname]/context.xml.default 全局配置,作用于指定host下全部應(yīng)用
        3) conf/[enginename]/[hostname]/[contextpath].xml 只作用于contextpath指定的應(yīng)用
        4) 應(yīng)用META-INF/context.xml 只作用于本應(yīng)用
        5) conf/server.xml <Host>下 作用于Context docBase指定的應(yīng)用
         如果只希望session管理作用于特定應(yīng)用,最好用3,4方式設(shè)置,希望作用全體,可用1,2,5設(shè)置

 conf/context.xml的配置:

如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。 View Code

 四、集群環(huán)境開發(fā)注意事項

1、實體類要序列化( implements Serializable)

private static final long serialVersionUID = 3349238980725146825L;

2、獲取客戶端請求地址的方式 。在nginx-tomcat.conf中添加如下配置:

   server {
        location / {
            proxy_set_header   X-Real-IP        $remote_addr; # 真實的客戶端IP        }
   }

java代碼:

public static String  getIp(HttpServletRequest request){
        String remoteIp =request.getRemoteAddr();
        String headIp=request.getHeader("X-Real-IP");        return headIp==null?remoteIp:headIp;
    }

3、動靜分離 
  把靜態(tài)文件放在nginx服務(wù)器中(css、js、圖片)

看了以上關(guān)于如何實現(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。,如果大家還有什么地方需要了解的可以在億速云行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,億速云技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗了。

 

 

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI