HAProxy自帶監(jiān)控頁面,需要在HAProxy使用的配置文件haproxy.cfg中添加配置項進(jìn)行開啟锁荔,重啟HAProxy服務(wù)后生效。
添加的配置大致如下:
listen admin_stats
bind *:1080
mode http
option httplog
stats refresh 30s
stats uri /stats
stats auth admin:admin
stats admin if TRUE
stats hide-version
瀏覽器地址欄輸入http://127.0.0.1:1080/stats跋理,用戶名/密碼輸入admin前普,監(jiān)控頁面效果如下:
可以看到上圖頁面最下方有個下拉框拭卿,在這里可以對HAProxy代理的后臺服務(wù)進(jìn)行啟停操作,這些操作并不會啟動和停止后臺服務(wù)记劈,只是HAProxy不會對這些機(jī)器進(jìn)行代理了并巍,前端請求發(fā)送到HAProxy之后,HAProxy不會把請求發(fā)送到已經(jīng)處于MAINT狀態(tài)的后臺服務(wù)刽射。
現(xiàn)在停掉backend中的app1服務(wù)誓禁,效果是這樣的:
我們可以使用命令行進(jìn)行操作肾档,達(dá)到和頁面操作同樣的效果。為了能使用命令行操作俗慈,需要額外的前期準(zhǔn)備工作:
1. 編輯HAProxy配置文件開啟unix socket
為了讓HAProxy產(chǎn)生出一個socket出來闺阱,需要在配置文件haproxy.cfg的global區(qū)域下添加配置:
stats socket /home/haproxy/haproxy.sock level admin #haproxy.sock文件名和路徑可以隨意
重啟HAProxy服務(wù)生效舵变。
2. 安裝socat
socat是一個多功能的網(wǎng)絡(luò)工具軟件,名字來由是” Socket CAT”赊豌,功能與netcat類似绵咱,可以看做netcat的加強(qiáng)版,關(guān)于它的詳細(xì)資料可以自行g(shù)oogle派昧,我們這里使用編譯源碼方式進(jìn)行安裝:
wget http://www.dest-unreach.org/socat/download/socat-1.7.3.0.tar.gz
tar xzf socat-1.7.3.0.tar.gz
cd socat-1.7.3.0
./configure
make
su
make install
3. socat使用
到這里我們就可以使用socat對后端服務(wù)進(jìn)行操作了蒂萎,首先輸入下面這條命令看下可以使用的命令有哪些
echo ""| socat stdio /home/haproxy/haproxy.sock
輸出結(jié)果如下:
我們可以使用上面的disable和enable命令啟停HAProxy代理的后端或frontend前端服務(wù):
echo "disable server backend_demo/app1" | socat stdio /home/haproxy/haproxy.sock
N宕龋或者
echo "enable server backend_demo/app1" | socat stdio /home/haproxy/haproxy.sock
disable與enable支持“agent”、“frontend”泻拦、“health”和“server”,命令要比圖形界面強(qiáng)大的多腋粥,好多參數(shù)設(shè)定隘冲,都可以使用socat來操作绑雄。記住一個格式“命令 backend/server”。
熟悉使用方法后罗珍,我們可以編寫腳本脚粟,通過執(zhí)行腳本文件來啟用/停用frontend或server。
遠(yuǎn)程操作HAProxy
上面的這些操作都是在HAProxy所在的機(jī)器上進(jìn)行的通殃,而且機(jī)器上都只開了一個HAProxy進(jìn)程厕宗,生產(chǎn)環(huán)境上我們需要在遠(yuǎn)程機(jī)器上對HAProxy進(jìn)行操作,并且HAProxy會開很多進(jìn)程曲聂,現(xiàn)在針對這種需求進(jìn)行相應(yīng)調(diào)整佑惠。
先把HAProxy的配置修改貼一下:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
daemon
nbproc 3
pidfile /home/haproxy/haproxy.pid
#開啟3個tcp socket對應(yīng)啟動的3個進(jìn)程
stats socket ipv4@0.0.0.0:10001 level admin process 1
stats socket ipv4@0.0.0.0:10002 level admin process 2
stats socket ipv4@0.0.0.0:10003 level admin process 3
stats timeout 2m
重啟HAProxy膜楷。
在另外的機(jī)器上安裝socat,然后寫個腳本haproxy.sh遠(yuǎn)程停用或啟用HAProxy對后臺服務(wù)的代理:
...
...
for i in $(seq 1 3)
do
echo "$1 server backend_demo/$2" | socat stdio tcp:192.168.1.103:1000${i} 1>/dev/null #ip地址填HAProxy所在機(jī)器的ip
done
執(zhí)行腳本操作代理:
./haproxy.sh disable app1
./haproxy.sh enable app1