haproxy下載:http://pan.baidu.com/s/1miEvQUc
測試環境說明:
ip地址 | 作用 | 開放端口 | 備注 |
192.168.44.144 | 安裝sql server,IIS服務網站 | 1433,8080 | 供192.168.44.146 訪問 |
192.168.44.146 | 安裝haproxy | 1433,8088 | 供外網或宿主機訪問 |
192.168.44.144 安裝sql server (開放端口 1433) ,IIS服務網站 (開放端口8080)
供192.168.44.146 訪問
192.168.44.146 安裝haproxy並開放端口(1433,8088)
供外網或宿主機訪問
haproxy.cfg:
global
maxconn 1500
nbproc 1
daemon
defaults
mode tcp
retries 1
option redispatch
maxconn 2000
timeout connect 5s
timeout client 120s
timeout server 120s
listen sqlserver:1433
bind 0.0.0.0:1433
mode tcp
balance first
server sql_server 192.168.44.144:1433 check inter 1000 rise 3 fall 1 id 1
listen test1 #Frontend和Backend的組合體,監控組的名稱,按需自定義名稱
bind 0.0.0.0:8088 #監聽端口
mode http #http的7層模式
server test_1 192.168.44.144:8080 check inter 1000 rise 3 fall 1 id 1
啟動腳本命令:
haproxy.exe -f haproxy.cfg -d
-d為前端啟動,-D為后端啟動
或者,直接運行 run.bat
Haproxy配制介紹:
global # 全局參數的設置
log 127.0.0.1 local2 # log語法:log <address_1>[max_level_1] # 全局的日志配置,使用log關鍵字,
指定使用127.0.0.1
上的syslog服務中的local0日志設備,記錄日志等級為info的日志
chroot /var/lib/haproxy #改變當前工作目錄
pidfile /var/run/haproxy.pid #當前進程id文件
maxconn 4000 #最大連接數
user haproxy #所屬用戶
group haproxy #所屬組
daemon #以守護進程方式運行haproxy
stats socket /var/lib/haproxy/stats
defaults
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
log global #應用全局的日志配置
option httplog # 啟用日志記錄HTTP請求,默認haproxy日志記錄是不記錄HTTP請求日志
option dontlognull # 啟用該項,日志中將不會記錄空連接。所謂空連接就是在上游的負載均衡器
或者監控系統為了探測該 服務是否存活可用時,需要定期的連接或者獲取某
一固定的組件或頁面,或者探測掃描端口是否在監聽或開放等動作被稱為空連接;
官方文檔中標注,如果該服務上游沒有其他的負載均衡器的話,建議不要使用
該參數,因為互聯網上的惡意掃描或其他動作就不會被記錄下來
option http-server-close #每次請求完畢后主動關閉http通道
option forwardfor except 127.0.0.0/8 #如果服務器上的應用程序想記錄發起請求的客戶端的IP地址,需要在HAProxy
上 配置此選項, 這樣 HAProxy會把客戶端的IP信息發送給服務器,在HTTP
請求中添加"X-Forwarded-For"字段。 啟用 X-Forwarded-For,在requests
頭部插入客戶端IP發送給后端的server,使后端server獲取到客戶端的真實IP。
option redispatch # 當使用了cookie時,haproxy將會將其請求的后端服務器的serverID插入到
cookie中,以保證會話的SESSION持久性;而此時,如果后端的服務器宕掉
了, 但是客戶端的cookie是不會刷新的,如果設置此參數,將會將客戶的請
求強制定向到另外一個后端server上,以保證服務的正常。
retries 3 # 定義連接后端服務器的失敗重連次數,連接失敗次數超過此值后將會將對應后端
服務器標記為不可用
timeout http-request 10s #http請求超時時間
timeout queue 1m #一個請求在隊列里的超時時間
timeout connect 10s #連接超時
timeout client 1m #客戶端超時
timeout server 1m #服務器端超時
timeout http-keep-alive 10s #設置http-keep-alive的超時時間
timeout check 10s #檢測超時
maxconn 3000 #每個進程可用的最大連接數
frontend main *:80 #監聽地址為80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend my_webserver #定義一個名為my_app前端部分。此處將對於的請求轉發給后端
backend static #使用了靜態動態分離(如果url_path匹配 .jpg .gif .png .css .js靜態文件則
訪問此后端)
balance roundrobin #負載均衡算法(#banlance roundrobin 輪詢,balance source 保存session值,
支持static-rr,leastconn,first,uri等參數)
server static 127.0.0.1:80 check #靜態文件部署在本機(也可以部署在其他機器或者squid緩存服務器)
backend my_webserver #定義一個名為my_webserver后端部分。PS:此處my_webserver只是一個
自定義名字而已,但是需要與frontend里面配置項default_backend 值相一致
balance roundrobin #負載均衡算法
server web01 172.31.2.33:80 check inter 2000 fall 3 weight 30 #定義的多個后端
server web02 172.31.2.34:80 check inter 2000 fall 3 weight 30 #定義的多個后端
server web03 172.31.2.35:80 check inter 2000 fall 3 weight 30 #定義的多個后端
測試:
IIS服務網站設置:
系統:windows 2008 R2
主機:
192.168.44.144
開始--》管理工具--》服務器管理

添加角色:

下一步,
然后選擇:

下一步,在彈出的界面中,勾上Web服務器,再勾上管理工具下的所有子項,再下一步

再下一步,安裝,結束后重啟一下服務器

點+號,展開該域服務器名稱
右鍵單擊 網站,點擊 添加網站


測試:

開放端口:
192.168.44.144 開放端口 1433,8080
192.168.44.146 開放端口1433,8088

通過外網或宿主機訪問 (公外,須要配制)192.168.44.146

haproxy前端啟動信息:

haproxy的ip信息

開放端口信息

宿主機中訪問

宿主機中連接sql server

haproxy中有http請求時信息

附件列表