Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> 電腦軟件教程 >> 服務器技術 >> 關於服務器 >> Apache負載均衡設置方法: mod

Apache負載均衡設置方法: mod

日期:2017/2/8 10:15:49      編輯:關於服務器

一般來說,負載均衡就是將客戶端的請求分流給後端的各個真實服務器,達到負載均衡的目的。還有一種方式是用兩台服務器,一台作為主服務器 (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提供代理服務器功能,mod_proxy_balancer提供負載均衡功能, mod_proxy_http讓代理服務器能支持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 這條可以看出,實際上負載均衡器就是一個反向代理,只不過它的代理轉發地址不是某台具體的服務器,而是一個 balancer:// 協議:

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

下面那段是用來監視負載均衡的工作情況的,調試時可以加上(生產環境中禁止使用!),然後訪問 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的文檔。

Copyright © Windows教程網 All Rights Reserved