ubuntu apache2 的负载均衡和反向代理
apache功能其實(shí)很是強(qiáng)大,最近一段時(shí)間研究了下apache的反向代理和負(fù)載均衡,反向代理網(wǎng)協(xié)的外網(wǎng)出口和我的博客出口就是通過(guò)apache的反向代理實(shí)現(xiàn)的,總結(jié)一下,重點(diǎn)說(shuō)說(shuō)負(fù)載均衡的配置。
首先說(shuō)先實(shí)驗(yàn)環(huán)境吧
操作系統(tǒng):DEBIAN 5.03(Ubuntu也可以同理配置)
一、安裝apache加載模塊
apt-get install apache2
然后進(jìn)入到apache的配置目錄
cd /etc/apache2
apache的反向代理和負(fù)載均衡其實(shí)利用的都是反向代理的原理,至于什么叫做反向代理可以點(diǎn)此http://baike.baidu.com/view/1165595.htm
關(guān)鍵需要加載下面三個(gè)模塊
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
由于Debian系統(tǒng)下apache所有的模塊都是放在/usr/lib/apache2/modules/里面的,通過(guò)/etc/apache2/mods-available里面的*.load加載的,如果要模塊的話需要在/etc/apache2/mods-enabled里面用ln建立鏈接,當(dāng)然你也可以再/etc/apache2/apache2.conf里面直接把上面三句話寫(xiě)進(jìn)入,但是不建議這樣做。執(zhí)行代碼如下
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
ln -s /etc/apache2/mods-available/proxy_balancer.load /etc/apache2/mods-enabled/proxy_banancer.load
做好上面幾步之后我們重啟下apache
/etc/init.d/apache2 restart
二、配置反向代理功能
加載完模塊后可以建立一個(gè)虛擬主機(jī)來(lái)作為反向代理
vi /etc/apache2/sites_available/proxy
配置如下
Listen 202.xxx.xxx.xxx:80???? (別人訪問(wèn)的IP和端口)
<VirtualHost 202.xxx.xxx.xxx:80> (同上)
ServerAdmin admin@bit.net
ProxyRequests Off???????????? (說(shuō)明開(kāi)啟的是反向代理)
ProxyMaxForwards 100
ProxyPreserveHost On
ProxyPass / http://10.x.xx.xxx/ (轉(zhuǎn)發(fā)到url上的請(qǐng)求)
ProxyPassReverse / http://10.x.xx.xxx/
<Proxy *>??????????????? (這段是訪問(wèn)的控制)
Order Deny,Allow
Allow from all
</Proxy>
</VirtualHost>
然后再在/etc/apache2/sites_enabled/里面建立ln鏈接
ln -s /etc/apache2/sites_available/proxy /etc/apache2/sites_enabled/proxy
重啟apache
/etc/init.d/apache2 restart
然后反向代理就開(kāi)啟了
當(dāng)別人輸入http://202.xxx.xxx.xxx時(shí) 就會(huì)通過(guò)反向代理轉(zhuǎn)到http://10.x.xx.xxx上,這樣簡(jiǎn)單的反向代理功能就開(kāi)啟了
三、apache負(fù)載均衡配置
a、簡(jiǎn)單的負(fù)載均衡
然后接著講apache的負(fù)載均衡模塊吧
同理建立一個(gè)虛擬主機(jī)來(lái)作為負(fù)載均衡
vi /etc/apache2/sites_available/balancer
配置如下
Listen 202.x.xx.xxx:80??????? (別人訪問(wèn)的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
???? ServerAdmin admin@bit.com
???? ProxyRequests Off
???? Proxypass / balancer://proxy/?
???? <Proxy balancer://proxy>
???????? Order Deny,Allow
???????? Allow from all
???????? BalancerMember http://10.0.0.1
???????? BalancerMember http://10.0.0.2
???? </Proxy>
</VirtualHost>
從上面的 ProxyRequests Off 這條可以看出,實(shí)際上負(fù)載均衡器就是一個(gè)反向代理,只不過(guò)它的代理轉(zhuǎn)發(fā)地址不是某臺(tái)具體的服務(wù)器,而是一個(gè) balancer://協(xié)議地址
ProxyPass / balancer://proxy/
協(xié)議地址可以隨便定義。然后,在<Proxy>段中設(shè)置該balancer協(xié)議的內(nèi)容即可。 BalancerMember指令可以添加負(fù)載均衡組中的真實(shí)服務(wù)器地址。
然后再在/etc/apache2/sites_enabled/里面建立ln鏈接
ln -s /etc/apache2/sites_available/balancer /etc/apache2/sites_enabled/balancer
重啟apache
/etc/init.d/apache2 restart
這樣apache的負(fù)載均衡就配置好了
如果訪問(wèn)http://202.x.xx.xxx的時(shí)候會(huì)均勻地打開(kāi)http://10.0.0.1和http://10.0.0.2,比如你兩次打開(kāi)http://202.x.xx.xxx會(huì)又一次打開(kāi)http://10.0.0.1一次打開(kāi)http://10.0.0.2這樣就是兩臺(tái)服務(wù)器接受的請(qǐng)求平均了,達(dá)到了負(fù)載均衡的效果。
b、負(fù)載比例分配
當(dāng)然如果你發(fā)現(xiàn)你的兩臺(tái)服務(wù)器配置不一樣,一臺(tái)較好,一臺(tái)較差,那么就要開(kāi)始配置不同比例的負(fù)載均衡了。如果兩臺(tái)服務(wù)器你想配置負(fù)載分配比為3:1則配置文件如下
Listen 202.x.xx.xxx:80??????? (別人訪問(wèn)的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
???? ServerAdmin admin@bit.com
???? ProxyRequests Off
???? Proxypass / balancer://proxy/?
???? <Proxy balancer://proxy>
???????? Order Deny,Allow
???????? Allow from all
???????? BalancerMember http://10.0.0.1?? loadfactor= 3
???????? BalancerMember http://10.0.0.2?? loadfactor= 1
???? </Proxy>
</VirtualHost>
c、負(fù)載分配算法
當(dāng)然你可能想通過(guò)不同的算法實(shí)現(xiàn)負(fù)載均衡,比方說(shuō)按照請(qǐng)求次數(shù),或者按照流量均衡,這里用到的指令是lbmethod
lbmethod可能的取值有:?
lbmethod=byrequests 按照請(qǐng)求次數(shù)均衡(默認(rèn))?
lbmethod=bytraffic 按照流量均衡?
lbmethod=bybusyness 按照繁忙程度均衡(總是分配給活躍請(qǐng)求數(shù)最少的服務(wù)器)
按照流量的均衡配置如下
Listen 202.x.xx.xxx:80??????? (別人訪問(wèn)的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
???? ServerAdmin admin@bit.com
???? ProxyRequests Off
???? Proxypass / balancer://proxy/?
???? ProxySet lbmethod=bytraffic?? (加上這句)
???? <Proxy balancer://proxy>
???????? Order Deny,Allow
???????? Allow from all
???????? BalancerMember http://10.0.0.1?? loadfactor= 3
???????? BalancerMember http://10.0.0.2?? loadfactor= 1
???? </Proxy>
</VirtualHost>
這樣你的負(fù)載均衡就可以按照流量均衡了
d、熱備份
在最后講一講熱備份吧,熱備份的實(shí)現(xiàn)很簡(jiǎn)單,只需添加 status=+H 屬性,就可以把某臺(tái)服務(wù)器指定為備份服務(wù)器,配置文件如下
Listen 202.x.xx.xxx:80??????? (別人訪問(wèn)的IP和端口)
<VirtualHost 202.x.xx.xxx:80>
???? ServerAdmin admin@bit.com
???? ProxyRequests Off
???? Proxypass / balancer://proxy/?
???? ProxySet lbmethod=bytraffic?? (加上這句)
???? <Proxy balancer://proxy>
???????? Order Deny,Allow
???????? Allow from all
???????? BalancerMember http://10.0.0.1???
???????? BalancerMember http://10.0.0.2?? status=+H
???? </Proxy>
</VirtualHost>
從配置中可以看出請(qǐng)求總是流向http://10.0.0.1,一旦http://10.0.0.1掛掉, Apache會(huì)檢測(cè)到錯(cuò)誤并把請(qǐng)求分流給 http://10.0.0.2。Apache會(huì)每隔幾分鐘檢測(cè)一下http://10.0.0.1的狀況,如果http://10.0.0.1恢復(fù),就繼續(xù)使用http://10.0.0.1,這樣就可以實(shí)現(xiàn)熱備份了
好了總結(jié)完了,最近發(fā)現(xiàn)apache的功能確實(shí)是很強(qiáng)大,各種模塊都有待發(fā)掘,一直在聽(tīng)說(shuō)Nginx的并發(fā)比apache要好,有時(shí)間再發(fā)個(gè)兩者的比較的文章吧。
轉(zhuǎn)載于:https://www.cnblogs.com/azhai/archive/2010/12/05/1896771.html
總結(jié)
以上是生活随笔為你收集整理的ubuntu apache2 的负载均衡和反向代理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 推荐《淘宝的可伸缩高性能互联网架构 》
- 下一篇: 互联网周刊:谁是下一个IE?