如何通过命令行从haproxy中删除平衡节点?

我有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 $ 

    参考

    • HAProxy stats从命令行

    您还可以暂时从一台服务器上“移除”运行状况检查页,以便终止端点,然后发布您的应用程序。