HAProxy的簡單使用

學習HAproxy的記錄。邏輯比較混亂。

HAProxy 概念

Haproxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。Haproxy特別適用於那些負載特大的web站點,這些站點通常又需要會保持或七層處理。Haproxy運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發連接。事件驅動模型因爲在有更好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是爲什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。

emmmm 這個看一眼就好了。感覺很多都是都是要先學會使用,再看概念,理論纔會更加清楚。

安裝

由於CentOS7 自帶安裝包。也就不再使用源碼安裝。如果一定要源碼安裝,網上教程挺多的。
安裝前可產看一下 haproxy信息

yum info haproxy
Name        : haproxy
Arch        : x86_64
Version     : 1.5.18
Release     : 9.el7
Size        : 834 k
Repo        : base/7/x86_64
Summary     : TCP/HTTP proxy and load balancer for high availability environments
URL         : http://www.haproxy.org/
License     : GPLv2+
Description : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
            : availability environments. Indeed, it can:
            :  - route HTTP requests depending on statically assigned cookies
            :  - spread load among several servers while assuring server persistence
            :    through the use of HTTP cookies
            :  - switch to backup servers in the event a main server fails
            :  - accept connections to special ports dedicated to service monitoring
            :  - stop accepting connections without breaking existing ones
            :  - add, modify, and delete HTTP headers in both directions
            :  - block requests matching particular patterns
            :  - report detailed status to authenticated users from a URI
            :    intercepted by the application

安裝

yum -y install haproxy

建立簡單地web服務。用於haproxy代理。

使用nginx搭建簡單地 web服務。綁定端口

yum -y install nginx

關於nginx也可以作爲負載均衡之類的設置。。。無視掉,現在只用nginx作爲一個小的web服務器。
編輯nginx 配置文件。。。設置幾個端口對應不同web頁面當作一個個服務器吧。

編輯nginx 配置文件

vi /etc/nginx/nginx.conf

在http 模塊中 默認80 端口後添加

    server {
        listen 8001;
        server_name www.test_server1.com;
        root /webtest/server1;

        location / {
            index index.html;
        }
    }

    server {
        listen 8002;
        server_name test_server2;
        root /webtest/server2;

        location / {
            index index.html;
        }
    }   

監聽8001 和 8002 端口。
然後創建目錄和所需文件

mkdir -p /webtest/server1
mkdir -p /webtest/server2

在兩個目錄下分別創建一個index.html 文件

vi /webtest/server1/index.html 
test_server1--8001
vi /webtest/server2/index.html 
test_server2--8002

然後啓動nginx 分別訪問 192.168.199.81:8001 192.168.199.81:8002
192.168.199.81-8001
192.168.199.81-8002
一個超級簡單的web服務就搭建好了。
192.168.199.81:8001對應test_server1–8001
192.168.199.81:8002對應test_server2–8002

最簡單的使用,代理本機其它端口。

最基本的使用,使用一個端口代理其它端口。

代理相關的配置可以如下配置段中。

  • “defaults” 爲frontendbackend, listen提供默認配置,這配置默認配置參數可由下一個“defaults”所重新設定。

  • “frontend” 用於定義一系列監聽的套接字,這些套接字可接受客戶端請求並與之建立連接。前端,指定接收客戶端連接偵聽套接字設置

  • “backend” 用於定義一系列“後端”服務器,代理將會將對應客戶端的請求轉發至這些服務器。 後端,指定將連接請求轉發至後端服務器的相關設置

  • “listen”段通過關聯“frontend”和“backend”定義了一個完整的代理,通常只對TCP流量有用。同時設置前端和後端,適用於一對一環境

所有代理的名稱只能使用大寫字母、小寫字母、數字、-(中線)、_(下劃線)、.(點號)和:(冒號)。此外,ACL名稱會區分字母大小寫)

查看 haproxy配置文件。

cat /etc/haproxy/haproxy.cfg 

去除掉註釋 大約是

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  main *:5000
    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             app

backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

