一篇就弄懂HAProxy的常規(guī)用法

首先,本文主要從應用角度來講講HAProxy的常規(guī)用法肿男,不會涉及到特別深的東西延都,另外本文涉及到的實例都是在ubuntu系統(tǒng)下進行的。

1. 方法論

HAProxy是一個開源的可提供高可用性掰烟、負載均衡的軟件,支持傳輸層(L4)和應用層(L7)的負載均衡能力沐批,功能豐富,從性能和穩(wěn)定性上來講基本能媲美商用的負載均衡軟件蝎亚,因此目前使用非常廣泛九孩。

軟件特性

  • 支持L4和L7兩種負載均衡的能力;
  • 支持健康檢查发框;
  • 支持狀態(tài)網頁監(jiān)控躺彬;
  • 支持SSL岂昭,能夠解析https協(xié)議顺囊;
  • 支持會話保持;

2. L4和L7負載均衡的區(qū)別

L4的負載均衡

L4的負載均衡是通過L3轉發(fā)的IP,加上L4的端口來決定哪些流量需要做負載均衡鸯屿,對需要處理的流量進行NAT處理,轉發(fā)至后臺服務器腔丧,并記錄下這個TCP或者UDP的流量是由哪臺服務器處理的警没,后續(xù)這個連接的所有流量都同樣轉發(fā)到同一臺服務器處理。

L7的負載均衡

L7的負載均衡是在L4的基礎上缔刹,除了通過IP+端口外球涛,還可以通過URL、頭信息校镐、瀏覽器等等應用層的信息來決定哪些流量需要做負載均衡亿扁。

3. HAProxy的健康檢查

HAProxy的健康檢查功能一般配置在backend或者listen區(qū)域,最簡單的配置即:option httpchk鸟廓,也就是檢查web服務器站點的根目錄是否存在从祝,不可靠無法保證后端的服務可用;此外如果后端Web服務器用的是nginx引谜,我們需要在nginx配置http options方法的可用牍陌,因為此時健康檢查是通過http的options方法來獲取web服務器的根目錄,否則HAProxy會報405煌张。實際使用中建議采用下面兩種健康檢查的方式:

  • option httpchk get /xxx.html # 獲取某個靜態(tài)文件
  • option httpchk HEAD /xxx.html HTTP/1.1\r\nHost:\ www.xxx.com # 獲取某個靜態(tài)文件的同時匹配頭信息

4. HAProxy網頁統(tǒng)計監(jiān)控功能

HAProxy支持網頁統(tǒng)計功能呐赡,配置非常簡單,下面給個具體的實例可參照如下:

listen stats
  bind 10.5.1.54:10000  # 頁面監(jiān)控功能綁定的ip及端口號
  stats uri /haproxy_stats  # haproxy頁面監(jiān)控的uri
  stats enable  # 打開頁面監(jiān)控功能
  stats hide-version  # 在頁面隱藏haproxy版本信息骏融,出于安全考慮
  stats refresh 10s  # 監(jiān)控頁面刷新時間
  stats realm HAProxy\ Stats    # 監(jiān)控頁面的認證提示链嘀,需要認證時這個配置才有意義
  stats auth admin:admin  # 監(jiān)控認證的用戶名及密碼
  • 然后我們在瀏覽器輸入其上配置uri就能打開haproxy的監(jiān)控頁面了:


從haproxy的監(jiān)控頁面我們可以及時偵測到各個后端服務的狀態(tài)及當前的連接請求數目等信息。

5. 解析https協(xié)議

說到HTTPS就不得不提到SSL了档玻,而haproxy的https的配置首先我們得準備個SSL證書怀泊,有關SSL證書的創(chuàng)建還請移步:創(chuàng)建HAProxy SSL證書,此處就不多做贅述误趴,下面直接說配置了:

  • http和https共存
frontend fe01
  bind *:80  # http
  bind *:443 ssl crt /path/to/xxx.pem  # https
  mode http
  default_backend backend_server01  # 后端代理server霹琼,下面配置會講到
  • only https
