首頁 運維 Apache Apache如何做負載平衡配置

Apache如何做負載平衡配置

Jun 29, 2019 am 10:39 AM
apache 負載平衡

什麼是負載平衡? Apache中如何做負載平衡配置?以下這篇文章就來跟大家介紹Apache 負載平衡配置的方法,希望對大家有幫助。

Apache如何做負載平衡配置

什麼是負載平衡

負載平衡(Load Balance)是分散式系統架構設計中必須考慮的因素之一,它通常是指,將請求/資料【均勻】分攤到多個操作單元上執行,負載平衡的關鍵在於【均勻】

常見的負載平衡方案


#常見網路分散式架構如上,分為客戶端層、反向代理nginx層、網站層、服務層、資料層。可以看到,每一個下游都有多個上游調用,只需要做到,每一個上游都均勻訪問每一個下游,就能實現「將請求/資料【均勻】分攤到多個操作單元上執行」。

【客戶端層->反向代理層】的負載平衡


【客戶端層】到【反向代理層】的負載平衡,是透過「DNS輪詢」實現的:DNS-server對於一個網域配置了多個解析ip,每次DNS解析請求來訪問DNS-server,會輪詢回傳這些ip,保證每個ip的解析機率是相同的。這些ip就是nginx的外網ip,以做到每台nginx的請求分配也是平衡的。

【反向代理層->站點層】的負載平衡


【反向代理層】到【站點層】的負載平衡,是透過「nginx」來實現的。透過修改nginx.conf,可以實現多種負載平衡策略:

1)請求輪詢:和DNS輪詢類似,請求依序路由到各個web-server

2 )最少連線路由:哪個web-server的連線少,路由到哪一個web-server

3)ip雜湊:依照存取使用者的ip雜湊值來路由web-server,只要使用者的ip分佈是均勻的,請求理論上也是均勻的,ip哈希均衡方法可以做到,同一個用戶的請求固定落到同一台web-server上,此策略適合有狀態服務,例如session(58沈劍備註:可以這麼做,但強烈不建議這麼做,站點層無狀態是分散式架構設計的基本原則之一,session最好放到資料層儲存)

#4)…

#【站點層->服務層】的負載平衡



【站點層】到【服務層】的負載平衡,是透過「服務連接池」來實現的。

上游連接池會建立與下游服務多個連接,每次請求都會「隨機」選取連接來存取下游服務。

上一篇文章《RPC-client實現細節》中有詳細的負載平衡、故障轉移、超時處理的細節描述,歡迎點擊link查閱,此處不再展開。

【資料層】的負載平衡

在資料量很大的情況下,由於資料層(db,cache)涉及資料的水平切分,所以資料層的負載平衡更為複雜一些,它分為「資料的平衡」與「請求的平衡」

資料的均衡是指:水平切分後的每個服務(db,cache),資料量是差不多的。

請求的均衡是指:水平切分後的每個服務(db,cache),請求量是差不多的。

業界常見的水平切分方式有這麼多種:

一、依照range水平切分

#每一個資料服務,儲存一定範圍的資料,上圖為例:

user0服務,儲存uid範圍1-1kw

user1服務,儲存uid範圍1kw-2kw

這個方案的好處是:

(1)規則簡單,service只需判斷uid範圍就能路由到對應的儲存服務

(2)資料均衡性較好

(3)比較容易擴展,可以隨時加上一個uid[2kw,3kw]的資料服務

不足是:

(1)請求的負載不一定平衡,一般來說,新註冊的用戶會比老用戶更活躍,大range的服務請求壓力會更大

二、按照id哈希水平切分


每一個資料服務,儲存某個key值hash後的部分資料,上圖為例:

user0服務,儲存偶數uid資料

user1服務,儲存奇數uid資料

這個方案的好處是:

(1)規則簡單,service只需對uid進行hash能路由到對應的儲存服務

(2)資料均衡性較好

(3)請求均勻性較好

不足是:

(1)不容易擴展,擴展一個資料服務,hash方法改變時候,可能需要進行資料遷移

總結

#負載平衡(Load Balance)是分散式系統架構設計中必須考慮的因素之一,它通常是指,將請求/資料【均勻】分攤到多個操作單元上執行,負載平衡的關鍵在於【均勻】 。

(1)【客戶端層】到【反向代理層】的負載平衡,是透過「DNS輪詢」實現的

