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
如需詳細配置瞭解,請查詢官網文檔