HAProxy安裝配置詳解

HAProxy安裝配置詳解

簡介

HAProxy提供高可用性蹂析、負(fù)載均衡以及基于TCP和HTTP應(yīng)用的代理舔示,支持虛擬主機(jī),它是免費(fèi)电抚、快速并且可靠的一種解決方案惕稻。

HAProxy特別適用于那些負(fù)載特大的web站點(diǎn),這些站點(diǎn)通常又需要會話保持或七層處理蝙叛。

HAProxy運(yùn)行在當(dāng)前的硬件上俺祠,完全可以支持?jǐn)?shù)以萬計(jì)的并發(fā)連接。并且它的運(yùn)行模式使得它可以很簡單安全的整合進(jìn)您當(dāng)前的架構(gòu)中借帘, 同時可以保護(hù)你的web服務(wù)器不被暴露到網(wǎng)絡(luò)上蜘渣。

HAProxy實(shí)現(xiàn)了一種事件驅(qū)動, 單一進(jìn)程模型,此模型支持非常大的并發(fā)連接數(shù)肺然。多進(jìn)程或多線程模型受內(nèi)存限制 蔫缸、系統(tǒng)調(diào)度器限制以及無處不在的鎖限制,很少能處理數(shù)千并發(fā)連接际起。事件驅(qū)動模型因?yàn)樵谟懈玫馁Y源和時間管理的用戶空間(User-Space) 實(shí)現(xiàn)所有這

些任務(wù)拾碌,所以沒有這些問題吐葱。此模型的弊端是,在多核系統(tǒng)上校翔,這些程序通常擴(kuò)展性較差弟跑。這就是為什么他們必須進(jìn)行優(yōu)化以 使每個CPU時間片(Cycle)做更多的工作。

安裝

下載

wget http://mirrors.jsqix.com/soft/haproxy-1.7.5.tar.gz

解壓

tar -zxvf haproxy-1.7.5.tar.gz
cd haproxy-1.7.5

安裝

make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

參數(shù)說明

TARGET=linux26 #內(nèi)核版本防症,使用uname -r查看內(nèi)核孟辑,如:2.6.18-371.el5,此時該參數(shù)就為linux26告希;kernel 大于2.6.28的用:TARGET=linux2628
ARCH=x86_64 #系統(tǒng)位數(shù)
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy為haprpxy安裝路徑

配置(自己創(chuàng)建)

【/usr/local/haproxy/haproxy.cfg】

###########全局配置#########
global
  log 127.0.0.1 local0 #[日志輸出配置扑浸,所有日志都記錄在本機(jī)烧给,通過local0輸出]
  log 127.0.0.1 local1 notice #定義haproxy 日志級別[error warringinfo debug]
  daemon #以后臺形式運(yùn)行harpoxy
  nbproc 1 #設(shè)置進(jìn)程數(shù)量
  maxconn 4096 #默認(rèn)最大連接數(shù),需考慮ulimit-n限制
  #user haproxy #運(yùn)行haproxy的用戶
  #group haproxy #運(yùn)行haproxy的用戶所在的組
  #pidfile /var/run/haproxy.pid #haproxy 進(jìn)程PID文件
  #ulimit-n 819200 #ulimit 的數(shù)量限制
  #chroot /usr/share/haproxy #chroot運(yùn)行路徑
  #debug #haproxy 調(diào)試級別燕偶,建議只在開啟單進(jìn)程的時候調(diào)試
  #quiet

########默認(rèn)配置############
defaults
  log global
  mode http #默認(rèn)的模式mode { tcp|http|health },tcp是4層础嫡,http是7層指么,health只會返回OK
  option httplog #日志類別,采用httplog
  option dontlognull #不記錄健康檢查日志信息
  retries 2 #兩次連接失敗就認(rèn)為是服務(wù)器不可用,也可以通過后面設(shè)置
  #option forwardfor #如果后端服務(wù)器需要獲得客戶端真實(shí)ip需要配置的參數(shù)榴鼎,可以從Http Header中獲得客戶端ip
  option httpclose #每次請求完畢后主動關(guān)閉http通道,haproxy不支持keep-alive,只能模擬這種模式的實(shí)現(xiàn)
  #option redispatch #當(dāng)serverId對應(yīng)的服務(wù)器掛掉后伯诬,強(qiáng)制定向到其他健康的服務(wù)器,以后將不支持
  option abortonclose #當(dāng)服務(wù)器負(fù)載很高的時候巫财,自動結(jié)束掉當(dāng)前隊(duì)列處理比較久的鏈接
  maxconn 4096 #默認(rèn)的最大連接數(shù)
  timeout connect 5000ms #連接超時
  timeout client 30000ms #客戶端超時
  timeout server 30000ms #服務(wù)器超時
  #timeout check 2000 #心跳檢測超時
  #timeout http-keep-alive10s #默認(rèn)持久連接超時時間
  #timeout http-request 10s #默認(rèn)http請求超時時間
  #timeout queue 1m #默認(rèn)隊(duì)列超時時間
  balance roundrobin #設(shè)置默認(rèn)負(fù)載均衡方式盗似,輪詢方式
  #balance source #設(shè)置默認(rèn)負(fù)載均衡方式,類似于nginx的ip_hash
  #balnace leastconn #設(shè)置默認(rèn)負(fù)載均衡方式平项,最小連接數(shù)