各個參數具體意義 先不管。看frontend backend兩塊
實例中設置 監聽本系統的5000 端口。然後將訪問該端口的請求轉發到backend這些服務器。好像還設置的是負載均衡(模式是roundrobin,也是默認的模式)。。。當然,這只是個實例,實際上這四個端口對應的服務應該是不存在的。

啓動haproxy

systemctl start haproxy

然後訪問該主機的5000端口
無活躍服務
具體代碼執行我也不清楚。應該是haproxy 收到客戶端訪問192.168.199.81:5000 的請求,然後檢查 四個服務器的健康性,選擇其中健康的服務器,使用roundrobin 負載均衡的算法,將請求轉發到其中一個。但是現在這四個服務器根本不存在,所以4個都是不健康狀態。於是就返回了503。這也是haproxy 自帶的一個錯誤模板。

[root@haproxy1 haproxy]# cd /usr/share/haproxy/
[root@haproxy1 haproxy]# ls
400.http  403.http  408.http  500.http  502.http  503.http  504.http  README

如果希望使用這些錯誤模板,可以在配置文件中defaults設置如

errorfile 503 /usr/share/haproxy/503.http

也可以在 backend 或者 listen 中設置。不過這不是現在的重點。

基本測試1 設置5001端口代理8001 5002端口代理8002

刪除修改原配置文件的 frontend backend

vi /etc/haproxy/haproxy.cfg

設置成如下

frontend  test1 
    bind *:5001
    default_backend test_server1

backend test_server1
    server test_server1 127.0.0.1:8001 check

frontend  test2 
    bind *:5002
    default_backend test_server2

backend test_server2
    server test_server2 127.0.0.1:8002 check

重啓haproxy

systemctl restart haproxy

測試端口代理是否成功
192.168.199.81:5001
192.168.199.81-5002
可以看到 基本端口 代理是可以的。haproxy安裝使用初步 成功。

基本設置2 5000端口代理8001 8002 兩個端口,不設balance

修改配置文件。

vi /etc/haproxy/haproxy.cfg
frontend  test
    bind *:5000
    default_backend test_server

backend test_server
    server test_server1 127.0.0.1:8001 check
    server test_server2 127.0.0.1:8002 check

重啓haproxy

systemctl restart haproxy

未設置balance 但是默認有balance 方式roundrobin 加權輪詢。基本上每重新訪問 5000 就會使用另一個服務器響應。
192.168.199.81:5000 的不同結果
192.168.199.81:5000 1
192.168.199.82:5000 2
一般來說 backend 下的服務應該運行的是相同的。畢竟對一個客戶來說,同一個網站訪問出不同結果。是影響用戶體驗的。但這只是一個測試。。。不用太執着

基本設置3 listen 代替 frontend backend

vi /etc/haproxy/haproxy.cfg
listen test2
    bind :8000
    server test_server1 127.0.0.1:8001 check
    server test_server2 127.0.0.1:8002 check

重啓haproxy

systemctl restart haproxy

多次訪問192.168.199.81:8000 也可以看到不同結果
192.168.199.81-8000 1
192.168.199.81-8000 2

日誌文件配置及狀態監聽接口

首先是日誌文件

基礎測試完成。查看日誌文件發現,好像當前沒有日誌文件可以查看。
需要做一下配置才能記錄日誌,通過rsyslog來記錄

查看 haproxy的配置文件 可以發現

    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

看到 要 記錄日誌信息需要兩步。一修改/etc/sysconfig/syslog 的SYSLOGD_OPTIONS加上 -r 二是在 /etc/sysconfig/syslog 加上 local2.* /var/log/haproxy.log 一句。。。不過CentOS7消息日誌使用的是rsyslog可以看做 syslog的升級版。配置文件不是同一個了。。。

編輯文件/etc/sysconfig/rsyslog

vi /etc/sysconfig/rsyslog 

添加 -r 不加似乎也沒什麼影響。

SYSLOGD_OPTIONS="-r"

編輯rsyslog 配置文件

vi /etc/rsyslog.conf

