第一次看到這個標題時我也很驚訝,apache居然還能做負載均衡?真是太強大了。 經過一番調查後發現的確可以,而且功能一點都不差。 這都歸功於 mod_proxy 這個模組。 不愧是強大的apache啊。
廢話少說,下面就來解釋一下負載均衡的設定方法。
一般來說,負載均衡就是將客戶端的請求分流給後端的各個真實伺服器, 達到負載均衡的目的。還有一種方式是用兩台伺服器,一台作為主伺服器(master), 另一台作為熱備份(hot standby),請求全部分給主伺服器,在主伺服器當機時, 立即切換到備份伺服器,以提高系統的整體可靠性。
負載均衡的設定
apache可以應對上面這兩種需求。先來討論一下如何做負載均衡。 首先需要啟用apache的幾個模組:
loadmodule proxy_module modules/mod_proxy.somod_proxy提供**伺服器功能,mod_proxy_balancer提供負載均衡功能, mod_proxy_http讓**伺服器能支援http協議。如果把mod_proxy_http換成 其他協議模組(如mod_proxy_ftp),或許能支援其他協議的負載均衡, 有興趣的朋友可以自己嘗試一下。loadmodule proxy_balancer_module modules/mod_proxy_balancer.so
loadmodule proxy_http_module modules/mod_proxy_http.so
然後要新增以下配置:
proxyrequests offbalancermember
balancermember
proxypass / balancer://mycluster
# 警告:以下這段配置僅用於除錯,絕不要新增到生產環境中!!!
sethandler balancer-manager
order deny,allow
deny from all
allow from localhost
proxypass / balancer://mycluster協議位址可以隨便定義。然後,在段中設定該balancer協議的內容即可。 balancermember指令可以新增負載均衡組中的真實伺服器位址。
下面那段是用來監視負載均衡的工作情況的, 除錯時可以加上(生產環境中禁止使用!),然後訪問http://localhost/balancer-manager/ 即可看到 負載均衡的工作狀況。
ok,改完之後重啟伺服器,訪問你的apache所在伺服器的位址,即可看到負載均衡的效果了。 開啟 balancer-manager 的介面,可以看到請求是平均分配的。
如果不想平均分配怎麼辦?給 balancermember 加上 loadfactor 引數即可,取值範圍為1-100。 比如你有三颱伺服器,負載分配比例為 7:2:1,只需這樣設定:
proxyrequests off預設情況下,負載均衡會盡量讓各個伺服器接受的請求次數滿足預設的比例。 如果要改變演算法,可以使用 lbmethod 屬性。如:balancermember loadfactor=7
balancermember loadfactor=2
balancermember loadfactor=1
proxypass / balancer://mycluster
proxyrequests offlbmethod可能的取值有:balancermember loadfactor=7
balancermember loadfactor=2
balancermember loadfactor=1
proxypass / balancer://mycluster
proxyset lbmethod=bytraffic
lbmethod=byrequests
按照請求次數均衡(預設)
lbmethod=bytraffic
按照流量均衡
lbmethod=bybusyness
按照繁忙程度均衡(總是分配給活躍請求數最少的伺服器)
各種演算法的原理請參見apache的文件。
熱備份(hot standby)
熱備份的實現很簡單,只需新增 status=+h 屬性,就可以把某台伺服器指定為備份伺服器:
proxyrequests off從 balancer-manager 介面中可以看到,請求總是流向 node-a ,一旦node-a掛掉, apache會檢測到錯誤並把請求分流給 node-b。apache會每隔幾分鐘檢測一下 node-a 的狀況, 如果node-a恢復,就繼續使用node-a。balancermember
balancermember status=+h
proxypass / balancer://mycluster
springcloud(Ribbon負載均衡)
搭建步驟 1.使用者服務的集群 2.訂單服務整合ribbon 2.1.匯入ribbon的依賴 2.2.在resttemplate的bean定義方法上加上 loadbalanced註解 2.3.把訂單的controller向使用者發起呼叫的resttemplate的url使用服務名呼叫,如 http ...
SpringCloud Ribbon 負載均衡
ribbon eureka都是netflix旗下的專案,eureka client內建了ribbon,用於實現負載均衡,預設使用輪詢。輪詢是最簡單的負載均衡演算法,每次呼叫服務拿到節點列表後,從前往後依次輪詢類表中的每個節點,誰空閒就呼叫誰。測試時往往都是呼叫列表的第乙個節點,因為重新整理的手速遠遠...
linux centos nginx做負載均衡
nginx 是 c語言 開發,建議在 linux 上執行,當然,也可以安裝 windows 版本,本篇則使用 centos 7 作為安裝環境。一.gcc 安裝 yum install gcc c 二.pcre pcre devel 安裝pcre perl compatible regular exp...