我有haproxy作为我的负载平衡器运行,并从haproxy附带的统计networking界面,我可以把一个Web服务器进入维护模式(并再次把它带回来) – 这是伟大的!
不过,我也希望能够从命令行执行相同的操作(用于某些自动部署工作stream程)。 这是可能的,如果是的话如何?
非常感谢
更新(2012年8月28日):我现在倾向于使用haproxyctl ,它使用下面描述的方法。
我已经修正了一些更多的研究,对于有同样问题的其他人:
你可以在你的configuration中添加一个unix套接字,然后与之交互( 这里是可能的命令 )。
build立:
sudo nano /etc/haproxy/haproxy.cfg
在你的“全球”部分添加:
stats socket /etc/haproxy/haproxysock level admin
重新启动你的haproxy守护进程(例如sudo service haproxy restart
)
现在你需要socat(如果你没有,只需apt-get install socat
在Ubuntu上)。
现在你所要做的就是启动这个命令来取消一个节点:
echo "disable server yourbackendname/yourservername" | socat stdio /etc/haproxy/haproxysock
要使其恢复,请在上面的命令中将enable disablereplace为enable。
除了beardwizzle的回声方法,你也可以交互地做到这一点:
root@ny-lb01:/etc/haproxy# sudo socat readline /var/run/haproxy.stat prompt > set timeout cli 1d > disable server foo/web01 > help Unknown command. Please enter one of the following commands only : clear counters : clear max statistics counters (add 'all' for all counters) clear table : remove an entry from a table help : this message prompt : toggle interactive mode with prompt quit : disconnect show info : report information about the running process show stat : report counters for each proxy and server show errors : report last request and response errors for each proxy show sess [id] : report the list of current sessions or dump this session show table [id]: report table usage stats or dump this table's contents get weight : report a server's current weight set weight : change a server's weight set timeout : change a timeout setting disable server : set a server in maintenance mode enable server : re-enable a server that was previously in maintenance mode
简单的方法是:
1 – 如果存在名为maintenance.html(例如)的文件,则configuration您的Web服务器以返回503代码。 用Apache可以做到这一点,如下所示:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} !=503 RewriteCond "/var/www/maintenance.html" -f RewriteRule ^(.*)$ /$1 [R=503,L] </IfModule>
2 – configuration你的haproxy后端检查一个URL,而不是只检查一个端口,如下所示:
backend site balance roundrobin option httpchk GET /index.html server myserver1.example.com 1.1.1.1:80 cookie S1 check inter 2000 fall 3 server myserver2.example.com 1.1.1.2:80 cookie S2 check inter 2000 fall 3
3 – 重新启动您的networking服务器和负载平衡器。
4 – 将您的Web服务器置于维护模式。
touch /var/www/maintenance.html
5 – 从维护模式中删除您的Web服务器。
rm -f /var/www/maintenance.html
如果您只能访问netcat( nc
),则可以使用它与socat
类似的方式与HAProxy的套接字文件进行交互。
$ echo "show info" | nc -U /var/lib/haproxy/stats | head -10 Name: HAProxy Version: 1.5.2 Release_date: 2014/07/12 Nbproc: 1 Process_num: 1 Pid: 29745 Uptime: 0d 0h14m35s Uptime_sec: 875 Memmax_MB: 0 Ulimit-n: 8034
禁用服务器:
$ echo "enable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats
注意确保套接字文件具有适当的访问级别来执行上述操作。 主要是这样的:
stats socket /var/lib/haproxy/stats level admin
否则,您将获得权限被拒绝的错误:
$ echo "disable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats Permission denied $
您还可以暂时从一台服务器上“移除”运行状况检查页,以便终止端点,然后发布您的应用程序。