LB之Haproxy

軟件負載均衡一般通過兩種方式來實現:基於操作系統的軟負載實現和基於第三方應用的軟負載實現。LVS就是基於Linux操作系統實現的一種軟負載,HAProxy就是開源的並且基於第三應用實現的軟負載。

HAProxy提供高可用性、負載均衡以及基於TCPHTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy相比LVS的使用要簡單很多,功能方面也很豐富。當前,HAProxy支持兩種主要的代理模式:"tcp"也即4層(大多用於郵件服務器、內部協議通信服務器等),和7層(HTTP)。在4層模式 下,HAProxy僅在客戶端和服務器之間轉發雙向流量。7層模式下,HAProxy會分析協議,並且能通過允許、拒絕、交換、增加、修改或者刪除請求 (request)或者回應(response)裏指定內容來控制協議,這種操作要基於特定規則。

HAProxy介紹

反向代理服務器,支持雙機熱備支持虛擬主機,但其配置簡單,擁有非常不錯的服務器健康檢查功能,當其代理的後端服務器出現故障, HAProxy會自動將該服務器摘除,故障恢復後再自動將該服務器加回。新的1.3引入了frontend,backendfrontend根據任意 HTTP請求頭內容做規則匹配,然後把請求定向到相關的backend

實驗環境:

系統:rhel6.5

server1.example.com172.25.0.1  server2.example.com172.25.0.2爲服務主機

server3.example.com:172.25.0.3server4.example.com:172.25.0.4爲後端服務器

安裝

server1server2

#yum install -y haproxy

#vim /etc/haproxy/haproxy.cfg

保留最後的listen模塊,上面註釋相應模塊

listen westos *:80     //haproxy使用80端口

     balance roundrobin     //負載均衡爲rr

     server web1 172.25.0.3:80 check   //服務機爲ip172.25.0.3的,名爲web1

     server web2 172.25.0.4:80 check  //服務機爲ip172.25.0.4,名爲web2

#/etc/init.d/haproxy start

 在server3server4上,添加主頁並且內容爲各自的hostname。啓動httpd

 wKioL1drZHyj1x0sAACB-7VG1_4645.png-wh_50

 

web上顯示haproxy信息

server2

#vim /etc/haproxy/haproxy.cfg

maxconn下面添加

stats uri /status

wKioL1drZKmB0yDhAALMyeSnMBA523.png-wh_50

#vim /etc/haproxy/haproxy.cfg

frontend westos *:80

       default_backend web

backend web

       balance roundrobin

       server web1 172.25.0.3:80 check

       server web2 172,25.0.4:80 check

           //將listen模塊分爲frontend backendfrontend根據任意 HTTP請求頭內容做規則匹配,然後把請求定向到相關的backend

 

server web1/2行後面加weight 1/2web1/2加權重。

server行下面加

server backup 127.0.0.1:8080 backup  //備用機爲本機,當server34都壞掉後通過8080端口啓用本機

#vim /etc/httpd/conf/httpd.conf

添加Listen 8080    //增加apache監聽8080端口

啓動httpd,並添加內容爲”please try later”的主頁。

server3server4httpd同時down掉後,

wKiom1drZRHCOTzWAABfjzSxkSU579.png-wh_50

 

rsyslog中給haproxy添加日誌文件

#vim /etc/rsyslog.conf

添加

local2.*      /var/log/haproxy.log

重啓rsyslog服務。

#tail -f /va/log/haproxy.log

wKiom1drZSmxtshLAAJ9OHtc8Nk527.png-wh_50

 

#vim /etc/haproxy/haproxy.cfg

stats uri /status下面添加

   stats auth admin:westos   //給本機添加認證

frontend模塊中添加

acl bad src 172.25.0.251   //阻止源ip172.25.0.251的主機訪問

真機ip172.25.0.251,因此出現下圖

wKioL1drZUDRvGXNAAB36NhGIyE438.png-wh_50

acl下繼續添加

block if bad

errorloc 403 http://172.25.0.2:8080   

redirect location http://172.25.0.2:8080 if bad  //172.25.0.2:80出現403錯誤時跳轉172.25.0.28080

wKiom1drZVeggHOgAABczUXemQQ574.png-wh_50

註釋剛添加的三行

添加

acl denyfile path /admin/

http-request deny if denyfile bad   //拒絕訪問172.25.0.2/admin(訪問目標爲web12amdin


動靜分離:

註釋剛添加的兩行

修改爲

frontend westos *:80

acl url_static path_beg -i /static /p_w_picpaths /javascript /stylesheets

acl url_static path_end -i .jpg .gif .png .css .js   

use_backend p_w_picpaths if url_static      //當網址以p_w_picpaths javascripts結尾時調用p_w_picpaths模塊

default_backend upload  

backend p_w_picpaths 

    balance roundrobin

    server web1 172.25.0.3:80 check

    server backup 127.0.0.1:8080 backup

backend upload

     server web2 172.25.0.4:80 check

server3中的/var/www/html/p_w_picpaths文件夾中添加圖片

server2

#/etc/init.d/harpoxy reload

wKioL1drZZLCVcBTAAK6QY-Bw5I020.png-wh_50

 

讀寫分離:

添加

acl read method GET

acl read method HEAD

acl write method PUT

acl write method POST

use_backend p_w_picpaths if read  //爲讀時調用p_w_picpaths模塊

use_backend upload if write    //爲寫時調用upload模塊

server3/4中添加upload文件夾(包含相應的php文件),在upload中添加upload文件夾。

#chmod 777 -R /var/www/html/upload

wKiom1drZa3B4KorAABymZMX8_A019.png-wh_50

通過日誌可以看到,server3通過調用p_w_picpaths模塊讀取上傳信息,然後server4通過upload模塊將文件存到server4/var/www/html/upload/upload/中。上傳後,可以在server4中的upload中找到上傳的文件

 

通過pacemaker調用haproxy

server1/2

#/etc/init.d/corosync start

#crm configure

#primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.0.100 cidr_netmask=32 op minitor interval=30s 

#primitive haproxy lsb:haproxy op monitor interval=30s

#commit

#group hagroup vip haproxy 

wKiom1drZfSCDDmRAAByzXjTKAU920.png-wh_50

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章