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

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

我已将 haproxy 作为负载均衡器运行,并且通过 haproxy 附带的统计 Web 界面,我可以将 Web 服务器置于维护模式(然后再次将其恢复) - 这非常棒!

但是,我还希望能够从命令行执行相同的操作(用于某些自动化部署工作流程)。这可能吗?如果可以,如何操作?

非常感谢

答案1

更新(2012年8月28日):我现在倾向于使用haproxyctl如今,它采用了下面描述的方法。


经过进一步研究后,我已经修复了这个问题,希望其他遇到同样问题的人能够解决:-

您可以在配置中添加一个 unix 套接字,然后与其进行交互(以下是可能的命令)。

建立:

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

要恢复它,请将上面命令中的 disable 替换为 enable。

答案2

除了 beardwizzle 的 echo 方法之外,您还可以以交互方式执行此操作:

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

答案3

如果您只能访问 netcat(nc),您可以使用它以类似于的方式与 HAProxy 的套接字文件进行交互socat

$ 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

$

参考

答案4

您还可以暂时从一台服务器“删除”健康检查页面,以关闭端点,然后发布您的应用程序。

相关内容