您好,登錄后才能下訂單哦!
下文給大家?guī)砣绾螌崿F(xiàn)nginx與tomcat云服務(wù)器集群做負載均衡的方法詳細解答。,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用億速云在行業(yè)內(nèi)累計的經(jīng)驗來做一個解答。
1、在/usr/local/ngnix/conf 創(chuàng)建文件 nginx-tomcat.conf
文件內(nèi)容:
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; } } }
2、使用該配置文件啟動nginx (啟動前先關(guān)閉nginx)
[root@iZ28b4kreuaZ bin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-tomcat.conf
View Code
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
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 看看是可以使用
問題:當我們的用戶在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廣播
<!-- 基于網(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>
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共享原理
粘性共享:
非粘性:
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接口
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的配置:
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)驗了。
免責(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)容。