HAProxy簡介及配置文件詳解(一)

一 HAProxy簡介
   HAProxy提供高可用、負載均衡以及基於TCP和HTTP的應用代理,適合處理高負載站點的七層數據請求。類似的代理服務可以屏蔽內部真實服務器,防止內部服務器遭受攻擊。
   HAProxy特點和優點
   1.支持原聲SSL,同時支持客戶端和服務器的SSL.
   2.支持IPv6和UNIX套字節(sockets
   3.支持HTTP Keep-Alive
   4.支持HTTP/1.1壓縮,節省寬帶
   5.支持優化健康檢測機制(SSL、scripted TCP、check agent...)
   6.支持7層負載均衡
   7.可靠性和穩定性非常好。
   8.併發連接40000-50000個,單位時間處理最大請求20000個,最大數據處理10Gbps.
   9.支持8種負載均衡算法,同時支持session保持。
   10.支持虛擬主機
   11.支持連接拒絕全透明代理
   12.擁有服務器狀態監控頁面
   13.支持ACL.

   HAProxy爲了讓同一客戶端訪問服務器可以保持會話。有三種解決方法:客戶端IPCookie以及Session
   1.HAProxy通過客戶端IP進行Hash計算並保存,以此確保當相同IP訪問代理服務器可以轉發給固定的真實服務器。
   2.HAProxy依靠真實服務器發送客戶端的Cookie信息進行會話保持。
   3.HAProxy將保存真實服務器的Session以及服務器標識,實現會話保持。
   (HAProxy只要求後端服務器能夠在網絡聯通,也沒有像LVS那樣繁瑣的ARP配置)
   HAProxy的balance8種負載均衡算法:
   1.roundrobin : 基於權重輪循。
   2.static-rr : 基於權重輪循。靜態算法,運行時改變無法生效
   3.source : 基於請求源IP的算法。對請求的源IP進行hash運算,然後將結果與後端服務器的權重總數想除後轉發至某臺匹配服務器。使同一IP客戶端請求始終被轉發到某特定的後端服務器。
   4.leastconn : 最小連接。(適合數據庫負載均衡,不適合會話短的環境) 
   5.uri : 對部分或整體URI進行hash運算,再與服務器的總權重想除,最後轉發到匹配後端。
   6.uri_param : 根據URL路徑中參數進行轉發,保證在後端服務器數量不變的情況下,同一用戶請求分發到同一機器。
   7.hdr(<name>) : 根據http頭轉發,如果不存在http頭。則使用簡單輪循。
   HAProxy主要工作模式
   1.tcp模式:該模式下,在客戶端和服務器之間將建立一個全雙工的連接,且不會對7層的報文做任何處理的簡單模式。此模式默認,通常用於SSL、SSH、SMTP應用。
   2.http模式(一般使用):該模式下,客戶端請求在轉發給後端服務器之前會被深度分析,所有不與RFC格式兼容的請求都會被拒絕。
   HAProxy架構圖

二 HAProxy安裝及配置文件參數
   HAProxy安裝
  1. yum install haproxy -y
   HAProxy環境
  1. 配置文件:/etc/haproxy/haproxy.cfg
  2. global 全局配置段
  3. 進程及安全配置相關的參數
  4. 性能調整相關參數
  5. Debug相關參數
  6. (proxies 代理配置段)
  7. default 默認配置 (fronttend backend listen 三個的默認參數)
  8. frontend 前端 定義一系列監聽套字節,接收客戶端請求
  9. backend 後端 定義一系列後端服務器,請求轉發
  10. listen 前後端直接關聯
    配置文件詳解
  1. global
  2.    chroot dir #工作目錄chroot
  3. #全局日誌配置,使用127.0.0.1的rsyslog服務中local3日誌設備,等級info
  4. log 127.0.0.1 local3 info
  5. #每個進程最大併發數
  6. maxconn 4096
  7.  #後臺進程數量
  8. nbproc 1
  9.  #用戶
  10. user nobody
  11. group nobody
  12. #後臺程序模式工作
  13. daemon
  14.    #HAProxy pid文件存儲目錄
  15. pidfile /var/run/haproxy-private.pid
  16.    #tune.bufsize 16384 設置buffer(B)
  1. defaults
  2. #模式(tcp http health)
  3. mode http
  4. #連接後端服務器重試次數,超出後標爲不可用
  5.    retries 3
  6. timeout connect 10S #連接服務器最長等待時間(ms)
  7. timeout client 20s #連接客戶端發送數據最長等待時間。
  8. timeout server 30s #服務器回覆客戶端最長等待時間。
  9. timeout check 5s #對後端服務器的檢測超時時間。    
  1. frontend www #定義名爲www的前端虛擬節點
  2.    # bind [<address>:<port_range>] interface <interface> 監聽套字節定義
  3.    bind *:80
  4.    mode http
  5. option httplog #啓用日誌記錄HTTP請求。
  6.    option forwardfor #啓用後後端服務器可以獲得客戶端IP
  7. option httpclose #客戶端和服務器完成一次連接請求後,HAProxy主動關閉TCP鏈接(優化選項)
  8.    log global #使用全局日誌配置
  9. default_backend htmpool #指定後端服務池(backend定義htmpool)

  1. backend htmpool #定義名爲htmpool的真實服務器組
  2. mode http
  3. option redispatch #用於cookie保持環境。(如後端服務器故障,客戶端cookie不會刷新,用此來把用戶請求強制定向到正常服務器)
  4. option abortonclose #負載均衡很高時,自動結束當前隊列處理時間長的連接
  5.    balance roundrobin #負載均衡算法。
  6.    cookie SERVERID #允許向cookie插入SERVERID.下面server可以使用cookie定義
  7.    #option httpchk <method> <url> <vesion>
  8.     #mothod: OPTION、GET、HEAD (其中HEAD僅檢測是否返回狀態碼200 更快,更簡單)
  9.    option httpchk GET /index.php #啓用HTTP服務狀態檢測功能
  10.    #server <name> <address>[:port] [param*]
  11.     #[param*]爲後端設定參數
  12. #cookie server1 指定後端服務器設置cookie值,目的實現持久連接,指定的cookie值在請求時會被檢查,第一次此cookie值將挑選後端服務器將一直被沿用。
  13.     #weight num權重
  14.     #check啓用後端執行健康檢測
  15. #inter num 健康狀態檢測時間間隔
  16.     #rise num 從故障狀態轉換至正常需成功檢測次數
  17.     #fall num 從正常轉換故障需失敗次數
  18.     #backup 設置後端真實服務器備份服務器,僅在所有真實服務器不可用啓用
  19.    server web1 192.168.1.186:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
  20.    server web2 192.168.1.188:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
  1. listen admin_stats #定義HAProxy監控頁面
  2. bind 0.0.0.0:9188
  3. mode http
  4. log 127.0.0.1 local3 err
  5. stats refresh 30s #HAProxy監控頁面統計自動刷新時間。
  6. stats uri /haproxy-status #設置監控頁面URL路徑。 http//IP:9188/haproxy-status可查看
  7. stats realm welcome login\ Haproxy #統計頁面密碼框提示信息
  8. stats auth admin:123456 #登錄統計頁面用戶和密碼
  9. stats hide-version #隱藏HAProxy版本信息
  10. stats admin if TRUE #設置TURE後可在監控頁面手工啓動關閉後端真實服務器   
   ACL權限
  1. #3.4層匹配 dst,src 目的IP和源IP(寫入frontend中)
  2. #禁止192.168.0.0/24網段用戶訪問
  3. acl bad src 192.168.0.0/24
  4. block if bad
  5. #七層匹配 req.hdr([<>name[,<occ>])
  6. #用戶訪問www.server2.com時(報頭正則匹配),代理轉發給server2 -i是不區分大小寫
  7. acl www hdr_reg(host) -i ^(www.server2.com)$
  8. use_backend server2 if www
  9. #acl其他設置
  10. acl url_static path_end .git .png .css .js (URL請求結尾)
  11. acl host_www hdr_beg(host) -i www
  12. acl host_static hdr_beg(host) -i img. video. download. ftp. (域名開頭)
   日誌配置 
  1. vim /etc/rsyslog.d/haproxy.conf
  2. $ModLoad imudp
  3. $UDPServerRun 514
  4. local3.* /var/log/haproxy
  5. systemctl restart rsyslog
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章