Apache負載平衡設定方法 mod_proxy使用介紹_Linux

來源:互聯網
上載者:User
一般來說,負載平衡就是將用戶端的請求分流給後端的各個真實伺服器,達到負載平衡的目的。還有一種方式是用兩台伺服器,一台作為主伺服器(Master),另一台作為熱備份(Hot Standby),請求全部分給主伺服器,在主伺服器當機時,立即切換到備份伺服器,以提高系統的整體可
第一次看到這個標題時我也很驚訝,Apache居然還能做負載平衡?真是太強大了。經過一番調查後發現的確可以,而且功能一點都不差。這都歸功於 mod_proxy 這個模組。不愧是強大的Apache啊。

廢話少說,下面就來解釋一下負載平衡的設定方法。

一般來說,負載平衡就是將用戶端的請求分流給後端的各個真實伺服器,達到負載平衡的目的。還有一種方式是用兩台伺服器,一台作為主伺服器(Master),另一台作為熱備份(Hot Standby),請求全部分給主伺服器,在主伺服器當機時,立即切換到備份伺服器,以提高系統的整體可靠性。

1. 負載平衡的設定

1).基本配置
Apache可以應對上面這兩種需求。先來討論一下如何做負載平衡。假設一台apache伺服器網域名稱為www.a.com, 首先需要啟用Apache的幾個模組:
Httpd.conf代碼
複製代碼 代碼如下:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

mod_proxy提供Proxy 伺服器功能,mod_proxy_balancer提供負載平衡功能, mod_proxy_http讓Proxy 伺服器能支援HTTP協議。如果把mod_proxy_http換成其他協議模組(如mod_proxy_ftp),或許能支援其他協議的負載平衡,有興趣的朋友可以自己嘗試一下。

然後要添加以下配置:
Httpd.conf代碼
複製代碼 代碼如下:

ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://node-a.myserver.com:8080
BalancerMember http://node-b.myserver.com:8080
</Proxy>
ProxyPass / balancer://mycluster/
# 警告:以下這段配置僅用於調試,絕不要添加到生產環境中!!!
<Location /balancer-manager>
SetHandler balancer-manager
order Deny,Allow
Deny from all
Allow from localhost
</Location>

註:node-a.myserver.com,node-b.myserver.com是另外兩台伺服器的網域名稱,不是當前伺服器的網域名稱

從上面的 ProxyRequests Off 這條可以看出,實際上負載平衡器就是一個反向 Proxy,只不過它的代理轉寄地址不是某台具體的伺服器,而是一個 balancer:// 協議:

ProxyPass / balancer://mycluster協議地址可以隨便定義。然後,在<Proxy>段中設定該balancer協議的內容即可。 BalancerMember指令可以添加負載平衡組中的真實伺服器位址。

下面那段<Location /balancer-manager>是用來監視負載平衡的工作情況的,調試時可以加上(生產環境中禁止使用!),然後訪問 http://localhost/balancer-manager/ 即可看到負載平衡的工作狀況。

OK,改完之後重啟伺服器,訪問你的Apache所在伺服器的地址(www.a.com),即可看到負載平衡的效果了。

出錯提示:
訪問網頁提示Internal Serveral Error,察看error.log檔案
Error.log代碼
複製代碼 代碼如下:

[warn] proxy: No protocol handler was valid for the URL /admin/login_form. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.


原因是配置:# ProxyPass / balancer://mycluster 可能少了一個/

2). 負載比例分配
開啟 balancer-manager 的介面,可以看到請求是平均分配的。

如果不想平均分配怎麼辦?給 BalancerMember 加上 loadfactor 參數即可,取值範圍為1-100。比如你有三台伺服器,負載分配比例為 7:2:1,只需這樣設定:
Httpd.conf代碼
複製代碼 代碼如下:

ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://node-a.myserver.com:8080 loadfactor=7
BalancerMember http://node-b.myserver.com:8080 loadfactor=2
BalancerMember http://node-c.myserver.com:8080 loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster


3).負載分配演算法

預設情況下,負載平衡會盡量讓各個伺服器接受的請求次數滿足預設的比例。如果要改變演算法,可以使用 lbmethod 屬性。如:
Httpd.conf代碼
複製代碼 代碼如下:

ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://node-a.myserver.com:8080 loadfactor=7
BalancerMember http://node-b.myserver.com:8080 loadfactor=2
BalancerMember http://node-c.myserver.com:8080 loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster
ProxySet lbmethod=bytraffic


lbmethod可能的取值有:

lbmethod=byrequests 按照請求次數均衡(預設)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(總是分配給活躍請求數最少的伺服器)

各種演算法的原理請參見Apache的文檔。

2. 熱備份(Hot Standby)
熱備份的實現很簡單,只需添加 status=+H 屬性,就可以把某台伺服器指定為備份伺服器:

Httpd.conf代碼
複製代碼 代碼如下:

ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://node-a.myserver.com:8080
BalancerMember http://node-b.myserver.com:8080 status=+H
</Proxy>
ProxyPass / balancer://mycluster

從 balancer-manager 介面中可以看到,請求總是流向 node-a ,一旦node-a掛掉, Apache會檢測到錯誤並把請求分流給 node-b。Apache會每隔幾分鐘檢測一下 node-a 的狀況,如果node-a恢複,就繼續使用node-a。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.