Haproxy負載均衡/動靜分離

   在前端領域做負載均衡,動靜分離的程序有很多,比較常用的是nginx和Haproxy,今天就說一下

Haproxy在這兩方面的表現,文章參考很多網文寫成,再加上自己的實驗成果,文中所有解釋都經過實際環境驗證。


環境介紹:

Centos 6.5

Haproxy 1.7.9

前端 192.168.6.10

後端 192.168.6.20(web1)  192.168.6.21(web2)

圖片服務器 192.168.6.22(img01)


1.安裝Haproxy

wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.9.tar.gz
tar -xvf haproxy-1.7.9.tar.gz
mkdir /usr/local/haproxy
cd haproxy-1.7.9
make TARGET=/usr/local/haproxy
make install

2.編輯配置文件

vim /usr/local/haproxy/conf/haproxy.cfg

###########全局配置#########  
global
        log 192.168.6.11   local0 info    #[日誌輸出配置,info日誌都記錄在遠程服務器,通過local6輸出,不需要ssh驗證機制]  
        log 127.0.0.1    local0 notice  #定義haproxy notice日誌記錄在本機 此級別比較常用
        #日誌級別 
        #emerg 0 系統不可用
        #alert 1 必須馬上採取行動的事件
        #crit 2 關鍵的事件
        #err 3 錯誤事件
        #warning 4 警告事件
        #notice 5 普通但重要的事件
        #info 6 有用的信息
        daemon            #以後臺形式運行harpoxy  
        nbproc 1           #設置進程數量  
        pidfile /home/haproxy/haproxy/conf/haproxy.pid   #haproxy 進程PID文件  
        ulimit-n 819200           #ulimit 的數量限制  
        maxconn 4096           #默認最大連接數,需考慮ulimit-n限制  
        #chroot /usr/share/haproxy #chroot運行路徑  
        uid 99           #運行haproxy 用戶 UID  99是nobody用戶
        gid 99           #運行haproxy 用戶組gid  
        #debug            #haproxy 調試級別,建議只在開啓單進程的時候調試  
        #quiet  

########默認配置############  
defaults
        log global
        mode http           #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK  
        option  httplog       #日誌類別,採用httplog  
        option  dontlognull     #不記錄健康檢查日誌信息  
        retries 2           #兩次連接失敗就認爲是服務器不可用,也可以通過後面設置  
        option  forwardfor      #如果後端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip  
        option  httpclose      #每次請求完畢後主動關閉http通道,haproxy不支持keep-alive,只能模擬這種模式的實現  
        #option redispatch      #當serverId對應的服務器掛掉後,強制定向到其他健康的服務器,以後將不支持  
        option  abortonclose     #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接  
        maxconn 4096         #默認的最大連接數  
        timeout connect 5000ms     #連接超時  
        timeout client 30000ms     #客戶端超時  
        timeout server 30000ms     #服務器超時  
        #timeout check 2000       #心跳檢測超時  
        #timeout http-keep-alive 10s   #默認持久連接超時時間  
        #timeout http-request   10s     #默認http請求超時時間  
        #timeoutqueue        1m    #默認隊列超時時間  
        balance roundrobin       #設置默認負載均衡方式,輪詢方式  
        #balance source        #設置默認負載均衡方式,類似於nginx的ip_hash  
        #balnace leastconn       #設置默認負載均衡方式,最小連接數  

########統計頁面配置########  
listen admin_stats
        bind 0.0.0.0:1080            #設置Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱  
        mode http                #http的7層模式  
        option httplog             #採用http日誌格式  
        #log 127.0.0.1 local0 err       #錯誤日誌記錄  
        maxconn 10               #默認的最大連接數  
        stats refresh 20s           #統計頁面自動刷新時間  
        stats uri /666-stats          #統計頁面url  
        stats realm XingCloud\ Haproxy      #統計頁面密碼框上提示文本  
        #stats realm Haproxy\ Statistics   #統計頁面密碼框上提示文本  
        stats auth admin:admin123       #設置監控頁面的用戶和密碼:admin,可以設置多個用戶名  
        # stats auth  Frank:Frank      #設置監控頁面的用戶和密碼:Frank  
        stats hide-version           #隱藏統計頁面上HAProxy的版本信息  
        stats  admin if TRUE         #設置手工啓動/禁用,後端服務器(haproxy-1.4.9以後版本)  

