天天看點

HAProxy介紹及配置檔案詳解

一、HAProxy簡介

HAProxy是一個開源的、高性能的、基于TCP和HTTP應用的負載均衡軟體,借助HAProxy可快速、可靠地提供基于TCP和HTTP應用的負載均衡解決方案

二、HAProxy優點

1) 可靠性和穩定性非常好,可以與硬體的F5相媲美

2) 最高可以同時維護40000--50000個并發連接配接,機關時間内處理的最大請求數為20000個,最大資料處理能力可達10Gbps

3) 支援多于8種負載均衡算法 ,同時也支援session保持

4) 支援虛拟主機功能

5) 從HAProxy 1.3版本後開始支援連接配接拒絕、全透明代理等功能

6) HAProxy擁有一個功能強大的伺服器狀态監控頁面

7) HAProxy擁有功能強大的ACL支援

三、HAProxy配置檔案詳解

根據功能用途不同,其配置檔案主要由五個部分組成,分别為global部分,defaults部分,frontend部分,backend部分,listen部分

1)global部分

用于設定全局配置參數,屬于程序級的配置,通常與作業系統配置相關

2) defaults部分

預設參數的配置部分。在些部分設定的參數,預設會自動引用到下面的frontend, backend和listen部分

3) frontend部分

用于設定接收使用者請求的前端虛拟節點。frontend可以根據ACL規則直接指定要使用的後端backend

4) backend部分

用于設定叢集後端服務叢集的配置,也就是用來添加一組真實伺服器,以處理前端使用者的請求

5) listen部分

此部分是frontend和backend部分的結合體

配置項說明

global
    log 127.0.0.1 local1 info
    maxconn 4096
    user nobody
    group nobody
    daemon
    nbproc 1
    pidfile /usr/local/haproxy/logs/haproxy.pid            

log

全局的日志配置,local0是日志裝置,info表示日志級别。其中日志級别有err, warning, info, debug 4種。這個配置表示使用127.0.0.1上的rsyslog服務中的local0日志裝置,記錄日志等級為info

maxconn

設定每個HAProxy程序可接受的最大并發連接配接數

nbproc

設定HAProxy啟動時可建立的程序數,此參數要求将HAProxy運作模式設定為daemon,預設隻啟動一個程序;建議該值設定時小于CPU核數

daemon

設定HAProxy程序進入背景運作,這是推薦的運作模式

user/group

設定啟動HAProxy程序的使用者群組

pidfile

指定HAProxy程序ID的存放位置

defaults 
        mode http
        retires 3
        timeout connect 10s
        timeout client 20s
        timeout server 30s
        timeout check 5s
           

mode

設定HAProxy執行個體預設的運作模式,有tcp, http, health三個可選值

tcp模式:

在此模式下,用戶端和伺服器端間将建立一個全雙工的連接配接,不會對七層封包做任何檢查,為預設的模式;經常用于SSL, SSH, SMTP等應用

http模式

在此模式下,用戶端請求在轉發至後端伺服器前将會被深度分析,所有不與RFC格式相容的請求都會被拒絕

health模式

目前已經被廢除

retires

設定連接配接後端伺服器的失敗重試次數,如果連接配接失敗的次數超過該數值,HAProxy會将對應的後端伺服器标記為不可用

timeout connect

設定成功連接配接到一台伺服器的最長等待時間,預設機關是毫秒,但也可以使用其他時間機關作字尾

timeout client

設定連接配接用戶端發送資料時最長等待時間,預設機關是毫秒,但也可以使用其他時間機關作字尾

timeout server

設定伺服器端回應用戶端資料發送的最長等待時間,預設機關是毫秒,但也可以使用其他時間機關作字尾

timeout check

設定對後端伺服器的檢測逾時時間,預設機關是毫秒,但也可以使用其他時間機關作字尾

frontend www
    bind *:80
    mode http 
    option httplog 
    option forwardfor
    option httpclose
    log global
    default_backend htmpool
           

通過frontend關鍵字定義了一個名為"www"的前端虛拟節點

bind

此選項用于定義一個或者幾個監聽的套接字,隻能在frontend和listen中定義

格式如下:

bind [<address>:[port_range]] [interface]

option httplog

預設情況下,HAProxy日志是不記錄HTTP請求的,此選項的作用是啟用日志記錄HTTP請求

option forwardfor

此選項的作用是保證後端伺服器可記錄用戶端真實的IP

option httpclose

此選項表示用戶端和服務端完成一次連接配接請求後,HAProxy将主動關閉此TCP連接配接。這是對性能非常有幫助的一個參數