frontend fe01
  bind *:80
  bind *:443 ssl crt /path/to/xxx.pem  # https
  redirect scheme https if ! {ssl_fc}  # 如果是http則重定向到https的url
  mode http
  default_backend backend_server01

6. 支持會話保持

HAProxy的會話保持策略有好幾種,下面僅講述最常見的兩種:

  • IP Hash
    這種策略跟Nginx的ip_hash基本類似凉当,對于同一個源ip的客戶端請求都會發(fā)送到同一臺后端服務器枣申;但是如果多個客戶端通過代理或者地址轉換訪問服務器時,由于源IP相同請求都被分配到同一臺服務上看杭,這樣這臺服務器壓力就會比較大忠藤。另外這種策略常常會用在L4負載均衡上,配置參數很簡單:balance source楼雹。

  • cookie
    這是L7負載均衡會話保持的一個策略模孩,用戶在第一次請求時會插入一個cookie尖阔,等到下一次請求時會帶著這個cookie,從而達到前后端會話保持的目的榨咐,參數配置可參考如下:

listen example_service
  ...
  cookie <cookie_name> insert indirect nocache
  server node-4 192.168.0.8:3001 check cookie xxxx  ## 其中xxxx介却、yyyy是檢測的cookie的值
  server node-5 192.168.0.12:3001 check cookie yyyy

7. 常規(guī)配置用法

有關HAProxy參數的配置上文中也零零散散地涉及到一些,本節(jié)將詳細解釋常用的haproxy參數配置块茁。