取消這兩行的註釋 表示接受UDP方式的消息。TCP的要不要也取消註釋,應該是不用的。

$ModLoad imudp
$UDPServerRun 514

末尾加上

local2.*                       /var/log/haproxy.log

爲什麼是local2.* 主要看/etc/haproxy/haproxy.cfg 配置文件中global中設置

log         127.0.0.1 local2

重啓 haproxy和rsyslog

systemctl restart haproxy
systemctl restart rsyslog

然後再訪問 haproxy監視的端口後。就可以看到 /var/log/haproxy.log 內容了。

[root@haproxy1 ~]# cat /var/log/haproxy.log 
Jun 30 14:00:45 localhost haproxy[9545]: 192.168.199.153:56829 [30/Jun/2020:14:00:45.762] test2 test2/test_server1 6/0/2/0/8 200 250 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"
Jun 30 14:00:54 localhost haproxy[9545]: 192.168.199.153:56829 [30/Jun/2020:14:00:45.770] test2 test2/test_server2 8678/0/1/0/8679 200 250 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"

haproxy狀態監聽 通過網頁查看

看網上設置狀態監控有兩種方式
一、global 中設置如下

stats refresh 30s #統計頁面自動刷新時間
stats uri /stats #統計頁面url
stats realm baison-test-Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin123 #統計頁面用戶名和密碼設置
stats hide-version #隱藏統計頁面上HAProxy的版本信息

重啓後狀態頁即可通過默認端口進行訪問。但是我也不知道默認端口是個啥。。。這種方式未能實現。

二、新增監聽段配置 listen
這個測試是可以的的。。。先設置一個最簡單的

listen stats
    bind :32700
    stats enable
    stats uri /

設置後重啓 即可訪問 192.168.199.81:32700/ 查看haproxy 狀態
狀態監聽
進行如此簡單的設置即可。其它的都是默認的,真正使用是建議設置其它參數。如

① stats refresh 設定自動刷新時間間隔
  若服務器出現故障,默認手動刷新才能才能看到狀態的變化,可設置自動刷新
   例:添加stats refresh 2s
② stats uri 自定義stats page uri
  默認爲/haproxy?stats 可自定義uri
   例:stats uri /hastas
  重啓後訪問http://172.18.43.62/hastas即可
③ stats hide-version
  如上圖所示界面會顯示haproxy版本信息,若想隱藏版本加上此參數即可
④ stats auth : 認證時的賬號和密碼,可使用多次。如多個用戶定義多行即可,例:
   stats auth ha1:centos1
   stats auth ha2:centos2
⑤ stats realm 認證時瀏覽器彈出對話框的提示信息
   例:stats realm “haproxy info”
⑥ stats admin { if | unless } 啓用stats page中的管理功能
   例:stats admin if TRUE

測試加上參數設置監聽

listen stats
    bind :32700
    stats enable
    stats refresh 10s
    stats uri /
    stats hide-version
    stats realm "hhhh"
    stats auth admin:adminfeng
    stats admin if TRUE

三、監聽haproxy好像並不能使用 frontend + backend來代替listen

轉發其它主機服務 和 負載均衡

一直測試使用的都是將訪問本機一個端口的請求轉發到本機其它端口。未測試轉發到其它主機。
準備4個主機,測試用4個虛擬機就好。
haporxy1 192.168.199.81
haporxy2 192.168.199.82
haporxy3 192.168.199.83
haporxy4 192.168.199.84

四個節點都安裝nginx 進行基本相同的設置
使用nginx設置一個小的Web服務器

yum -y install nginx

編輯nginx配置文件。

vi /etc/nginx/nginx.conf
    server {
        listen 8000;
        server_name app_test;
        root /webtest/app_test;

        location / {
            index index.html;
        }
    }

創建/webtest/app_test 目錄

mkdir -p /webtest/app_test

在該目錄創建 index.html 文件並添加內容。
四個不同的nginx服務器中如果希望測試可以添加不同的內容
如 app1 app2 app3 app4

touch /webtest/app_test/index.html
echo "app-192.168.199.81" >> /webtest/app_test/index.html 

