haproxy配置

 本文轉載自:http://blog.tianya.cn/blogger/post_read.asp?BlogID=3001183&PostID=34937939

global
參數是進程級的,通常和操作系統(OS)相關。這些參數一般只設置一次,如果配置無誤,就不需要再次配置進行修改
defaults
配置默認參數的,這些參數可以被利用配置到frontend,backend,listen組件
frontend
接收請求的前端虛擬節點,Frontend可以根據規則直接指定具體使用後端的 backend(可動態選擇)。
backend
後端服務集羣的配置,是真實的服務器,一個Backend對應一個或者多個實體服務器。
listen
Frontend和Backend的組合體。
以上5個組件不是必選的,可以根據需要選擇部分作爲配置。
詳細的配置信息,請查閱官方文檔

1.3版本
http://haproxy.1wt.eu/download/1.3/doc/configuration.txt
1.4版本
http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

組件配置如下:

global

#全局的日誌配置 其中日誌級別是[err warning info debug]
#local0 是日誌設備,必須爲如下24種標準syslog設備的一種:
#kern user mail daemon auth syslog lpr news
#uucp cron auth2 ftp ntp audit alert cron2
#local0 local1 local2 local3 local4 local5 local6 local7
#但是之前在/etc/syslog.conf文件中定義的是local0所以
#這裏也是用local0
#如果日誌無法寫到haproxy.log,解決方案如下
#vi /etc/syslog.conf
#添加 local3.* /var/log/haproxy.log
#添加 local0.* /var/log/haproxy.log
#vi /etc/sysconfig/syslog
#把SYSLOGD_OPTIONS="-m 0" 改成 SYSLOGD_OPTIONS="-r –m 0"
#重啓syslogd: /etc/init.d/syslog restart
log 127.0.0.1 local0 info #[err warning info debug]
#最大連接數
maxconn 4096
#用戶
user admin
#組
group admin
#使HAProxy進程進入後臺運行。這是推薦的運行模式
daemon
#創建4個進程進入deamon模式運行。此參數要求將運行模式設置爲"daemon"
nbproc 4
#將所有進程的pid寫入文件啓動進程的用戶必須有權限訪問此文件。
pidfile /usr/local/haproxy/haproxy.pid

defaults

#默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
mode http
#採用http日誌格式
option httplog
#三次連接失敗就認爲是服務器不可用,也可以通過後面設置
retries 3
如果cookie寫入了serverId而客戶端不會刷新cookie,
#當serverId對應的服務器掛掉後,強制定向到其他健康的服務器
option redispatch
#當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
option abortonclose
#默認的最大連接數
maxconn 4096
#連接超時
contimeout 5000
#客戶端超時
clitimeout 30000
#服務器超時
srvtimeout 30000
#=心跳檢測超時
timeout check 2000
#注:一些參數值爲時間,比如說timeout。時間值通常單位爲毫秒(ms),但是也可以通過加#後綴,來使用其他的單位。
#- us : microseconds. 1 microsecond = 1/1000000 second
#- ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
#- s : seconds. 1s = 1000ms
#- m : minutes. 1m = 60s = 60000ms
#- h : hours. 1h = 60m = 3600s = 3600000ms
#- d : days. 1d = 24h = 1440m = 86400s = 86400000ms

########統計頁面配置############
listen admin_stats
#監聽端口
bind 0.0.0.0:1080
#http的7層模式
mode http
#日誌設置
log 127.0.0.1 local0 err #[err warning info debug]
#統計頁面自動刷新時間
stats “““refresh””” 30s

#統計頁面url
stats uri /admin?stats
#統計頁面密碼框上提示文本
stats realm Gemini\ Haproxy
#統計頁面用戶名和密碼設置
stats auth admin:admin
stats auth admin1:admin1
#隱藏統計頁面上HAProxy的版本信息
stats hide-version
#######網站檢測listen定義############

listen site_status
bind 0.0.0.0:1081
mode http
log 127.0.0.1 local0 err #[err warning info debug]
#網站健康檢測URL,用來檢測HAProxy管理的網站是否可以用,正常返回200,不正常返回500
monitor-uri /site_status
#定義網站down時的策略
#當掛在負載均衡上的指定backend的中有效機器數小於1臺時返回true
acl site_dead nbsrv(denali_server) lt 1
acl site_dead nbsrv(tm_server) lt 1
acl site_dead nbsrv(mms_server) lt 1
#當滿足策略的時候返回500
monitor fail if site_dead
#如果192.168.0.252或者192.168.0.31這兩天機器掛了
#認爲網站掛了,這時候返回500,判斷標準是如果mode是
#http返回200認爲是正常的,如果mode是tcp認爲端口暢通是好的
monitor-net 192.168.0.252/31

########frontend配置############
frontend http_80_in
#監聽端口
bind 0.0.0.0:80
#http的7層模式
mode http
#應用全局的日誌配置
log global
#啓用http的log
option httplog
#每次請求完畢後主動關閉http通道,HA-Proxy不支持keep-alive模式
option httpclose
#如果後端服務器需要獲得客戶端的真實IP需要配置次參數,將可以從Http Header中
#獲得客戶端IP
option forwardfor

###########HAProxy的日誌記錄內容配置##########
capture request header Host len 40
capture request header Content-Length len 10
capture request header Referer len 200
capture response header Server len 40
capture response header Content-Length len 10
capture response header Cache-Control len 8

