balance roundrobin #輪詢方式html
balance source #將用戶IP通過hash計算後,使同一IP地址的全部請求都發送到同一固定的後端真實服務器上,與nginx的ip_hash相同,都是爲了解決haproxy與客戶端session一致性的問題前端
balance leastconn #最小鏈接nginx
--------------------------------------------------------------------------------web
10.0.3.121:8080 ----->10.0.3.122:9090redis
用haproxy作端口轉發實現以上功能:
global
maxconn 40000
#debug #調試模式,輸出啓動信息到標準輸出
#quiet #安靜模式,啓動時無輸出
user allison
group users
nbproc 1
log 127.0.0.1 local3
spread-checks 2
defaults
option srvtcpka
option clitcpka
option tcpka
#如下幾個timeout值注意不能設置過短,不然客戶端和服務端鏈接容易斷掉,默認單位:毫秒
timeout server 300s
timeout connect 300s
timeout client 300s
timeout http-request 300s
timeout queue 300s
listen yuan 10.0.3.121:8080
mode tcp
option persist #強制將http請求發往已經down 掉的server
server mubiao 10.0.3.122:9090 weight 256
---------------------------------------------------------------------------------------------------------------------------------------算法
#global:參數是進程級的,一般和操做系統(OS)相關。這些參數通常只設置一次,若是配置無誤,就不須要再次配置進行修改 後端
#frontend:接收請求的前端虛擬節點,Frontend能夠根據規則直接指定具體使用後端的backend(可動態選擇)。 服務器
#HAProxy支持兩種主要的代理模式:"tcp"也即4層(大多用於郵 件服務器、內部協議通訊服務器等),和7層(HTTP)。在4層模式下,HAproxy僅在客戶端和服務器之間轉發雙向流量。7層模式下,HAProxy 會分析協議,而且能經過容許、拒絕、交換、增長、修改或者刪除請求(request)或者回應(response)裏指定內容來控制協議,這種操做要基於特定規則。cookie
maxconn 4096 #最大鏈接數
chroot /usr/local/haproxy #改變當前工做目錄
uid 99 #所屬運行的用戶uid
gid 99 #所屬運行的用戶組
daemon #之後臺形式運行ha-proxy
nbproc 3 #啓動3個ha-proxy實例
pidfile /usr/local/haproxy/run/haproxy.pid #pid文件位置
debug #調試模式,輸出啓動信息到標準輸出
#quiet #安靜模式,啓動時無輸出
defaults #默認設置
log global
log 127.0.0.1 local3 #日誌文件的輸出定向
mode http #所處理的類別,默認採用http模式,可配置成tcp做4層消息轉發
option httplog #日誌類別,採用httplog
option httpclose #每次請求完畢後主動關閉http通道,ha-proxy不支持keep-alive,只能模擬這種模式的實現
option dontlognull #保證HAProxy不記錄上級負載均衡發送過來的用於檢測狀態沒有數據的心跳包
option redispatch #是否容許從新分配在session 失敗後
retries 2 #3次鏈接失敗就認爲服務器不可用,主要經過後面的check檢查
maxconn 2000 #最大鏈接數
balance roundrobin #負載均衡算法
stats uri /haproxy-stats #haproxy 監控頁面的訪問地址,可經過http://ip/haproxy-stats訪問
contimeout 5000 #鏈接超時時間
clitimeout 50000 #客戶端鏈接超時時間
srvtimeout 50000 #服務器端鏈接超時時間
listen app-balancer 0.0.0.0:80
mode http
# log 127.0.0.1 local3
#cookie ServerID insert nocache
cookie ServerID prefix
cookie JSESSIONID prefix
capture request header Cookie len 200
capture request header X-Forwarded-For len 15
capture request header Host len 15
capture request header Referrer len 15
appsession JSESSIONID len 52 timeout 1080000
balance roundrobin
option httpchk GET /ok.jsp HTTP/1.0 #健康檢查
server app_1 192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check inter 5000 rise 2 fall 5 weight 2
server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 2
server app_4 192.168.0.245:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 1
#option forwardfor except 192.168.0.159
option forwardfor
stats enable
stats uri /haproxy-stat
stats realm "test_123 monitor"
stats auth admin:admin
從新打開配置文件haproxy.cfg,留意最下部分的均衡主機選項
listen localhost 0.0.0.0:1080 #運行的端口及主機名
mode http
option httpchk GET /index.htm #用於健康檢測的後端頁面
server s1 127.0.0.1:3121 weight 3 check #後端的主機 IP &權衡
server s2 127.0.0.1:3122 weight 3 check #後端的主機 IP &權衡
在實驗中,咱們的的後端是 squid 分開了2個端口在同一臺服務器上。
以其中一項爲例:
server s1 127.0.0.1:3121 weight 3 check
s1 是可本身定義的服務器別名
127.0.0.1:3121 服務器的IP地址以及端口號
weight 3 所能分配到請求的高低權衡,數字越大分配到的請求數就越高
check 接受 haproxy 的定時檢查,以肯定後端服務器的健康狀況。
如需配置虛擬主機,至關簡單,緊需修改 localhost 爲你虛擬主機的的域名,加到haproxy配置中, 再爲其分配後端服務器的參數便可。
例:
listen www.x1.com 0.0.0.0:1080 #運行的端口及主機名
mode http
option httpchk GET /index.htm #用於健康檢測的後端頁面
server s1 127.0.0.1:3121 weight 3 check #後端的主機 IP &權衡
server s2 127.0.0.1:3122 weight 3 check #後端的主機 IP &權衡
listen www.x2.com 0.0.0.0:1080 #運行的端口及主機名
mode http
option httpchk GET /index.htm #用於健康檢測的後端頁面
server s1 127.0.0.1:3121 weight 3 check #後端的主機 IP &權衡
server s2 127.0.0.1:3122 weight 3 check #後端的主機 IP &權衡
保存配置後從新加載,便可生效,刷新管理頁面也可看到新的虛擬主機。
反覆測試,得出其結果:
Haproxy 單獨進行均衡負載的性能最強,超過了Nginx。
然而 Nginx + Haproxy 的搭配性能最弱,應該是跟經過了2層反向代理有關。
因此想用 Haproxy 替代 Nginx 所自帶的均衡負載功能將會令性能打折。
但雖然如此 Haproxy 對均衡負載功能遠比 Nginx 成熟,例如session粘貼,cookies 引導等都是 nginx 所沒有的。
可根據須要而選擇搭配。
相關啓動參數介紹
#./haproxy –help //haproxy相關命令參數介紹.
haproxy -f <配置文件>
[-n 最大併發鏈接總數] [-N 每一個偵聽的最大併發數] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <內存限制M>] [{-sf|-st} pidlist...]
-d 前臺,debug模式
-D daemon模式啓動
-q 安靜模式,不輸出信息
-V 詳細模式
-c 對配置文件進行語法檢查
-s 顯示統計數據
-l 顯示詳細統計數據
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用後臺模式,程序跑在前臺
-sf <pidlist> 程序啓動後向pidlist裏的進程發送FINISH信號,這個參數放在命令行的最後
-st <pidlist> 程序啓動後向pidlist裏的進程發送TERMINATE信號,這個參數放在命令行的最後
附:一個比較簡單的配置文件內容
global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/haproxy.pid
debug #quiet
defaults
log 127.0.0.1 local3
mode http
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance roundrobin
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webinfo :1080
mode http
balance roundrobin
option httpclose
option forwardfor
server phpinfo1 192.168.18.2:10000 check weight 1 minconn 1 maxconn 3 check inter 40000
server phpinfo2 127.0.0.1:80 check weight 1 minconn 1 maxconn 3 check inter 40000
listen webmb :1081
mode http
balance roundrobin
option httpclose
option forwardfor
server webmb1 192.168.1.91:10000 weight 1 minconn 1 maxconn 3 check inter 40000
server webmb2 127.0.0.1:10000 weight 1 minconn 1 maxconn 3 check inter 40000
listen stats :8888
mode http
transparent
stats uri / haproxy-stats
stats realm Haproxy \ statistic
stats auth admin:admin
------------------------------------------------------------------------------------------------
1 global 2 log 127.0.0.1 local3 debug 3 maxconn 50000 4 chroot /usr/local/haproxy 5 uid 99 6 gid 99 7 daemon 8 nbproc 4 9 pidfile /usr/local/haproxy/haproxy.pid 10 ####### 11 defaults 12 log global 13 mode http 14 option dontlognull 15 retries 3 16 option redispatch 17 maxconn 50000 18 timeout connect 5000 19 timeout client 50000 20 timeout server 50000 21 ###### 22 23 24 frontend http-in 25 bind *:80 26 acl push dst 10.2.1.106 27 acl match dst 10.2.1.107 28 acl social dst 10.2.1.108 29 acl promotion dst 10.2.1.109 30 acl cms dst 10.2.1.111 31 acl cms-web dst 10.2.1.119 32 #acl cms dst 10.2.1.111 33 #errorfile 404 /usr/local/haproxy/html/404.html 34 35 use_backend Push if push 36 use_backend Match if match 37 use_backend Social if social 38 use_backend Promotion if promotion 39 use_backend CMS if cms 40 41 backend Push 42 balance roundrobin 43 cookie SERVERID insert nocache indirect 44 option httpclose 45 option forwardfor header X-Forwarded-For 46 #若是服務器上的應用程序想記錄發起請求的客戶端的IP地址,須要在HAProxy上配置此選項,這樣HAProxy會把客戶端的IP信息發送給服務器,在HTTP請求中添加"X-Forwarded-For"字段 47 server 10.2.1.53-PS 10.2.1.53:8094 backup check inter 5000 fall 1 rise 2 48 server 10.2.1.54-PS 10.2.1.54:8094 check inter 5000 fall 1 rise 2 49 #check inter 5000 是檢測心跳頻率,rise 2是2次正確認爲服務器可用,fall 1是1次失敗認爲服務器不可用,weight表明權重 50 timeout server 50000 51 52 backend Match 53 balance roundrobin 54 cookie SERVERID insert nocache indirect 55 option httpclose 56 option forwardfor header X-Forwarded-For 57 server 10.2.1.53-MC 10.2.1.53:8992 backup check inter 5000 fall 1 rise 2 58 server 10.2.1.54-MC 10.2.1.54:8992 check inter 5000 fall 1 rise 2 59
timeout server 50000 60 61 backend Social 62 balance roundrobin 63 cookie SERVERID insert nocache indirect 64 option httpclose 65 option forwardfor header X-Forwarded-For 66 server 10.2.1.53-weibo 10.2.1.53:25100 check inter 5000 fall 1 rise 2 67 server 10.2.1.54-weibo 10.2.1.54:25100 backup check inter 5000 fall 1 rise 2 68 timeout server 50000 69 70 backend CMS 71 balance roundrobin 72 cookie SERVERID insert nocache indirect 73 option httpclose 74 option forwardfor header X-Forwarded-For 75 server 10.2.1.53-CMS 10.2.1.53:9981 check inter 5000 fall 1 rise 2 76 server 10.2.1.54-CMS 10.2.1.54:9981 backup check inter 5000 fall 1 rise 2 79 timeout server 50000 80 81 backend Promotion 82 balance roundrobin 83 cookie SERVERID insert nocache indirect 84 option httpclose 85 option forwardfor header X-Forwarded-For 86 server 10.2.1.53-PRO 10.2.1.53:8982 check inter 5000 fall 1 rise 2 87 server 10.2.1.54-PRO 10.2.1.54:8982 backup check inter 5000 fall 1 rise 2 88 timeout server 50000 89 90 91 92 ####### 93 listen localhost 10.2.1.53:18888 94 mode http 95 stats refresh 30s #統計頁面的自動刷新時間 96 stats uri /haproxy-stats #統計頁面的url 97 stats realm Haproxy \ statistic #統計頁面密碼框上提示的文本 98 stats auth admin:uuzz@123 #統計頁面用戶名和密碼設置 99 stats hide-version #隱藏統計頁面上HAProxy的版本信息 100 stats admin if TRUE #手工啓用/禁用,後端服務器
另:
COOKIE 選項:
cookie JSESSIONID prefix :若是客戶端只支持一個cookie,而且服務器上的應用程序已經對返回設置了cookie,HAProxy設置此選項能夠改寫應用程序設置的cookie信息,把服務器的信息添加到原cookie中去。
cookie SERVERID indirect :HAProxy會刪除添加的cookie信息,避免此cookie信息發送到服務器。
cookie SERVERID rewrite :
cookie SERVERID insert :
cookie SERVERID insert nocache :
cookie SERVERID insert postonly :
cookie參數設置: http://dngood.blog.51cto.com/446195/1098105/