負載均衡之Haproxy配置詳解

工程師WWW發表於2016-10-05

vim /etc/haproxy/haproxy.cfg

global                                                       # 全域性引數的設定
    log         127.0.0.1 local2                      # log語法:log <address_1>[max_level_1] # 全域性的日誌配置,使用log關鍵字,
                                                                     指定使用127.0.0.1
                                                                     上的syslog服務中的local0日誌裝置,記錄日誌等級為info的日誌
    chroot      /var/lib/haproxy                 #改變當前工作目錄
    pidfile     /var/run/haproxy.pid          #當前程式id檔案
    maxconn     4000                                #最大連線數
    user        haproxy                                #所屬使用者
    group     haproxy                                #所屬組
    daemon                                               #以守護程式方式執行haproxy
    stats socket /var/lib/haproxy/stats
defaults
    mode                    http                        #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
    log                        global                    #應用全域性的日誌配置
    option                  httplog                  # 啟用日誌記錄HTTP請求,預設haproxy日誌記錄是不記錄HTTP請求日誌
                                                                 
    option                  dontlognull          # 啟用該項,日誌中將不會記錄空連線。所謂空連線就是在上游的負載均衡器
                                                                   或者監控系統為了探測該 服務是否存活可用時,需要定期的連線或者獲取某
                                                                  一固定的元件或頁面,或者探測掃描埠是否在監聽或開放等動作被稱為空連線;
                                                                  官方文件中標註,如果該服務上游沒有其他的負載均衡器的話,建議不要使用
                                                                   該引數,因為網際網路上的惡意掃描或其他動作就不會被記錄下來
    option http-server-close                   #每次請求完畢後主動關閉http通道
    option forwardfor       except 127.0.0.0/8   #如果伺服器上的應用程式想記錄發起請求的客戶端的IP地址,需要在HAProxy
                                                                            上 配置此選項, 這樣 HAProxy會把客戶端的IP資訊傳送給伺服器,在HTTP
                                                                            請求中新增"X-Forwarded-For"字段。 啟用  X-Forwarded-For,在requests
                                                                            頭部插入客戶端IP傳送給後端的server,使後端server獲取到客戶端的真實IP。 
    option                  redispatch                      # 當使用了cookie時,haproxy將會將其請求的後端伺服器的serverID插入到
                                                                            cookie中,以保證會話的SESSION永續性;而此時,如果後端的伺服器宕掉
                                                                            了, 但是客戶端的cookie是不會重新整理的,如果設定此引數,將會將客戶的請
                                                                            求強制定向到另外一個後端server上,以保證服務的正常。
    retries                 3                             # 定義連線後端伺服器的失敗重連次數,連線失敗次數超過此值後將會將對應後端
                                                                  伺服器標記為不可用
    timeout http-request    10s             #http請求超時時間
    timeout queue           1m                 #一個請求在佇列裡的超時時間
    timeout connect         10s                #連線超時
    timeout client          1m                   #客戶端超時
    timeout server          1m                   #伺服器端超時
    timeout http-keep-alive 10s           #設定http-keep-alive的超時時間
    timeout check           10s                 #檢測超時
    maxconn                 3000                 #每個程式可用的最大連線數
frontend  main *:80                             #監聽地址為80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js
    use_backend static          if url_static
    default_backend             my_webserver     #定義一個名為my_app前端部分。此處將對於的請求轉發給後端
backend static                                                 #使用了靜態動態分離(如果url_path匹配 .jpg .gif .png .css .js靜態檔案則
                                                                            訪問此後端
    balance     roundrobin                               #負載均衡演算法(#banlance roundrobin 輪詢,balance source 儲存session值,
                                                                           支援static-rr,leastconn,first,uri等引數
    server      static 127.0.0.1:80 check             #靜態檔案部署在本機(也可以部署在其他機器或者squid快取伺服器)
backend my_webserver                                  #定義一個名為my_webserver後端部分。PS:此處my_webserver只是一個
                                                                            自定義名字而已,但是需要與frontend裡面配置項default_backend 值相一致
    balance     roundrobin                               #負載均衡演算法
    server  web01 172.31.2.33:80  check inter 2000 fall 3 weight 30              #定義的多個後端
    server  web02 172.31.2.34:80  check inter 2000 fall 3 weight 30              #定義的多個後端
    server  web03 172.31.2.35:80  check inter 2000 fall 3 weight 30              #定義的多個後端


相關文章