keepalived+lvs+nginx+tomcat輪詢模式刷新很久才切換realserver
編輯:狂族晨曦 來源:系統運維,經驗雜筆 日期:2016-09-08 閱讀: 7,870 次 9 條評論 » 百度已收錄
先森剛接觸運維,當然要學習部署各種集群環境,從最開始的LVS+nginx搭建,到現在Keepalived+lvs+nginx+tomcat搭建,集群的搭建也開始慢慢的得心應手了。不過,前進的道路上總是荊棘遍布。
先森的LVS用的是DR模式下的RR輪詢算法,這個算法會實現的效果是每個訪問會輪流分布到后端服務器1、2、3..上面去,后端服務器相當于在和訪問打車輪戰。

keepalived+lvs+nginx+tomcat拓撲圖
然而,先森環境部署好之后,要刷新很久之后,才換切換到另一個后端服務器,雖然這也是一定意義上的達到了目標,但心中總還是有個疙瘩。
那么為什么會出現這樣的問題呢?
影響因素
經過先森的測試,影響刷新輪詢的配置keepalived、Nginx、Tomcat分別有一個,也就是一共有三個配置會影響到。
keepalived配置
首先,在keepalived的配置文件中,存在一個會話保持時間的配置。
vim /etc/keepalived/keepalived.conf persistence_timeout 50 #50秒為默認值

會話保持時間
這里有個默認為50秒的會話保持時間。如果設置了這一項,那么久會等待50秒后才會切換realserver。
如果上面的這樣配置已經刪除或注釋,但問題依舊存在,那么一定就是Nginx和Tomcat的配置問題了。
Nginx配置
編輯打開到nginx的配置文件:
vim /usr/local/nginx/conf/nginx.conf
在http模塊下面就存在影響刷新輪詢的配置:

Nginx的配置
在nginx.conf中,有一項配置:
keepalive_timeout 65;
這是nginx默認的連接超時時間,默認為65秒。將數字改為0即可。或者把上圖中65那行注釋,0那行取消注釋就好。
Tomcat配置
同樣的,在Tomcat中也有相關配置。同樣編輯打開Tomcat的配置文件:
vim /web/soft/tomcat/conf/server.xml
找到設置Http訪問端口那一段:

Tomcat的配置
在server.xml中,設置外部訪問端口那一段,有個connectionTimeout的設置,即連接超時時間:
connectionTimeout="20000"
這個值默認是2000毫秒,將其改為10毫秒左右即可。不可以改為0,設置為0表示永不超時。
警告
總體來說,上面的三個配置都是修改的會話保持時間。但是會話保持時間是不能隨意修改的。
什么是會話保持呢?會話保持是指在負載均衡器上有一種機制,在作負載均衡的同時,還保證同一用戶相關連的訪問請求會被分配到同一臺服務器上。
會話保持有什么作用呢?
舉例說明一下如果有一個用戶訪問請求被分配到服務器A,并且在服務器A登錄了,并且在很短的時間,這個用戶又發出了一個請求,如果沒有會話保持功能的話,這個用戶的請求很有可能會被分配到服務器B去,這個時候在服務器B上是沒有登錄的,所以你要重新登錄,但是用戶并不知道自己的請求被分配到了哪里,用戶的感覺就是登錄了,怎么又要登錄,用戶體驗很不好。
所以,切記的是,修改上面的三項會話保持時長的配置僅僅只是用于環境測試,如果在生產環境,一定要按照需求設置。
歷史上的今天:
- 2015: 2015-09-08-六號線報社工作職能(0)
- 2015: WordPress添加友情鏈接功能(0)
轉載請注明出處來自http://www.cnidcc.cn/keepalived_lvs_nginx_tomcat.html

川公網安備 51011202000104號
問下樓主 評論插件叫什么
@管家婆: 評論沒有用插件,是WordPress原生的。
@狂族晨曦: 知道了 研究下WordPress
技術活。
好深奧,博主邦邦噠,一定很多學妹追求!
送幾個66666666666666666666666
好復雜的集群
看起來好難啊
我記得tomcat里面keepalive_timeout參數才是決定輪詢建立新請求的間隔的,timeout只是決定同一請求在多久后斷開連接。這個和apache相類似。