啓動nginx

systemctl start nginx

四個nginx 服務器如下
192.168.199.81-8000
192.168.199.82-8000
192.168.199.83-8000
192.168.199.84-8000
在haproxy1上安裝haproxy設置代理轉發

yum -y install haproxy

配置日誌環境。。。不再詳述

haproxy1 的haproxy 配置文件設置

vi /etc/haproxy/haproxy.cfg 
frontend  test_balance
    bind *:5000
    default_backend test_server

backend test_server
    server app1 192.168.199.81:8000 check
    server app2 192.168.199.82:8000 check
    server app3 192.168.199.83:8000 check
    server app4 192.168.199.84:8000 check

listen stats
    bind :32700
    stats enable
    stats refresh 10s
    stats uri /
    stats hide-version

重啓haproxy

systemctl restart haproxy

如果四個主機的8000端口都未綁定服務,可能會有提示

 Message from syslogd@localhost at Jun 30 15:38:59 ...
 haproxy[9972]: backend test_server has no server available!

沒有就是一切正常。。。
多訪問幾次 192.168.199.81:5000
5000-81
5000-82
5000-83
5000-84
實現了將訪問192.168.199.81:5000端口的請求轉發到其他的主機端口上。這也使用了haproxy的負載均衡。

backend test_server
    server app1 192.168.199.81:8000 check
    server app2 192.168.199.82:8000 check
    server app3 192.168.199.83:8000 check
    server app4 192.168.199.84:8000 check

相當於

backend test_server
	balance roundrobin
    server app1 192.168.199.81:8000 check
    server app2 192.168.199.82:8000 check
    server app3 192.168.199.83:8000 check
    server app4 192.168.199.84:8000 check

默認的均衡策略是輪詢。

一、roundrobin,表示簡單的輪詢
二、static-rr,表示根據權重
三、leastconn,表示最少連接者先處理
四、source,表示根據請求源IP
五、uri,表示根據請求的URI,做cdn需使用;
六、url_param,表示根據請求的URl參數'balance url_param' 
七、hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
八、rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。

HAProxy配置文件 參數等

之前都是最簡單的方式啓動,未對配置文件修改過多。這裏詳細解釋一下配置文件的各個參數。。。(個人並未測試,屬於網上摘抄)
根據功能用途不同,其配置文件主要由五個部分組成,分別爲global部分,defaults部分,frontend部分,backend部分,listen部分

  1. global部分

用於設置全局配置參數,屬於進程級的配置,通常與操作系統配置相關

  1. defaults部分

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

  1. frontend部分

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

  1. backend部分

用於設置集羣后端服務集羣的配置,也就是用來添加一組真實服務器,以處理前端用戶的請求

  1. listen部分

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

global是全局配置段設置,主要用作

  • 進程及安全配置相關的參數
  • 性能調整相關參數
  • Debug參數

global
haproxy的global自帶配置

global

    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
  • log 全局的日誌配置,127.0.0.1表示本機 local0是日誌設備,通過rsyslog記錄該日誌設備內容到haproxy日誌文件。 未設置日誌級別。可設置err, warning, info, debug 4種
  • chroot 修改haproxy的工作目錄至指定的目錄並在放棄權限之前執行chroot()操作,可以提升haproxy的安全級別,不過需要注意的是要確保指定的目錄爲空目錄且任何用戶均不能有寫權限
  • pidfile 指定HAProxy進程ID的存放位置
  • maxconn 設置每個HAProxy進程可接受的最大併發連接數
  • user 用戶名 運行HAProxy進程的用戶。作用同uid 用戶id
  • group 用戶組運行HAProxy進程的組。作用同 gid 組id
  • daemon 設置haproxy進程運行爲後臺,默認是後臺。

其它設置

