什麼是負載平衡? 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協定位址可以隨便定義。然後,在
下面那段
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
向下拉动文档找到
然后打开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中文網其他相關文章!

ApacheHTTPServer是互聯網上最流行的Web服務器之一,因其穩定性、可擴展性和開放性而廣受歡迎。 Apache的核心功能是處理和響應HTTP請求,支持靜態和動態內容服務、代理和負載均衡。其模塊化設計允許通過加載不同模塊來擴展功能,如mod_rewrite用於URL重寫,mod_ssl用於SSL/TLS加密。安裝時,關鍵概念包括httpd.conf配置文件和虛擬主機設置。 Apache的工作原理是根據請求URL和配置文件規則處理請求,靈活的模塊化架構優化服務器性能。基本用法包括配置虛擬主機

Apache如此受歡迎的原因包括其模塊化設計、虛擬主機功能、性能優化和安全性。 1.模塊化設計允許用戶根據需求加載或卸載模塊,如mod_rewrite和mod_ssl。 2.虛擬主機功能支持在一個服務器上託管多個網站。 3.性能優化通過啟用KeepAlive、調整MPM和使用緩存機制來實現。 4.安全性通過定期更新、限制訪問和啟用HTTPS來保障。

Apache之所以成為許多網站的基礎是因為其穩定、可靠和高度可配置。 1.Apache由Apache軟件基金會開發,支持多種操作系統,提供靜態和動態內容服務。 2.其核心功能包括處理HTTP請求、虛擬主機和模塊化設計。 3.配置示例從基本設置到高級虛擬主機和URL重寫。 4.常見錯誤如權限、語法和模塊加載問題可以通過相應的調試技巧解決。 5.性能優化包括調整參數、使用緩存和負載均衡,遵循最佳實踐可提升服務器效率和安全性。

Apache的未來將在雲原生技術、機器學習、人工智能、區塊鏈、數據安全和性能優化等方面繼續發展。 1)雲原生和容器化技術將進一步融合,推出更多優化版本;2)機器學習和人工智能領域將推出更多易用工具和框架;3)區塊鍊和分佈式賬本技術將投入更多資源,推動標準化和普及;4)數據安全和隱私保護將加強,推出更高安全性的版本和工具;5)性能優化與最佳實踐將繼續被重視,幫助開發者提高效率。

.htaccess文件用於目錄級配置,虛擬主機用於同一服務器上託管多個網站。 1).htaccess允許在不重啟服務器的情況下調整目錄配置,如URL重寫和訪問控制。 2)虛擬主機通過VirtualHost指令管理多個域名和配置,支持SSL加密和負載均衡。

Apache可以通過配置mod_proxy和mod_proxy_balancer模塊實現負載均衡。 1)確保Apache已安裝並啟用了mod_proxy和mod_proxy_balancer模塊。 2)在Apache配置文件中添加負載均衡配置,將請求轉發到後端服務器集群。 3)可根據需要調整負載均衡算法和配置會話持久性,以優化性能和用戶體驗。

如何強化Apache服務器的安全性?可以通過以下步驟實現:限制對敏感目錄的訪問,使用配置文件設置訪問控制。使用mod_security模塊實現高級安全策略,如阻止SQL注入攻擊。定期檢查配置文件語法,使用日誌分析工具監控訪問日誌,並進行滲透測試。優化mod_security規則集,平衡安全性和性能,確保代碼可讀性和可維護性。

要在Apache服務器上配置SSL/TLS來保護網站,需按以下步驟操作:1.獲取SSL/TLS證書;2.在Apache配置文件中啟用SSL/TLS,並指定證書和私鑰路徑;3.設置HTTP到HTTPS的重定向;4.考慮使用OCSPStapling提升連接速度;5.優化性能,如啟用HTTP/2和會話緩存。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具