學習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
一個超級簡單的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
測試端口代理是否成功
可以看到 基本端口 代理是可以的。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 的不同結果
一般來說 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 也可以看到不同結果
日誌文件配置及狀態監聽接口
首先是日誌文件
基礎測試完成。查看日誌文件發現,好像當前沒有日誌文件可以查看。
需要做一下配置才能記錄日誌,通過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 服務器如下
在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
實現了將訪問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部分
- global部分
用於設置全局配置參數,屬於進程級的配置,通常與操作系統配置相關
- defaults部分
默認參數的配置部分。在些部分設置的參數,默認會自動引用到下面的frontend, backend和listen部分
- frontend部分
用於設置接收用戶請求的前端虛擬節點。frontend可以根據ACL規則直接指定要使用的後端backend
- backend部分
用於設置集羣后端服務集羣的配置,也就是用來添加一組真實服務器,以處理前端用戶的請求
- 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處理。。。
具體實現,未操作。