進程及安全配置相關的參數

  • nbproc 1 # haproxy的進程數量,默認爲1,無特殊需求最好修改,修改數量也不要超過內核數
  • cpu-map 1 0 # 第一個工作進程綁定在第0核CPU上只有設置nbproc後纔有可能進行設置
  • ulimit-n #每個haproxy進程可打開的最大文件數;會自動計算一個最佳的數字,建議不修改。
  • stats #用戶訪問統計數據的接口
  • node #定義當前節點的名稱,用於HA場景中多haproxy進程共享同一個IP地址時
  • description #當前實例的描述信息;

性能調整參數
雖然說是調整性能的參數,但是一般情況下沒有特殊需求,不建議修改

  • maxconn :設定每個haproxy進程所能接受的最大併發連接數
  • maxconnrate :設置每個進程每秒種所能建立的最大連接數量
  • maxse***ate :設置每個進程每秒種所能建立的最大會話數量
  • maxsslconn : 每進程支持SSL的最大連接數量
  • spread-checks 健康檢測延遲時長比建議2-5之間
    還有許多,但是沒測試過具體適用表現。就不搬運了。。。

proxies
2,3,4,5都可看做代理配置段的設置。

defaults
默認參數的配置部分。該部分設置的參數,默認會自動引用到下面的frontend, backend和listen部分

    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
  • mode 設置HAProxy實例默認的運行模式,有tcp, http, health三個可選值
    – tcp 在此模式下,客戶端和服務器端間將建立一個全雙工的連接,不會對七層報文做任何檢查,爲默認的模式;經常用於SSL, SSH, SMTP等應用
    – http 在此模式下,客戶端請求在轉發至後端服務器前將會被深度分析,所有不與RFC格式兼容的請求都會被拒絕
    – health 目前已經被廢除
  • log global 表示使用global段中定義的日誌格式
  • option httplog 默認情況下,HAProxy日誌是不記錄HTTP請求的,此選項的作用是啓用日誌記錄HTTP請求
  • option dontlognull 不確定,應該還是日誌相關
  • option http-server-close 在使用長連接時,爲了避免客戶端超時沒有關閉長連接,此功能可以使服務器端關閉長連接
  • option forwardfor 保證後端服務器可記錄客戶端真實的IP 在發往服務器的請求首部中插入“X-Forwarded-For”首部,值爲真實客戶端IP。except 表示將。。。排除之外,就是當客戶端爲127.0.0.1 時,不插入X-Forwarded-For。
  • option redispatch 當server Id(real server)對應的服務器掛掉後,強制定向到其他健康的服務器
  • retries 設置連接後端服務器的失敗重試次數,如果連接失敗的次數超過該數值,HAProxy會將對應的後端服務器標記爲不可用
  • timeout http-request 請求報文的超時時長,如果客戶端一側非常慢的發送,則服務器要維持這個連接就很浪費資源,這個就是請求報文的超時時長
  • timeout queue 等待最大時長
  • timeout connect 客戶端請求到後端server的最長連接等待時間(haproxy與後端服務器TCP三次握手之前)
  • timeout client 與客戶端的最長非活動時間;1分鐘內客戶端沒有向haproxy請求資源,則haproxy將會主動切斷與客戶端的連接
  • timeout server 客戶端請求到後端服務端的超時超時時長(TCP之後)
  • timeout http-keep-alive session 會話保持超時時間,範圍內會轉發到相同的後端服務器
  • timeout check 對後端服務器的檢測超時時間

frontend backend listen如果未進行另外設置。就會使用defaults 中設置。

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

frontend  main
	bind  *:5000
    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             app

定義了一個名爲main 的虛擬前端節點

  • bind 指定haproxy監聽的IP及端口,可以是多個IP;也可以寫成,IP:80-89,或者是sock文件
  • use_backend 使用名爲 static 規則匹配的後端服務器來響應請求。
  • default_backend 在沒有匹配的”use_backend”規則時爲實例指定使用的默認後端,因此,其不可應用於backend區段。在”frontend”和”backend”之間進行內容交換時,通常使用”use-backend”定義其匹配規則;而沒有被規則匹配到的請求將由此參數指定的後端接收。
  • acl 訪問控制列表。這個就是規則匹配。