########統(tǒng)計(jì)頁面配置########
listen stats
  bind 0.0.0.0:1080 #設(shè)置Frontend和Backend的組合體赫舒,監(jiān)控組的名稱,按需要自定義名稱
  mode http #http的7層模式
  option httplog #采用http日志格式
  #log 127.0.0.1 local0 err #錯誤日志記錄
  maxconn 10 #默認(rèn)的最大連接數(shù)
  stats refresh 30s #統(tǒng)計(jì)頁面自動刷新時間
  stats uri /stats #統(tǒng)計(jì)頁面url
  stats realm XingCloud\ Haproxy #統(tǒng)計(jì)頁面密碼框上提示文本
  stats auth admin:admin #設(shè)置監(jiān)控頁面的用戶和密碼:admin,可以設(shè)置多個用戶名
  stats auth Frank:Frank #設(shè)置監(jiān)控頁面的用戶和密碼:Frank
  stats hide-version #隱藏統(tǒng)計(jì)頁面上HAProxy的版本信息
  stats admin if TRUE #設(shè)置手工啟動/禁用闽瓢,后端服務(wù)器(haproxy-1.4.9以后版本)

########設(shè)置haproxy 錯誤頁面#####
#errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
#errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
#errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
#errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
#errorfile 504 /home/haproxy/haproxy/errorfiles/504.http

########frontend前端配置##############
frontend main
  bind *:80 #這里建議使用bind *:80的方式接癌,要不然做集群高可用的時候有問題,vip切換到其他機(jī)器就不能訪問了扣讼。
  acl web hdr(host) -i www.abc.com  #acl后面是規(guī)則名稱缺猛,-i為忽略大小寫,后面跟的是要訪問的域名椭符,如果訪問www.abc.com這個域名荔燎,就觸發(fā)web規(guī)則,销钝。
  acl img hdr(host) -i img.abc.com  #如果訪問img.abc.com這個域名有咨,就觸發(fā)img規(guī)則。
  use_backend webserver if web   #如果上面定義的web規(guī)則被觸發(fā)曙搬,即訪問www.abc.com摔吏,就將請求分發(fā)到webserver這個作用域鸽嫂。
  use_backend imgserver if img   #如果上面定義的img規(guī)則被觸發(fā),即訪問img.abc.com征讲,就將請求分發(fā)到imgserver這個作用域据某。
  default_backend dynamic #不滿足則響應(yīng)backend的默認(rèn)頁面

########backend后端配置##############
backend webserver #webserver作用域
  mode http
  balance roundrobin #balance roundrobin 負(fù)載輪詢,balance source 保存session值诗箍,支持static-rr癣籽,leastconn,first滤祖,uri等參數(shù)
  option httpchk /index.html HTTP/1.0 #健康檢查, 檢測文件筷狼,如果分發(fā)到后臺index.html訪問不到就不再分發(fā)給它
  server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3
  server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3
  #cookie 1表示serverid為1,check inter 1500 是檢測心跳頻率 
  #rise 2是2次正確認(rèn)為服務(wù)器可用匠童,fall 3是3次失敗認(rèn)為服務(wù)器不可用埂材,weight代表權(quán)重

backend imgserver
  mode http
  option httpchk /index.php
  balance roundrobin 
  server img01 192.168.137.101:80 check inter 2000 fall 3
  server img02 192.168.137.102:80 check inter 2000 fall 3

backend dynamic 
  balance roundrobin 
  server test1 192.168.1.23:80 check maxconn 2000 
  server test2 192.168.1.24:80 check maxconn 2000


listen tcptest 
  bind 0.0.0.0:5222 
  mode tcp 
  option tcplog #采用tcp日志格式 
  balance source 
  #log 127.0.0.1 local0 debug 
  server s1 192.168.100.204:7222 weight 1 
  server s2 192.168.100.208:7222 weight 1

負(fù)載均衡算法

一、roundrobin汤求,表示簡單的輪詢俏险,每個服務(wù)器根據(jù)權(quán)重輪流使用,在服務(wù)器的處理時間平均分配的情況下這是最流暢和公平的算法扬绪。該算法是動態(tài)的竖独,對于實(shí)例啟動慢的服務(wù)器權(quán)重會在運(yùn)行中調(diào)整。

