前面说过,我们一般是这么使用haproxy的。
1. 编辑配置文件:vim /etc/haproxy/haproxy.cfg
2. 启动haproxy服务:service haproxy start
但是有时候,我们要在haproxy运行时,动态的修改一些参数并想立刻生效怎么办?
最笨的办法是修改完配置后,重启服务:service haproxy restart. 但是这样会停掉服务然后再重新启动,会导致haproxy暂时不可用。所以这种办法不是很好。
最好是像mysql一样,可通过客户端能连接服务端,动态的执行一些命令。这就是本章说的stats socket.
通过连接socket,我们可以在haproxy运行的过程中发送一些命令,立刻生效而且不会停止服务。
启用stats socket
默认情况下,stats socket是没有启动的。
开启这个功能的方法也很简单,我们只需要往haproxy的配置文件中haproxy.cfg添加两行配置即可:
global
daemon
maxconn 256
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 2m
stats socket这一行是监听一个UNIX socket。
stats timeout这一行是配置一个超时时间。
除了可以监听一个UNIX socket,我们还可以监听TCP端口。
global
daemon
maxconn 256
stats socket /var/run/haproxy.sock mode 600 level admin
stats socket ipv4@127.0.0.1:9999 level admin
stats timeout 2m
这样我们就开启了stats socket功能。
安装socat
前面是开启stats socket,但是如何访问呢?这时候我们就需要另外一个工具了——socat。
它就像一把瑞士军刀一样,连接任何东西。我们通过它连接socket的终端。当前的CentOS上没有这个工具,所以我们先安装。
1. 查找一下安装包:# yum search socat
2. 安装socat:yum install -y socat
3. 查看版本:# socat -V
我们这里安装的版本是1.7.3.2,不过任何版本应该都没有太大关系。
一般有两种方式来使用socat连接socket:
1. # socat /var/run/haproxy.sock stdio:这个通常是发送一个脚本到haproxy
2. # socat /var/run/haproxy.sock readline:这个是通过手动发送命令
socket支持两种操作模式:
1. 非交互式模式:这是默认模式,通常是发送单行命令。发送完命令后,haproxy返回后,整个操作就结束了。
2. 交互式模式:顾名思义,就是交互,有来有回,就像bash一样。就像我们通过终端执行linux命令一样,会有一个提示符,提示我们输入一个又一个命令。(在linux中通常是#或者$符号,在haproxy中是>)
连接haproxy
安装完socat后,我们就可以通过它连接haproxy并执行命令了。
最常用的连接方式:
socat /var/run/haproxy.sock readline
然后,我们输入命令,点击回车,就可以看到操作结果了。
本例中,我们输入haproxy的命令“show info”,于是就打印出了HAProxy的基本信息了。
注意,这里默认是非交互式模式,当我们输入命令回车并打印结果后,整个连接就自动关闭了。
如果我们想要执行多条命令呢?第一种方法还是非交互式模式,多条命令用分号分隔,比如show info; show stats,然后回车。这样就一次传输了多条命令给haproxy。
更好的做法是非交互式模式。
我们执行完命令"socat /var/run/haproxy.sock readline"建立连接后,输入命令"prompt"回车,就进入交互式模式了,看到了我们输入的提示符">":
执行完命令"show backend"后,会打印出haproxy当前所有backend,这里我的haproxy中只有一个backend名称叫servers。
然后终端又回到提示符>, 提示我们可以继续输入命令。
如果我们想退出连接,输入quit即可。
haproxy支持的命令
支持很多中命令,主要是分为以下几大类:
1. 对ACLs和Backend、frontend等的增删查改、启用禁用的管理。
2. 查询haproxy的基本信息
以下我们只列举几个常见的命令
- show info:可以看到HAProxy版本等信息
- disable server servers/tomcat1:关闭一台server
- enable server servers/tomcat1:启动一台server
- get weight servers/tomcat1:获取server的权重
- set server servers/tomcat1 weight 100:设置server的权重
- show backend:列举所有backend
- show servers state:查看server列表及状态
- show stat:查看统计信息
完整的命令请参考官方文档。
官方文档9.3Management【Unix Socket commands】:http://cbonte.github.io/haproxy-dconv/2.0/management.html#9.3
通过socat连接socket,我们就能在不停机的情况下操作管理haproxy了,是不是很方便呢!