backend
用於設置集羣后端服務集羣的配置,也就是用來添加一組真實服務器,以處理前端用戶的請求

backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

backend用於定義名稱爲 XXXX 的後端服務器組,根據需要可以定義多個

  • balcnce 設置負載均衡策略,策略包括
  ① roundrobin:基於權重輪詢,動態算法, 支持權重的運行時調整,支持慢啓動;每個後端backend中最多支持4095個server
      server options: weight #
  ② static-rr:基於權重輪詢,靜態算法,不支持權重的運行時調整及慢啓動;後端主機數量無上限
  ③ leastconn:加權最少連接,動態算法,最少連接的後端服務器優先分配接收新連接,相同連接時輪詢,推薦在較長會話的場景使用,例如MySQL、 LDAP等,不適合http。
  ④ first:根據服務器在列表中的位置,自上而下進行調度;前面服務器的連接數達到上限,新請求才會分配給下一臺服務器。
  ⑤ hdr():對於每個http請求,此處由指定的http首部將會被取出做hash計算; 並由服務器總權重相除以後派發至某挑出的服務器; 無有效值的會被輪詢調度
  例:hdr(host)     hdr(Cookie)
  ⑤ rdp-cookie 遠程桌面相關
  hash類算法:
  需配合參數:hash-type   
  method:
      map-based:除權取餘法,哈希數據結構是靜態數組
      consistent:一致性哈希,哈希數據結構是一棵樹
  ⑥ source:源地址hash,新連接先按權重分配,後續連接按source分配請求
  ⑦ uri:對URI的左半部分或整個uri做hash計算,併除以服務器總權重取模,以後派發至某挑出的服務器,適用於後端緩存服務器
  ://:@:/;?#
  左半部分: /;
  整個uri: /;?#
  ⑧ url_param:對用戶請求的uri聽部分中的參數的值(通常爲用戶ID)作hash計算,並由服務器總權重相除以後派發至某挑出的服務器;通常用於追蹤用戶,以確保來自同一個用戶的請求始終發往同一個Backend Server。
  • server:定義後端主機相關選項
server <name> <address>:[port] [param*]
  name:服務器在haproxy上的自定義名稱;出現在日誌及警告信息
  address:服務器地址,支持使用主機名
  [:[port]]:端口映射;省略時,表示同bind中綁定的端口
  [param*]:server後可加的參數

param*參數
常用的參數:

check 表示啓用對此後端服務器執行健康狀態檢查
inter 設置健康狀態檢查的時間間隔,單位是毫秒
rise 檢查多少次認爲服務器可用
fall 檢查多少次認爲服務器不可用
weight 設置服務器的權重,默認爲1, 最大爲256。 設置爲0表示不參與負載均衡
backup 設置備份服務器,用於所有後端服務器全部不可用時
cookie 爲指定的後端服務器設置cookie值,此處指定的值將在請求入站時被檢查,第一次爲此值挑選的後端服務器將在後續的請求中一直被選中,其目的在於實現持久連接的功能

listen
可以看做是frontend和backend部分的結合體。一般haproxy監視節點設置也是通過listen設置。
listen 設置監聽

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

stats 相關。。。

stats refresh 30s

設置HAProxy監控統計頁面自動刷新的時間

stats uri /haproxy-status
設置HAProxy監控頁面訪問的URI路徑

stats realm Welcome login
設置登錄監控頁面時,密碼框上的提示信息。似乎無用

stats auth admin:admin
設置登錄監控頁面的用戶名,密碼。用戶密碼用冒號隔開,可以設置多個,每行一個

stats hide-version
設置在監控頁面上隱藏HAProxy的版本號

status admin if TRUE
設置此選項,可在監控頁面上啓用、禁用後端服務器,僅在1.4.9版本以後生效

ACL 對我來說有點複雜且暫時用不上。。。

訪問控制列表,基於包過濾的訪問控制技術。
HAProxy基礎用法應該是將訪問 frontend 虛擬節點的請求根據ACL轉發到不同的backend處理。。。
具體實現,未操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章