首先haproxy的參數配置有五大快齿坷,分別是global、defaults龟劲、frontend胃夏、backend和listen,而配置文件分兩部分:/etc/haproxy/haproxy.cfg和/etc/haproxy/conf.d/*昌跌,通常會把global和defaults的配置放到haproxy.cfg仰禀,實際的代理配置都放到haproxy的conf.d目錄下面,然后在haproxy.cfg通過include conf.d/*.cfg來實現(xiàn)一個完整的haproxy的配置蚕愤。下面從配置放置的路徑來看看haproxy常用的配置參數吧答恶。

  • haproxy.cfg包括global和defaults配置,global是haproxy的全局配置萍诱,而defaults則對應默認的代理配置悬嗓,下面通過一個實例來說明:
global
  daemon  # 指定haproxy服務后臺模式運行
  user haproxy  # haproxy進程所述用戶
  group  haproxy  # haproxy進程所述用戶組
  log  /dev/log local0  # 日志輸出配置,最多可設置兩個裕坊,一般這塊跟rsyslog緊密相連
  maxconn  16000  # haproxy同時能處理最大連接數
  pidfile  /var/run/haproxy.pid  # haproxy進程pid保存文件
  spread-checks  3  # 在haproxy后端有著眾多服務器的場景中包竹,在精確的時間間隔后統(tǒng)一對眾服務器進行健康狀況檢查可能會帶來意外問題;此選項用于將其檢查的時間間隔長度上增加或減小一定的隨機時長籍凝;
  stats  socket /var/lib/haproxy/stats  # 開啟haproxy網頁監(jiān)控功能及對應的socket

defaults
  log  global  # 指定日志配置使用global的log配置
  maxconn  8000  # 單個代理實例同時允許的最大連接數
  mode  http  # 實例運行模式周瞎,tcp或http
  option  redispatch  # 連接失敗時會話是不是重新分發(fā)
  option  http-server-close # 一旦服務端響應過后server端的連接關閉
  option  splice-auto  # 啟動套接字的內核自動加速
  option  dontlognull  # 沒有數據傳輸的請求連接不記錄log
  retries  3  # 請求連接失敗的retry次數
  timeout  http-request 20s  # 創(chuàng)建連接后客戶端沒能完整發(fā)送http請求的超時時間
  timeout  queue 1m  # 隊列等待連接空閑的超時時間
  timeout  connect 10s  #  創(chuàng)建連接的超時時間
  timeout  client 1m  # 創(chuàng)建連接后客戶端持續(xù)不發(fā)送請求的超時時間
  timeout  server 1m  # 后端服務的響應超時時間
  timeout  check 10s  # 健康檢查的請求響應超時時間

include conf.d/*.cfg  # 具體的實例配置(可能包括frontend、backend饵蒂、listen的實例)
  • conf.d/*.cfg
    這一塊的配置文件可能會涉及到frontend(前端實例)声诸、backend(后端實例)和listen(前端+后端)三種類型的配置,下面各給出實例以作說明:
frontend frontend_server01
  bind *:3001  # 前端服務監(jiān)聽端口
  maxconn 3000  # 此端口的最大連接數目
  default_backend default_servers  # 默認使用的后端server

backend default_servers
  balance source  # 負載均衡的算法退盯,這里采用ip hash
  option  httpchk  # 開啟健康檢查功能
  option  httplog  # 開啟http log
  option  httpclose
  timeout server 600s  # 后端server響應haproxy請求的超時時間
  server node-4 192.168.0.8:3001 check inter 10s fastinter 2s downinter 3s rise 3 fall 3  # 配置后端server彼乌,可設置haproxy健康檢查及間隔時間還可根據server的狀態(tài)通過fastinter和downinter來優(yōu)化延遲、判斷該server是UP還是DOWN的機制等渊迁,在此配置連續(xù)三次檢查成功才認為server是UP慰照,而連續(xù)三次檢查失敗則認為server是DOWN
  server node-3 192.168.0.11:3001 check inter 10s fastinter 2s downinter 3s rise 3 fall 3
  server node-5 192.168.0.12:3001 check inter 10s fastinter 2s downinter 3s rise 3 fall 3

listen ripple
  bind 192.168.0.3:3000,10.5.1.54:3000
  http-request  set-header X-Forwarded-Proto https if { ssl_fc }
  balance source
  option  httpchk
  option  httplog
  option  httpclose
  timeout server  600s
  server node-4 192.168.0.8:3000 check inter 10s fastinter 2s downinter 3s rise 3 fall 3
  server node-3 192.168.0.11:3000 check inter 10s fastinter 2s downinter 3s rise 3 fall 3
  server node-5 192.168.0.12:3000 check inter 10s fastinter 2s downinter 3s rise 3 fall 3

listen其實是把前端和后端的配置放一塊了,配置的參數可用時參照前端和后端的配置琉朽,更詳細的配置參數的說明則可參照HAProxy配置參數詳細說明毒租,此處就不一一舉例解釋了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末漓骚,一起剝皮案震驚了整個濱河市蝌衔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝌蹂,老刑警劉巖噩斟,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孤个,居然都是意外死亡剃允,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門齐鲤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斥废,“玉大人,你說我怎么就攤上這事给郊∧等猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵淆九,是天一觀的道長统锤。 經常有香客問我,道長炭庙,這世上最難降的妖魔是什么饲窿? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮焕蹄,結果婚禮上逾雄,老公的妹妹穿的比我還像新娘。我一直安慰自己腻脏,他們只是感情好鸦泳,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迹卢,像睡著了一般辽故。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腐碱,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天誊垢,我揣著相機與錄音,去河邊找鬼症见。 笑死喂走,一個胖子當著我的面吹牛,可吹牛的內容都是我干的谋作。 我是一名探鬼主播芋肠,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遵蚜!你這毒婦竟也來了帖池?” 一聲冷哼從身側響起奈惑,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睡汹,沒想到半個月后肴甸,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡囚巴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年原在,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤叉。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡庶柿,死狀恐怖,靈堂內的尸體忽然破棺而出秽浇,到底是詐尸還是另有隱情浮庐,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布兼呵,位于F島的核電站兔辅,受9級特大地震影響,放射性物質發(fā)生泄漏击喂。R本人自食惡果不足惜维苔,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懂昂。 院中可真熱鬧介时,春花似錦、人聲如沸凌彬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铲敛。三九已至褐澎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伐蒋,已是汗流浹背工三。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留先鱼,地道東北人俭正。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像焙畔,于是被迫代替她去往敵國和親掸读。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容