(2)【反向代理層】到【站點層】的負載平衡,是透過「nginx」實現的

(3)【站點層】到【服務層】的負載平衡,是透過「服務連接池」實現的

(4)【資料層】的負載平衡,要考慮「資料的平衡」與「請求的平衡」兩點,常見的方式有「依照範圍水平切分」與「hash水平切分」

Apache負載平衡設定方法

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

第一次看到這個標題時我也很驚訝,Apache居然還能做負載平衡?真是太強大了。經過一番調查後發現的確可以,而且功能一點都不差。這都歸功於 mod_proxy 這個模組。不愧是強大的Apache啊。 

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

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

1. 負載平衡的設定 

1).基本設定 

Apache可以處理上述這兩個需求。先來討論如何做負載平衡。假設一台apache伺服器網域為www.a.com, 首先需要啟用Apache的幾個模組: 

程式碼如下:

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),或許能支援其他協定的負載平衡,有興趣的朋友可以自己試試看。
接著要新增以下設定: 

程式碼如下:

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 属性。如:

代码如下:

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 属性,就可以把某台服务器指定为备份服务器:

代码如下:

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。

apache负载均衡的安装和实现方法

其实无论是分布式,数据缓存,还是负载均衡,无非就是改善网站的性能瓶颈,在网站源码不做优化的情况下,负载均衡可以说是最直接的手段了。其实抛开这个名词,放开了说,就是希望用户能够分流,也就是说把所有用户的访问压力分散到多台服务器上,也可以分散到多个tomcat里,如果一台服务器装多个tomcat,那么即使是负载均衡,性能也提高不了太多,不过可以提高稳定性,即容错性。当其中一个主tomcat当掉,其他的tomcat也可以补上,因为tomcat之间实现了Session共享。待tomcat服务器修复后再次启动,就会自动拷贝所有session数据,然后加入集群。这样就可以不间断的提供服务。如果要真正从本质上提升性能,必须要分布到多台服务器。同样tomcat也可以做到。网上相关资料比较多,可以很方便的查到,但是质量不算高。我希望可以通过这篇随笔,系统的总结。

本文的 例子是同一台服务器上运行两个tomcat,做两个tomcat之间的负载均衡。其实多台服务器各配置一个tomcat也可以,而且那样的话,可以使用安装版的tomcat,而不用是下文中的免安装的tomcat,而且tomcat端口配置也就不用修改了。下文也会提到。

tomcat的负载均衡需要apache服务器的加入来实现。在进行配置之前请先卸载调已安装的tomcat,然后检查apache的版本。我这次配置使用的是apache-tomcat-6.0.18免安装版本,我亲自测试后推断安装版的tomcat在同一台机子上会不能启动两个以上,可能是因为安装版的tomcat侵入了系统,导致即使在server.xml里修改了配置,还是会引起冲突。所以我使用tomcat免安装版。

apache使用的是apache_2.2.11-win32-x86-no_ssl.msi。如果版本低于2.2Apache负载均衡的配置要有所不同,因为这个2.2.11和2.2.8版本集成了jk2等负载均衡工具,所以配置要简单许多。别的版本我没有具体测试,有待考究。这两个软件可以到官方网站下载。

把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个"It works!"的页面就代表Apache已经正常工作了。把tomcat解压到任意目录,赋值一个另命名。起名和路径对配置没有影响。但要保证端口不要冲突,如果装有Oracle或IIS的用户需要修改或关闭相关接口的服务。当然jdk的配置也是必须的,这个不再过多叙述。

想要达到负载均衡的目的,首先,在Apache安装目录下找到conf/httpd.conf文件,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。

代码如下:

LoadModule proxy_module modules/mod_proxy.so 
 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 
 LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 
 LoadModule proxy_connect_module modules/mod_proxy_connect.so 
 LoadModule proxy_ftp_module modules/mod_proxy_ftp.so 
 LoadModule proxy_http_module modules/mod_proxy_http.so
登入後複製

向下拉动文档找到节点,在DirectoryIndex index.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。

然后打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上

代码如下:

<VirtualHost *:80> 
 ServerAdmin 管理员邮箱 
 ServerName localhost 
 ServerAlias localhost 
 ProxyPass / balancer://sy/ stickysession=jsessionid nofailover=On 
 ProxyPassReverse / balancer://sy/ 
 ErrorLog "logs/sy-error.log" 
 CustomLog "logs/sy-access.log" common 
 </VirtualHost>
