HAproxy 配置詳解

haproxy介紹

HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發連接。事件驅動模型因爲在有更好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是爲什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。

HAProxy監聽的端口是1080,代理192.168.18.2:10000,127.0.0.1:10000

配置HAProxy Session親緣性的三種方式:1 用戶IP 識別 2 cookie 識別 3 session 識別

haproxy相關配置介紹
一、算法

balance: 指明調度算法;
動態:權重可動態調整
靜態:調整權重不會實時生效

roundrobin: 輪詢,動態算法,每個後端主機最多支持4128個連接; 
static-rr: 輪詢,靜態算法,每個後端主機支持的數量無上限;
leastconn: 根據後端主機的負載數量進行調度;僅適用長連接的會話;動態; source:
hash-type:
map-based:取模法;靜態;
consistent:一致性哈希法;動態; uri:
hash-type
map-based:
consistent: url_param: 根據url中的指定的參數的值進行調度;把值做hash計算,併除以總權重;
hash-type
map-based:
consistent: hdr(<name>):根據請求報文中指定的header(如use_agent, referer, hostname)進行調度;把指定的header的值做hash計算;
hash-type
map-based:  靜態   增加或者刪除後端服務器會影響全局
consistent:    動態   增加或刪除後端服務影響局部

二、定義後端webserver配置:
servserver name addr [:port] [param*]
<name>服務器的內部名稱,出現在日誌及警告信息中,如果添加了http-send-server-name,還會將其發往至此服務器的請求首部當中
<address>服務器的地址,支持使用主機名
<port>端口映射,省略時表示與bind的端口相同
<param*> 參數
backup: 設定當前服務器爲備用服務器,只在主服務器不可用時啓用,相當於錯誤頁
addr:通過此地址去做健康狀態監測
check: 健康狀態檢測;
inter :檢測時間間隔;單位爲ms, 默認爲2000;
fall: up –> down 連續多次的失敗監測就將服務器標記爲down(soft state, soft state, hard state; )
rise:down –> up 連續多次的成功監測就將服務器標記爲up
cookie :爲當前服務器設定cookie值,用cookie值做會話黏性
maxconn: 此服務接受的併發連接的最大數量;
maxqueue: 請求隊列的最大長度;
observe: 根據流量判斷後端server的健康狀態;
weight: 指定權重,默認爲1,最大爲256;0表示不被調度;
redir : 重定向;所有發往此服務器的請求均以302響應;

定義後端服務器及健康監測

listen webserver  *:80
balance    source 
balance    roundrobin
balance    uri
hash-type consistent
option httpchk
balance hdr(Host)
server  web_one 192.168.172.128 check weight 1 maxconn 3000 maxqueue 2000 port 80 fall 3 rise 3
server  web_two 192.168.172.129 check weight 2 maxconn 4000 maxqueue 2000 port 80 fall 3 rise 3

後端http服務時的健康狀態的檢測方法:
option httpchk
option httpchk< url >
option httpchk< method > < url >
option httpchk< method > < url > < version >


example:

backend bk_myapp
 [...]
 option httpchk get /check HTTP/1.0\r\nHost:\ www.domain.com
 default-server inter 3s fall 3 rise 2
 server srv1 192.168.172.128:80 check
 server srv1 192.168.172.129:80 check
基於瀏覽器cookie實現session sticky:
backend websrvs
balance     roundrobin
cookie SERVERID insert nocache indirect
server web1 192.168.172.128:80 check weight 1 cookie websrv1
server web2 192.168.172.128:80 check weight 3 cookie websrv2
開啓haproxy管理頁面
listen statistics 
bind *:9000
stats enable
stats hide-version
#stats scope 
stats uri /haproxyadmin?stats
stats realm "HAPorxy\ Statistics"
stats auth admin:admin
stats admin if TRUE

haproxy動靜分離配置

backend phpserver
        balance roundrobin
        option httpchk
        rspidel php
        rspidel Server.*
        rspadd X-Via:192.168.172.130
        rspidel ^User-Agent:
        cookie php indirect nocache
        server phpsrv1 192.168.172.129:80 check weight 1 cookie phpsrv1 maxconn 3000
backend webserver1
        balance roundrobin
        option httpchk                  調用七層檢查方式
        rspidel php
        rspidel Server.*                刪除客戶端請求頭部的server信息
        rspadd X-Via:192.168.172.130    添加haproxyip地址
        rspidel ^User-Agent:             
        server websrv1 192.168.172.128:80 check maxconn 3000
frontend mysrvs
        bind *:80
        acl php_page path_end -i .php
        use backend phpserver if php_page        調用匹配到的acl
        default_backend webserver1               調用默認acl

如需詳細配置瞭解,請查詢官網文檔

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