####################acl策略定義#########################
#如果請求的域名滿足正則表達式返回true -i是忽略大小寫
acl denali_policy hdr_reg(host) -i ^(www.xxx.net|...
#如果請求域名滿足trade.xxx.net 返回 true -i是忽略大小寫
acl tm_policy hdr_dom(host) -i trade.xxx.net
##在請求url中包含sip_apiname=,則此控制策略返回true,否則爲false
acl invalid_req url_sub -i sip_apiname=
##在請求url中存在timetask作爲部分地址路徑,則此控制策略返回true,否則返回false
acl timetask_req url_dir -i timetask
#當請求的header中Content-length等於0時返回 true
acl missing_cl hdr_cnt(Content-length) eq 0


######################acl策略匹配相應###################
##當請求中header中Content-length等於0 阻止請求返回403
block if missing_cl
##block表示阻止請求,返回403錯誤,當前表示如果不滿足策略invalid_req,或者滿足策略timetask_req,則阻止請求。
block if !invalid_req || timetask_req
#當滿足denali_policy的策略時使用denali_server的backend
use_backend denali_server if denali_policy
#當滿足tm_policy的策略時使用tm_server的backend
use_backend tm_server if tm_policy
#reqisetbe關鍵字定義,根據定義的關鍵字選擇backend
reqisetbe ^Host:\ img dynamic
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic
reqisetbe ^[^\ ]*\ /admin/stats stats
#以上都不滿足的時候使用默認mms_server的backend
default_backend mms_server
#HAProxy錯誤頁面設置
errorfile 400 /usr/local/haproxy/errorfiles/400.http
errorfile 403 /usr/local/haproxy/errorfiles/403.http
errorfile 408 /usr/local/haproxy/errorfiles/408.http
errorfile 500 /usr/local/haproxy/errorfiles/500.http
errorfile 502 /usr/local/haproxy/errorfiles/502.http

errorfile 503 /usr/local/haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http

##########backend的設置##############
backend mms_server
#http的7層模式
mode http
#負載均衡的方式,roundrobin平均方式
balance roundrobin
#允許插入serverid到cookie中,serverid後面可以定義
cookie SERVERID
#心跳檢測的URL,HTTP/1.1¥r¥nHost:XXXX,指定了心跳檢測HTTP的版本,XXX爲檢測時請求
#服務器的request中的域名是什麼,這個在應用的檢測URL對應的功能有對域名依賴的話需要設置
option httpchk GET /member/login.html HTTP/1.1\r\nHost:xxx.com
#服務器定義,cookie 1表示serverid爲1,check inter 1500 是檢測心跳頻率
#rise 3是3次正確認爲服務器可用,fall 3是3次失敗認爲服務器不可用,weight代表權重
server mms1 10.1.5.134:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1
server mms2 10.1.6.118:80 cookie 2 check inter 1500 rise 3 fall 3 weight 2




backend denali_server
mode http
#負載均衡的方式,source根據客戶端IP進行哈希的方式
balance source
#但設置了backup的時候,默認第一個backup會優先,設置option allbackups後
#所有備份服務器權重一樣
option allbackups
#心跳檢測URL設置
option httpchk GET /xxx/xxx.html HTTP/1.1\r\nHost:xxx.com
#可以根據機器的性能不同,不使用默認的連接數配置而使用自己的特殊的連接數配置
#如minconn 10 maxconn 20
server denlai1 10.1.5.114:80 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3
server denlai2 10.1.6.104:80 minconn 10 maxconn 20 check inter 1500 rise 3 fall 3
#備份機器配置,正常情況下備機不會使用,當主機的全部服務器都down的時候備機會啓用
server dnali-back1 10.1.7.114:80 check backup inter 1500 rise 3 fall 3
server dnali-back2 10.1.7.114:80 check backup inter 1500 rise 3 fall 3
backend tm_server
mode http
#負載均衡的方式,leastconn根據服務器當前的請求數,取當前請求數最少的服務器
balance leastconn
option httpchk GET /xxx/xxx.htm HTTP/1.1\r\nHost:trade.xxx.com

server tm1 10.1.5.115:80 check inter 1500 rise 3 fall 3
server tm2 10.1.6.105:80 check inter 1500 rise 3 fall 3
######reqisetbe自定義關鍵字匹配backend部分#######################
backend dynamic
mode http
balance source
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.xxx.net
server denlai1 10.3.5.114:80 check inter 1500 rise 3 fall 3
server denlai2 10.4.6.104:80 check inter 1500 rise 3 fall 3
backend stats
mode http
balance source
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.xxx.net
server denlai1 10.5.5.114:80 check inter 1500 rise 3 fall 3
server denlai2 10.6.6.104:80 check inter 1500 rise 3 fall 3


haproxy 的啓動
/usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/haproxy.cfg

Haproxy的重啓
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/haproxy.pid` (不要換行)

Haproxy的停止
Killall -9 haproxy

啓動參數
haproxy -f < 配置文件>
[-n 最大併發連接總數] [-N 每個偵聽的最大併發數] [-d] [-D] [-q] [-V] [-c] [-p ] [-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裏的進程發送FINISH信號,這個參數放在命令行的最後
-st 程序啓動後向pidlist裏的進程發送TERMINATE信號,這個參數放在命令行的最後

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