使用命令行启停HAProxy的Backend

HAProxy自带监控页面,需要在HAProxy使用的配置文件haproxy.cfg中添加配置项进行开启,重启HAProxy服务后生效。

添加的配置大致如下:

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,监控页面效果如下:

使用命令行启停HAProxy的Backend_第1张图片
1.png

可以看到上图页面最下方有个下拉框,在这里可以对HAProxy代理的后台服务进行启停操作,这些操作并不会启动和停止后台服务,只是HAProxy不会对这些机器进行代理了,前端请求发送到HAProxy之后,HAProxy不会把请求发送到已经处于MAINT状态的后台服务。
现在停掉backend中的app1服务,效果是这样的:

使用命令行启停HAProxy的Backend_第2张图片
2.png

我们可以使用命令行进行操作,达到和页面操作同样的效果。为了能使用命令行操作,需要额外的前期准备工作:

1. 编辑HAProxy配置文件开启unix socket

为了让HAProxy产生出一个socket出来,需要在配置文件haproxy.cfg的global区域下添加配置:
stats socket /home/haproxy/haproxy.sock level admin #haproxy.sock文件名和路径可以随意
重启HAProxy服务生效。

2. 安装socat

socat是一个多功能的网络工具软件,名字来由是” Socket CAT”,功能与netcat类似,可以看做netcat的加强版,关于它的详细资料可以自行google,我们这里使用编译源码方式进行安装:

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对后端服务进行操作了,首先输入下面这条命令看下可以使用的命令有哪些
echo ""| socat stdio /home/haproxy/haproxy.sock
输出结果如下:

使用命令行启停HAProxy的Backend_第3张图片
3.png

我们可以使用上面的disable和enable命令启停HAProxy代理的后端或frontend前端服务:

echo "disable server backend_demo/app1" | socat stdio /home/haproxy/haproxy.sock
#或者
echo "enable server backend_demo/app1" | socat stdio /home/haproxy/haproxy.sock

disable与enable支持“agent”、“frontend”、“health”和“server”,命令要比图形界面强大的多,好多参数设定,都可以使用socat来操作。记住一个格式“命令 backend/server”。
熟悉使用方法后,我们可以编写脚本,通过执行脚本文件来启用/停用frontend或server。

远程操作HAProxy

上面的这些操作都是在HAProxy所在的机器上进行的,而且机器上都只开了一个HAProxy进程,生产环境上我们需要在远程机器上对HAProxy进行操作,并且HAProxy会开很多进程,现在针对这种需求进行相应调整。

先把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对应启动的3个进程
    stats socket [email protected]:10001 level admin process 1
    stats socket [email protected]:10002 level admin process 2
    stats socket [email protected]:10003 level admin process 3
    stats timeout 2m

重启HAProxy。

在另外的机器上安装socat,然后写个脚本haproxy.sh远程停用或启用HAProxy对后台服务的代理:

...
...
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所在机器的ip
  done

执行脚本操作代理:

./haproxy.sh disable app1
./haproxy.sh enable app1

你可能感兴趣的:(使用命令行启停HAProxy的Backend)