登入後複製

然后回到httpd.conf,在文档最下面加上

代码如下:

ProxyRequests Off 
 <proxy balancer://sy> 
 BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1 
 BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2 
 </proxy>
登入後複製

ProxyRequests Off 是告诉Apache需要使用反向代理,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。loadfactor是负载因子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发。这样就可以使配置更灵活,例如可以给性能好的服务器增加处理工作的比例,如果采取多台服务器,只需要修改ip地址和端口就可以了。route参数对应后续tomcat负载均衡配置中的引擎路径(jvmRoute)

以上是Apache如何做負載平衡配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

h5項目怎麼運行 h5項目怎麼運行 Apr 06, 2025 pm 12:21 PM

運行 H5 項目需要以下步驟:安裝 Web 服務器、Node.js、開發工具等必要工具。搭建開發環境,創建項目文件夾、初始化項目、編寫代碼。啟動開發服務器,使用命令行運行命令。在瀏覽器中預覽項目,輸入開發服務器 URL。發布項目,優化代碼、部署項目、設置 Web 服務器配置。

xml怎麼導出pdf xml怎麼導出pdf Apr 03, 2025 am 06:45 AM

導出 XML 為 PDF 有兩種方法:使用 XSLT 和使用 XML 數據綁定庫。 XSLT:創建 XSLT 樣式表,指定 PDF 格式使用 XSLT 處理器轉換 XML 數據XML 數據綁定庫:導入 XML 數據綁定庫創建 PDF 文檔對象加載 XML 數據導出 PDF 文件哪種方法更好取決於需求。 XSLT 提供靈活性,而數據綁定庫實現簡單;對於簡單轉換,數據綁定庫更好,對於復雜轉換,XSLT 更合適。

Apache故障排除:診斷和解決常見錯誤 Apache故障排除:診斷和解決常見錯誤 Apr 03, 2025 am 12:07 AM

Apache錯誤可以通過查看日誌文件來診斷和解決。 1)查看error.log文件,2)使用grep命令過濾特定域名的錯誤,3)定期清理日誌文件並優化配置,4)使用監控工具實時監控和告警。通過這些步驟,可以有效地診斷和解決Apache錯誤。

pom.xml怎么生成 pom.xml怎么生成 Apr 03, 2025 am 06:00 AM

生成 pom.xml 文件有以下方法:使用 Maven Archetype,提供預定義的項目模板,自動生成特定類型項目的 pom.xml 文件。使用 Maven Helper 插件,提供生成 pom.xml 文件的命令。手動創建,自定義構建項目的 pom.xml 文件。

如何在服務器端設置字符編碼以解決Bootstrap Table亂碼 如何在服務器端設置字符編碼以解決Bootstrap Table亂碼 Apr 07, 2025 pm 12:00 PM

要在服務器端設置字符編碼以解決 Bootstrap Table 亂碼,需要按以下步驟進行:檢查服務器字符編碼;編輯服務器配置文件;設置字符編碼為 UTF-8;保存並重啟服務器;驗證編碼。

無法在 xampp 中啟動 mysql 無法在 xampp 中啟動 mysql Apr 08, 2025 pm 03:15 PM

XAMPP啟動MySQL失敗的原因有多種,包括端口衝突、配置文件錯誤、系統權限不足、服務依賴問題和安裝問題。排查步驟如下:1)檢查端口衝突;2)檢查配置文件;3)檢查系統權限;4)檢查服務依賴;5)重新安裝MySQL。遵循這些步驟,您可以找到並解決導致MySQL啟動失敗的問題。

Bootstrap頁面如何預覽 Bootstrap頁面如何預覽 Apr 07, 2025 am 10:06 AM

Bootstrap頁面的預覽方法有:直接在瀏覽器中打開HTML文件;使用Live Server插件自動刷新瀏覽器;搭建本地服務器模擬線上環境。

PDF 轉 XML:保留格式和數據的最佳實踐 PDF 轉 XML:保留格式和數據的最佳實踐 Apr 02, 2025 pm 11:18 PM

如何轉換 PDF 為 XML?使用在線轉換器、桌面軟件或編程庫選擇合適的文件格式(XHTML、PDF/UA、XML)優化 PDF(OCR、刪除不必要元素、調整頁面)細化轉換設置(標記、元數據、圖像提取)質量控制(驗證 XML、手動檢查、調整)對於復雜轉換,使用專業工具

See all articles