log global

表示使用global段中定義的日志格式

default_backend htmpool

此選項用于指定後端預設的伺服器池

backend htmpool
    mode http 
    option redispatch
    option abortonclose
    balance roundrobin
    cookie SERVERID
    option httpchk GET /index.php 
    server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
    server web2 10.1.1.2:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
           

backend用于定義一個名稱為htmpool的後端伺服器組,根據需要可以定義多個

option redispatch

此參數用于cookie保持的環境中。在預設情況下,HAProxy會将其請求的後端伺服器的serverID插入cookie中,以保證會話的session持久性。而如果後端伺服器出現故障,用戶端的cookie是不會重新整理的,這就會造成無法通路。此時,如果設定了此參數,就會将客戶的請求強制定向到另外一台健康的後端伺服器上,以保證服務正常

option abortonclose

此參數可以在伺服器負載很高的情況下,自動結束目前隊列中處理時間比較長的連接配接

balance roundrobin

指定負載均衡算法

HAProxy支援的負載均衡算法:

roundrobin

基于權重進行輪叫排程的算法

static-rr

基于權重進行輪叫排程的算法,不過此算法為靜态算法,在運作時調整其伺服器權重不會生效

source

基于請求源IP的算法。此算法先對請求的源IP進行HASH運算,然後将結果與後端伺服器的權重總數相除後轉發至某台比對的後端伺服器。這種方式可以使同一個用戶端IP的請求始終轉發到某特定的後端伺服器

leastconn

此算法會将新的連接配接請求轉發到具有最少連接配接數目的後端伺服器。在會話時間較長的場景中推薦使用此算法 ,例如資料庫負載均衡

uri

此算法會對部分或整個URI進行HASH運算,再經過與伺服器的總權重相除,最後轉發到某台比對的後端伺服器上

uri_param

此算法會根據URL路徑中的參數進行轉發,這樣可保證在後端真實伺服器資料不變時,同一個使用者的請求始終分發到同一台機器上

hdr

此算法根據HTTP頭進行轉發,如果指定的HTTP頭名稱不存在,則使用roundrobin算法 進行政策轉發

cookie SERVERID

表示允許向cookie插入SERVERID,每台伺服器的SERVERID可在下面的server關鍵字中使用cookie關鍵字定義

option httpchk

此選項表示啟用HTTP的服務狀态檢測功能

option httpchk <method> <uri> <version>

method

表示HTTP請求的方式,常用的有OPTIONS,HEAD, GET幾種方式。一般的健康檢查可以采用HEAD方式進行,而不是采用GET方式,這是因為HEAD方式沒有資料傳回,僅檢查響應封包的狀态碼是不是200.是以相對于GET, HEAD的方式更簡單、更快

表示要檢測的URL位址

version

指定心跳檢測時的HTTP的版本号

server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3

server用于定義多台後端真實伺服器,不能用于frontend和listen段

server <name> <address>:[port] [param*]

name

為後端真實伺服器指定一個内部名稱,随便定義一個即可

address:port

指定後端伺服器的IP位址及端口

param*參數

常用的參數:

check 表示啟用對此後端伺服器執行健康狀态檢查

inter 設定健康狀态檢查的時間間隔,機關是毫秒

rise 檢查多少次認為伺服器可用

fall 檢查多少次認為伺服器不可用

weight 設定伺服器的權重,預設為1, 最大為256。 設定為0表示不參與負載均衡

backup 設定備份伺服器,用于所有後端伺服器全部不可用時

cookie 為指定的後端伺服器設定cookie值,此處指定的值将在請求入站時被檢查,第一次為此值挑選的後端伺服器将在後續的請求中一直被選中,其目的在于實作持久連接配接的功能

listen admin_status
    bind 0.0.0.0:9188
    mode http 
    log 127.0.0.1 local0 err
    stats refresh 30s
    stats uri /haproxy-status                           
    stats realm Welcome login 
    stats auth admin:admin 
    stats hide-version 
    stats admin if TRUE
           

listen部分用于配置HAProxy監控頁面相關的參數

stats refresh 30s

設定HAProxy監控統計頁面自動重新整理的時間

stats uri /haproxy-status

設定HAProxy監控頁面通路的URI路徑

stats realm Welcome login

設定登入監控頁面時,密碼框上的提示資訊

stats auth admin:admin

設定登入監控頁面的使用者名,密碼。使用者密碼用冒号隔開,可以設定多個,每行一個

stats hide-version

繼續閱讀