########設置haproxy 錯誤頁面#####  
#errorfile 403  /home/haproxy/haproxy/errorfiles/403.http  
#errorfile 500 /home/haproxy/haproxy/errorfiles/500.http  
#errorfile 502 /home/haproxy/haproxy/errorfiles/502.http  
errorfile 503 /home/haproxy/503.hh    #文件名和後綴可隨便起,瀏覽器都可以正常顯示
#errorfile 504 /home/haproxy/haproxy/errorfiles/504.http  

#errorloc   404 /home/haproxy/404.htm
errorloc   503  /home/haproxy/503.hh  #後端有一臺報錯,直接跳轉到此頁面

########frontend前端配置##############  
bind *:80
    #這裏建議使用bind *:80的方式,要不然做集羣高可用的時候有問題,vip切換到其他機器就不能訪問了。  
    acl webserver hdr(host) -i www.abc.com
    #acl後面是規則名稱,-i是要訪問的域名,  
   
    acl url_static       path_beg       -i /upload/
    acl url_static       path_end       -i .jpg .jpeg .gif .png .css .js .html

    use_backend imgserver if url_static   #如果匹配靜態規則就跳轉到imgserver
    default_backend webserver              #默認規則
    #如果訪問www.abc.com這個域名就分發到下面的webserver 的作用域。  
    #如果訪問img.abc.com.cn就分發到imgserver這個作用域。  
    #use_backend webserver if web      #設置了默認規則,這裏可以不設置
    #use_backend imgserver if img  

########backend後端配置##############  
backend webserver             #webserver作用域  
    cookie srv insert nocache        #插入一個cookie,在下次用戶登錄時登錄到同樣的後端
    balance   roundrobin
    #banlance roundrobin 輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數  
    option  httpchk GET /index.html #HTTP/1.0  #健康檢查  
    #檢測文件,如果分發到後臺index.html訪問不到就不再分發給它  
    server  web1 192.168.6.20:80 cookie web1 weight 5 check inter 2000 rise 2 fall 3
    server  web2 192.168.6.21:80 cookie web2 weight 3 check inter 2000 rise 2 fall 3
    #cookie web1表示cookie名稱爲web1,check inter 1500 是檢測心跳頻率    
    #rise 2是2次正確認爲服務器可用,fall 3是3次失敗認爲服務器不可用,weight代表權重  
backend imgserver
    option  httpchk /upload/         #檢測文件夾是否存在
    balance     roundrobin
    server      img01 192.168.6.22:80  check inter 2000 fall 3

3.增加Haproxy日誌存放位置

Haproxy日誌默認是存放在/var/log/message,但是message裏信息較多,建議分離出自己想要的部分到別的日誌文件中

①vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS="-r -m 0 -c 2"

②vim /etc/rsyslog.conf

去掉以下兩行的註釋:

$ModLoad imudp
$UDPServerRun 514

添加一行:

local5.*      /var/log/haproxy/haproxy.log  #級別爲5的日誌存放位置,各級文件夾必須存在

③重啓rsyslog

service rsyslog restart

完成後Message和haproxy.log中會同時存在日誌,因級別不同,顯示內容也就會不同

4.啓動Haproxy

cd /usr/local/haproxy/

./sbin/haproxy -f conf/haproxy.cfg

觀察日誌 tail /var/log/message

3737334403e87d9ebbaaa7c2cc58e902.png-wh_

出現以上提示爲啓動成功

4bb408bbfa1e2918cc991336e0c64da7.png-wh_

出現以上提示爲後端其中一臺服務器連接失敗

5.訪問http://192.168.6.10/666-stats,輸入用戶名密碼後出現如下界面:

fb842f52ad83270e125d00fedbb19ef5.png-wh_

3個服務器連接正常,可以提供服務!

注:附一張緩存插入成功的截圖,僅供參考,圖片是360極速瀏覽器的截圖

abe727b94a2564a117bfd3b51562c053.png-wh_

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