一、haproxy簡介
haproxy是乙個使用c語言編寫的自由及開放源**軟體[1],其提供
高可用性
、 負載均衡
,以及基於
tcp和 http
的應用程式
**。
haproxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。haproxy執行在當前的硬體上,完全可以支援數以萬計的
併發連線
。並且它的執行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web伺服器不被暴露到網路上。
haproxy實現了一種事件驅動
,單一程序模型,此模型支援非常大的併發連線數。
多程序或多執行緒模型受記憶體限制 、系統排程器限制以及無處不在的鎖限制,很少能處理數千併發連線。
事件驅動模型
因為在有更好的資源和時間管理的使用者空間(user-space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程式通常擴充套件性較差。這就是為什麼他們必須進行優化以 使每個cpu時間片(cycle)做更多的工作。
包括 github
、 bitbucket
[3]、stack overflow[4]、
、 tumblr
[5][6]和
tuenti
[7]在內的知名**,及亞馬遜網路服務系統都使用了haproxy。
二 安裝#解壓
tar -zxvf haproxy-1.3.20
.tar.gzcd haproxy-1.3.20#安裝
make target=linux2628 arch=x86_64 prefix=/usr/local/
haproxy
make install prefix=/usr/local/
haproxy
#引數說明
target=linux26
#核心版本,使用uname -r檢視核心,如:2.6.18-371.el5,此時該引數就為linux26;kernel 大於2.6.28的用:target=linux2628
arch=x86_64
#系統位數
prefix=/usr/local/haprpxy
#/usr/local/haprpxy為haprpxy安裝路徑
三 配置
安裝完畢後,進入安裝目錄配置檔案,預設情況下目錄裡是沒有.cfg配置檔案的,可以回到安裝檔案目錄下將examples下的haproxy.cfg拷貝到usr/local/haproxy下。
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0 #日誌輸出配置,所有日誌都記錄在本機,通過local0輸出
log 127.0.0.1 local1 notice #定義日誌級別[error warring info debug]
maxconn 4096 #最大連線數,需考慮ulimit -n 限制
chroot /usr/local/haproxy #chroot執行路徑
uid 99 #以什麼身份執行程序
gid 99
#user haproxy 執行haproxy的使用者
#group haproxy 執行haproxy的組
daemon #以後臺形式執行haproxy
nbproc 2 #設定程序數量
pidfile /usr/local/haproxy/haproxy.pid #程序pid檔案路徑
#debug #haproxy除錯級別,建議只在開啟單程序的時候啟動除錯
#quiet
defaults
log global
log 127.0.0.1 local3
mode http #預設的模式mode ,tcp是4層,http是7層,health只會返回ok
option httplog #日誌級別,採用httplog
option dontlognull #不記錄健康檢查日誌資訊
option forwardfor #如果後端伺服器需要獲得客戶機真實ip需要配置的引數,可以從http header中獲取客戶端ip
option httpclose #每次請求完畢後主動關閉http通道,haproxy不支援keep-alive,只能模擬這種模式的實現
retries 3 #三次連線失敗就認為是伺服器不可用,也可以通過後面設定
option redispatch #當serverid對應的伺服器掛掉後,強制定向到其他健康的伺服器,以後將不支援
maxconn 2000 #最大連線數
contimeout 5000 #連線超時
clitimeout 50000 #客戶端超時
srvtimeout 50000 #伺服器超時
stats uri /stats #統計頁面url
stats auth frank:frank #設定監控頁面的使用者和密碼
stats hide-version #隱藏統計頁面上haproxy的版本資訊
stats refresh 30s
###設定haproxy錯誤頁面
bind *:80 #這裡建議使用bind *:80的方式,要不然做集群高可用的時候有問題,vip切換到其他機器上就不能訪問了
acl web hdr(host) -i bbs.king.org #acl後面是規則名稱,-i為忽略大小寫,後面跟的是要訪問的網域名稱,如果訪問www.king.org這個網域名稱,就觸發web規則
use_backend webserver if web #如果上面定義的web規則被觸發,即訪問www.king.org,就將請求分發到webserver這個作用域
default_backend dynamic #不滿足則相應backend的預設頁面
backend webserver #webserver作用域
mode http #使用http模式
balance roundrobin #負載均衡模式,roundrobin負載輪詢,balance source儲存session值,支援static-rr,leastconn,first,uri等引數
option httpchk get /index.html #健康檢查 ,如果訪問不到index.html就不分發給它
option httpclose :haproxy會針對客戶端的第一條請求的返回新增cookie並返回給客戶端,客戶端傳送後續請求時會傳送
此cookie到haproxy,haproxy會針對此cookie分發到上次處理此請求的伺服器上,如果伺服器不能忽略
此cookie值會影響處理結果。如果避免這種情況配置此選項,防止產生多餘的cookie資訊。
haproxy安裝配置
haproxy提供高可用性 負載均衡以及基於tcp和http應用的 支援虛擬主機,它是免費 快速並且可靠的一種解決方案。haproxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。haproxy執行在當前的硬體上,完全可以支援數以萬計的併發連線。並且它的執行模式使得它可以...
haproxy安裝 配置
1 官網 2 安裝yum list grep haproxy yum install haproxy3 目錄結構 etc rc.d init.d haproxy etc haproxy 配置檔案目錄 etc logrotate.d haproxy etc sysconfig haproxy var ...
HAProxy 日誌輸出及配置
正所謂,沒有軟體敢說沒有bug,人無完人,software is not perfect software。是軟體就可能存在bug,那麼如果出現bug,我們就要分析對我們業務的影響及可能如何避免bug的再現。haproxy也不例外,也可能在特殊場景下出現bug,因此我們就有必要記錄下必要的日誌資訊。...