二挤牛、static-rr莹痢,表示根據(jù)權(quán)重,建議關(guān)注墓赴;每個服務(wù)器根據(jù)權(quán)重輪流使用竞膳,類似roundrobin,但它是靜態(tài)的竣蹦,意味著運(yùn)行時修改權(quán)限是無效的顶猜。另外,它對服務(wù)器的數(shù)量沒有限制痘括。

三长窄、leastconn,表示最少連接者先處理纲菌,建議關(guān)注挠日;leastconn建議用于長會話服務(wù),例如LDAP翰舌、SQL嚣潜、TSE等,而不適合短會話協(xié)議椅贱。如HTTP.該算法是動態(tài)的懂算,對于實(shí)例啟動慢的服務(wù)器權(quán)重會在運(yùn)行中調(diào)整只冻。

四、source计技,表示根據(jù)請求源IP喜德,建議關(guān)注;對請求源IP地址進(jìn)行哈希垮媒,用可用服務(wù)器的權(quán)重總數(shù)除以哈希值舍悯,根據(jù)結(jié)果進(jìn)行分配。
           只要服務(wù)器正常睡雇,同一個客戶端IP地址總是訪問同一個服務(wù)器萌衬。如果哈希的結(jié)果隨可用服務(wù)器數(shù)量而變化,那么客戶端會定向到不同的服務(wù)器它抱;
           該算法一般用于不能插入cookie的Tcp模式秕豫。它還可以用于廣域網(wǎng)上為拒絕使用會話cookie的客戶端提供最有效的粘連;
           該算法默認(rèn)是靜態(tài)的抗愁,所以運(yùn)行時修改服務(wù)器的權(quán)重是無效的馁蒂,但是算法會根據(jù)“hash-type”的變化做調(diào)整呵晚。
五蜘腌、uri,表示根據(jù)請求的URI饵隙;表示根據(jù)請求的URI左端(問號之前)進(jìn)行哈希撮珠,用可用服務(wù)器的權(quán)重總數(shù)除以哈希值,根據(jù)結(jié)果進(jìn)行分配金矛。
        只要服務(wù)器正常芯急,同一個URI地址總是訪問同一個服務(wù)器。
        一般用于代理緩存和反病毒代理驶俊,以最大限度的提高緩存的命中率娶耍。該算法只能用于HTTP后端;
        該算法一般用于后端是緩存服務(wù)器饼酿;
        該算法默認(rèn)是靜態(tài)的榕酒,所以運(yùn)行時修改服務(wù)器的權(quán)重是無效的,但是算法會根據(jù)“hash-type”的變化做調(diào)整故俐。
六想鹰、url_param,表示根據(jù)請求的URl參數(shù)'balance url_param' requires an URL parameter name
              在HTTP GET請求的查詢串中查找<param>中指定的URL參數(shù)药版,基本上可以鎖定使用特制的URL到特定的負(fù)載均衡器節(jié)點(diǎn)的要求辑舷;
              該算法一般用于將同一個用戶的信息發(fā)送到同一個后端服務(wù)器;
              該算法默認(rèn)是靜態(tài)的槽片,所以運(yùn)行時修改服務(wù)器的權(quán)重是無效的何缓,但是算法會根據(jù)“hash-type”的變化做調(diào)整肢础。
七、hdr(name)碌廓,表示根據(jù)HTTP請求頭來鎖定每一次HTTP請求乔妈;
              在每個HTTP請求中查找HTTP頭<name>,HTTP頭<name>將被看作在每個HTTP請求氓皱,并針對特定的節(jié)點(diǎn)路召;
              如果缺少頭或者頭沒有任何值,則用roundrobin代替波材;
              該算法默認(rèn)是靜態(tài)的股淡,所以運(yùn)行時修改服務(wù)器的權(quán)重是無效的,但是算法會根據(jù)“hash-type”的變化做調(diào)整廷区。
八唯灵、rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來鎖定并哈希每一次TCP請求隙轻。
                     為每個進(jìn)來的TCP請求查詢并哈希RDP cookie<name>埠帕;
                     該機(jī)制用于退化的持久模式,可以使同一個用戶或者同一個會話ID總是發(fā)送給同一臺服務(wù)器玖绿。
                     如果沒有cookie敛瓷,則使用roundrobin算法代替;
                     該算法默認(rèn)是靜態(tài)的斑匪,所以運(yùn)行時修改服務(wù)器的權(quán)重是無效的呐籽,但是算法會根據(jù)“hash-type”的變化做調(diào)整。

其實(shí)這些算法各有各的用法蚀瘸,我們平時應(yīng)用得比較多的應(yīng)該是roundrobin狡蝶、source和lestconn。

ACL規(guī)則定義

########ACL策略定義#########################
1贮勃、#如果請求的域名滿足正則表達(dá)式返回true -i是忽略大小寫
acl denali_policy hdr_reg(host) -i ^(www.inbank.com|image.inbank.com)$

