HAProxy + apache 負載均衡,動靜分離,讀寫分離

實驗環境:

操作系統: redhat EL 6.5
機器及軟件:
server9: 172.25.12.9 haproxy
server8: 172.25.12.8 apache(httpd) php
server7: 172.25.12.7 apache(httpd) php

原理及簡介:

HAProxy 提供高可用 負載均衡 以及基於 TCP 和 HTTP 應用的代理
是輕量級的 擅長處理併發
但與nginx不同的是 Haproxy 並不是 Http服務器。很多帶反向代理均衡負載的產品,如nginx,apacheproxy,都清一色是 WEB 服務器。簡單說,就是他們能自個兒提供靜態(html,jpg,gif..)或動態(PHP,cgi..)文件的傳輸以及處理。而Haproxy僅僅,而且專門是一款的用於均衡負載的應用代理。其自身並不能提供http服務
它自帶健康檢測,1.3版本後還自帶一些簡單的規則匹配

動靜分離,讀寫分離主要使用了acl函數,haproxy支持acl函數

安裝與配置:

server9先配置yum 源:

[root@server9 ~]# cat /etc/yum.repos.d/rhel-source.repo 
[Server]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.12.250/rhel6.5/Server
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.12.250/rhel6.5/HighAvailability
gpgcheck=0

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.12.250/rhel6.5/LoadBalancer
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.12.250/rhel6.5/ResilientStorage
gpgcheck=0

[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.12.250/rhel6.5/ScalableFileSystem
gpgcheck=0

haproxy軟件下載鏈接:

http://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz

其他版本下載:

http://www.haproxy.org/download/

下載完後進行解壓安裝:
安裝方式: rpm包安裝(用rpmbuild製作工具製作rpm包)

#我的安裝包放在了root家目錄下
#解壓
tar zxf haproxy-1.6.11.tar.gz
cd haproxy-1.6.11

#進入 examples目錄 查看有沒有haproxy.spec文件,這個可以用來製作rpm包
cd examples/

#安裝rpmbuild軟件(安裝完之後會在當前用戶家目錄下生成一個rpmbuild目錄)
yum install rpm-build -y

#將安裝包放進 ~/rpmbuild/SOURCES/下
 cp ~/haproxy-1.6.11.tar.gz  ~/rpmbuild/SOURCES/

#製作rpm包
rpmbuild -bb haproxy.spec

#製作完成的rpm包會放在下面的目錄中
cd ~/rpmbuild/RPMS/x86_64/

#rpm安裝
rpm -ivh haproxy-1.6.11-1.x86_64.rpm

#查看rpm安裝後的文件存放目錄
rpm -qpl haproxy-1.6.11-1.x86_64.rpm

#rpm安裝不會有配置文件(rpm -qpl 後沒有顯示有配置文件存在)
#拷貝一份配置文件
cd ~/haproxy-1.6.11/examples
cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg

配置haproxy負載均衡:

cd /etc/haproxy/
vim haproxy.cfg

global
        maxconn         10000
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0   #日誌輸出配置,所有日誌都記錄在本機,通過local0輸出
        uid             200
        gid             200
        chroot          /var/empty
        daemon    #以後臺形式運行haproxy
defaults
        mode            http    #默認模式  tcp是4層 http是7層
        log             global
        option          httplog   #日誌級別
        option          dontlognull   #不記錄健康檢查日誌信息
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        timeout connect 5s
        timeout server  30s
        timeout queue   30s

        stats uri       /status

frontend public
        bind             0.0.0.0:80  #開啓佔用80端口
        default_backend static   #默認訪問後端爲 static
backend static
        balance         roundrobin   #輪詢
        server          server8 172.25.12.8:80 check inter 1000
        server          server7 172.25.12.7:80 check inter 1000
          #兩個後臺的主機,check inter 1000 檢測心跳頻率 

檢測haproxy是否配置成功:
server7 server8上安裝apache 並啓動服務:

yum install -i httpd
/etc/init.d/httpd start

server7:

echo server7 > /var/www/html/index.html

server8:

echo server8 > /var/www/html/index.html

負載均衡結果:
這裏寫圖片描述

將server7上的apache down掉
這裏寫圖片描述

增加日誌文件:

vim /etc/rsyslog.conf

 13 $ModLoad imudp
 14 $UDPServerRun 514
 42 *.info;mail.none;authpriv.none;cron.none;local0.none                /var/log    /messages
 62 local0.*  

重啓日誌服務:

/etc/init.d/rsyslog  restart

查看日誌文件是否添加上了:

ll /var/log/haproxy.log

重啓haproxy:

/etc/init.d/haproxy restart

設置acl權限:

vim haproxy.cfg

frontend public
        acl badhost src 172.25.12.250  #將172.25.12.250的訪問全部設爲badhost

        http-request deny if  badhost  #拒絕badhost 狀態下的ip

        default_backend static

這種情況下,172.25.12.250不能通過80端口訪問這臺主機(我設置haproxy開啓的是80端口)

動靜分離:

vim haproxy.cfg
將訪問後綴爲.php文件的請求全部丟給server7 其他丟給server8

frontend public

        acl url_dynamic path_end -i .php

        bind            0.0.0.0:80

        use_backend     dynamic if url_dynamic
        default_backend static

backend dynamic
        balance         roundrobin
        server  server7 172.25.12.7:80  check inter 1000

backend static
        server  server6 172.25.12.8:80  check inter 1000

測試:

server7:
yum install php -y
vim /var/www/html/index.php

<?php
phpinfo()
?>

/etc/init.d/httpd restart

瀏覽器訪問172.25.12.9/index.php
彈出的界面是server7下的index.php界面

讀寫分離:

vim haproxy.cfg
將讀的請求交給server7處理
將寫的請求交給server8處理

frontend public
        acl read  method GET
        acl read  method HEAD
        acl write method PUT
        acl write method POST

        bind            0.0.0.0:80
        use_backend     dynamic if write
        use_backend    static  if read

backend dynamic
        balance         roundrobin
        server  server7 172.25.12.7:80  check inter 1000

backend static
        server  server6 172.25.12.8:80  check inter 1000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章