使用命令行启停HAProxy的Backend
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用命令行启停HAProxy的Backend相关的知识,希望对你有一定的参考价值。
参考技术AHAProxy自带监控页面,需要在HAProxy使用的配置文件haproxy.cfg中添加配置项进行开启,重启HAProxy服务后生效。
添加的配置大致如下:
浏览器地址栏输入 http://127.0.0.1:1080/stats ,用户名/密码输入admin,监控页面效果如下:
可以看到上图页面最下方有个下拉框,在这里可以对HAProxy代理的后台服务进行启停操作,这些操作并不会启动和停止后台服务,只是HAProxy不会对这些机器进行代理了,前端请求发送到HAProxy之后,HAProxy不会把请求发送到已经处于MAINT状态的后台服务。
现在停掉backend中的app1服务,效果是这样的:
我们可以使用命令行进行操作,达到和页面操作同样的效果。为了能使用命令行操作,需要额外的前期准备工作:
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,我们这里使用编译源码方式进行安装:
3. socat使用
到这里我们就可以使用socat对后端服务进行操作了,首先输入下面这条命令看下可以使用的命令有哪些
echo ""| socat stdio /home/haproxy/haproxy.sock
输出结果如下:
我们可以使用上面的disable和enable命令启停HAProxy代理的后端或frontend前端服务:
disable与enable支持“agent”、“frontend”、“health”和“server”,命令要比图形界面强大的多,好多参数设定,都可以使用socat来操作。记住一个格式“命令 backend/server”。
熟悉使用方法后,我们可以编写脚本,通过执行脚本文件来启用/停用frontend或server。
远程操作HAProxy
上面的这些操作都是在HAProxy所在的机器上进行的,而且机器上都只开了一个HAProxy进程,生产环境上我们需要在远程机器上对HAProxy进行操作,并且HAProxy会开很多进程,现在针对这种需求进行相应调整。
先把HAProxy的配置修改贴一下:
重启HAProxy。
在另外的机器上安装socat,然后写个脚本haproxy.sh远程停用或启用HAProxy对后台服务的代理:
执行脚本操作代理:
修改haproxy配置文件
HAproxy配置文件操作:
1. 根据用户输入输出对应的backend下的server信息
2. 可添加backend 和sever信息
3. 可修改backend 和sever信息
4. 可删除backend 和sever信息
5. 操作配置文件前进行备份
6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建;若信息与已有信息重复则不操作
配置文件 参考 http://www.cnblogs.com/alex3714/articles/5717620.html
配置文件如下:
global
log 127.0.0.1 local2
daemon
maxconn 256
log 127.0.0.1 local2 info
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234
frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www
backend www.oldboy.org
server 100.1.7.9 weight 20 maxconn 3000
代码如下:
f = open("haproxy","r",encoding="gbk") f_new = open("haproxy_new","w",encoding="gbk") #将文件内容转换为一个列表,并定义一个变量。 b = f.readlines() #定义三个选项: option = ("1、请输入搜索的地址:","2、请输入增加的内容:","3、请输入删除的内容:") #打印三个选项: for i in option: print(i) choice = input("请选择操作方式:序列号>>>") #如果选择1,则进入查找选项。 if choice == "1" : data = input("请输入搜索地址:") #利用字符串拼接,定义一个变量,-----backend所在的行。 address = "backend %s\\n"%data if address in b: #利用列表的下标来定位位置,然后通过下标打印内容。 index_add = b.index(address) print(b[index_add],b[index_add+1]) if address not in b: print("您查找的内容不存在") #如果选择2,则进入增加内容选项: if choice =="2": data = input("输入增加内容:") data_eval = eval(data) #通过列表计数器来判断输入的内容是否在列表中存在,如果计数器为0则不存在,如果计数器不为0则存在。 #不存在则添加,存在则不添加。 f_find = b.count("backend %s\\n"%data_eval["backend"]) #如果backend后的内容在文件中不能找到则新增。 if f_find == 0: for line in b: f_new.write(line) # for f_line2 in f: # #将输入的内容通过字符串拼接的形式写入文件中 f_new.write("\\nbackend ") f_new.write(data_eval["backend"]) f_new.write("\\n server %s weight %s maxconn %s" %(data_eval["record"]["server"],data_eval["record"]["weight"] ,data_eval["record"]["maxconn"])) #如果backend后的内容在文件中能找到则不执行任何操作。 if f_find != 0: print("您添加的内容已经存在") #如果选择3,则进入删除内容选项: if choice == "3": data = input("输入删除内容:") data_eval = eval(data) #通过列表计数器来判断输入的内容是否在列表中存在,如果计数器为0则不存在,如果计数器不为0则存在。 #不存在则添加,存在则不添加。 f_find = b.count("backend %s\\n"%data_eval["backend"]) #如果backend后的内容在文件中不能找到则新增。 if f_find != 0: b_index=b.index("backend www.oldboy.org\\n") b.pop(b_index) b.pop(b_index) for line in b: f_new.write(line) #如果backend后的内容在文件中不能找到则不执行任何操作。 if f_find == 0: print("您输入的内容文件中不存在") f.close() f_new.close()
以上是关于使用命令行启停HAProxy的Backend的主要内容,如果未能解决你的问题,请参考以下文章