2贪惹、#如果請求域名滿足www.inbank.com 返回 true -i是忽略大小寫
acl tm_policy hdr_dom(host) -i www.inbank.com

3、#在請求url中包含sip_apiname=寂嘉,則此控制策略返回true,否則為false
acl invalid_req url_sub -i sip_apiname=#定義一個名為invalid_req的策略

4奏瞬、#在請求url中存在timetask作為部分地址路徑,則此控制策略返回true,否則返回false
acl timetask_req url_dir -i timetask

5垫释、#當(dāng)請求的header中Content-length等于0時返回 true
acl missing_cl hdr_cnt(Content-length) eq 0

#########acl策略匹配相應(yīng)###################
1丝格、#當(dāng)請求中header中Content-length等于0 阻止請求返回403
block if missing_cl

2、#block表示阻止請求棵譬,返回403錯誤显蝌,當(dāng)前表示如果不滿足策略invalid_req,或者滿足策略timetask_req,則阻止請求曼尊。
block if !invalid_req || timetask_req

3酬诀、#當(dāng)滿足denali_policy的策略時使用denali_server的backend
use_backend denali_server if denali_policy

4、#當(dāng)滿足tm_policy的策略時使用tm_server的backend
use_backend tm_server if tm_policy

5骆撇、#reqisetbe關(guān)鍵字定義瞒御,根據(jù)定義的關(guān)鍵字選擇backend
reqisetbe ^Host:\ img dynamic
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic
reqisetbe ^[^\ ]*\ /admin/stats stats

6、#以上都不滿足的時候使用默認(rèn)mms_server的backend
default_backend mms

啟動

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 

查看狀態(tài)

http://192.168.1.22:1080/stats

說明:

#1080即haproxy配置文件中監(jiān)聽端口
s#tats 即haproxy配置文件中的監(jiān)聽名稱
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末神郊,一起剝皮案震驚了整個濱河市肴裙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涌乳,老刑警劉巖蜻懦,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夕晓,居然都是意外死亡宛乃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蒸辆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來征炼,“玉大人,你說我怎么就攤上這事躬贡∽话拢” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵逗宜,是天一觀的道長雄右。 經(jīng)常有香客問我,道長纺讲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任囤屹,我火速辦了婚禮熬甚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肋坚。我一直安慰自己乡括,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布智厌。 她就那樣靜靜地躺著诲泌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铣鹏。 梳的紋絲不亂的頭發(fā)上敷扫,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音诚卸,去河邊找鬼葵第。 笑死绘迁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卒密。 我是一名探鬼主播缀台,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哮奇!你這毒婦竟也來了膛腐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鼎俘,失蹤者是張志新(化名)和其女友劉穎依疼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體而芥,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡律罢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棍丐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片误辑。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖歌逢,靈堂內(nèi)的尸體忽然破棺而出巾钉,到底是詐尸還是另有隱情,我是刑警寧澤秘案,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布砰苍,位于F島的核電站,受9級特大地震影響阱高,放射性物質(zhì)發(fā)生泄漏赚导。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一赤惊、第九天 我趴在偏房一處隱蔽的房頂上張望吼旧。 院中可真熱鬧,春花似錦未舟、人聲如沸圈暗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽员串。三九已至,卻和暖如春昼扛,著一層夾襖步出監(jiān)牢的瞬間寸齐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留访忿,地道東北人瞧栗。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像海铆,于是被迫代替她去往敵國和親迹恐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 【摘要】 面對大量用戶訪問卧斟、高并發(fā)請求殴边,海量數(shù)據(jù),可以使用高性能的服務(wù)器珍语、大型數(shù)據(jù)庫锤岸,存儲設(shè)備,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,564評論 0 24
  • 互聯(lián)網(wǎng)架構(gòu)基礎(chǔ)知識 一板乙、網(wǎng)站常見架構(gòu) 負(fù)載層 頁面緩存層 web層 數(shù)據(jù)層 二是偷、運(yùn)維法則 緩存為王 盡量在前端(緩...
    魏鎮(zhèn)坪閱讀 4,823評論 0 9
  • 摘要:面對大量用戶訪問、高并發(fā)請求募逞,海量數(shù)據(jù)蛋铆,可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫放接,存儲設(shè)備刺啦,高性能Web服務(wù)器,采...
    layjoy閱讀 13,823評論 3 93
  • 目錄: HAProxy是什么 HAProxy的核心能力和關(guān)鍵特性 HAProxy的安裝和運(yùn)行 使用HAProxy搭...
    kelgon閱讀 79,880評論 9 159
  • 轉(zhuǎn)自(有部分自己補(bǔ)充的內(nèi)容):http://freeloda.blog.51cto.com/2033581/129...
    C86guli閱讀 1,345評論 0 1