nginx負載均衡實現tomcat集群方案簡要小結
重點兩部分:一、負載均衡二、tomcat集群
所謂tomcat集群,就是可以向外提供并行服務的多臺機器,任何一臺服務器宕機,其它服務器可以替代它向外提供服務,而不影響用戶訪問。
nginx是一個常用的反向代理服務,可自定義模塊,實現請求轉發及負載均衡(根具體采用策略有關)。為了tomcat集群的高可用性,還需要實現nginx的雙機熱備。
一,如果僅是對外提供一個頁面訪問,不用區分單一用戶(不區分每個訪問session,不涉及用戶權限,用戶資料等內容),僅僅配置nginx負載均衡策略即可。
nginx負載均衡策略主要分一下四種:
1)、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器宕機,能自動剔除。
2)、ip_hash 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器。
3)、fair 按后端服務器的響應時間來分配請求,響應時間短的優先分配。
4)、url_hash 按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
二,如果涉及到用戶session,做一些鑒權緩存、存放臨時信息時,就必須做tomcat的session共享。
目前可參考到的session共享方式主要分為兩種。
1)利用tomcat自帶的組播機制,實現session復制。
對tomcat及應用的若干配置文件進行配置即可實現,網上有很多資料可參考。但這種方式些弊端,看過一些資料,不建議用session復制的方式。在實際使用過程中,也發現有存在session莫名失蹤的現象。
2)利用第三方機制存儲session。
比較常見的是tomcat集成memcached服務器來存儲session。實際項目中,我們采用過利用redis實現session存儲,redis 高效的存取性能為高效的訪問提供了保障,但是目前redis的集群功能似乎沒有發布,如何解決redis的單點故障需要研究。
小結: 是否實現session共享與nginx的負載策略有很大關系。比如采用輪詢策略,就必須實現session共享,因為客戶端會訪問到每臺服務器;而如果 采用ip_hash策略,就可以不用考慮session共享的問題了,但是ip_hash有些缺陷使它不能隨便使用(如多臺pc使用同一個外網ip)。
最近發現一個nginx的粘連模塊(類似session粘連),可以看做nginx的第5種均衡策略。它利用客戶端cookie,對其寫入一個route參數,每次訪問可以根據route的值,固定的訪問一臺服務器,解決的session共享的問題。