Manage HAProxy backend servers using socket.

Display available backends.

$ echo "show backend" | \
  sudo -u haproxy socat stdio unix-connect:/var/run/haproxy/admin.sock
# name
bnfs
MASTER

Display backend servers.

$ echo "show servers state bnfs" | \
  sudo -u haproxy socat stdio unix-connect:/var/run/haproxy/admin.sock
1
# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_port srv_check_addr srv_agent_addr srv_agent_port
3 bnfs 1 nfs1 192.168.56.10 2 0 1 1 659 6 3 4 6 0 0 0 - 0 - 0 0 - - 0
3 bnfs 2 nfs2 192.168.56.11 2 0 1 1 824 6 3 4 6 0 0 0 - 0 - 0 0 - - 0

The sixth column defines current server operational state.

[...]
srv_op_state:                Server operational state (UP/DOWN/...).
                              0 = SRV_ST_STOPPED
                                The server is down.
                              1 = SRV_ST_STARTING
                                The server is warming up (up but
                                throttled).
                              2 = SRV_ST_RUNNING
                                The server is fully up.
                              3 = SRV_ST_STOPPING
                                The server is up but soft-stopping
                                (eg: 404).
[...]                                    

Display current backend servers.

$ echo "show servers state bnfs" | \
  sudo -u haproxy socat stdio unix-connect:/var/run/haproxy/admin.sock | \
  awk 'NR>2 { switch($6) {
                case "0": s="stopped";  break; 
                case "1": s="starting"; break;
                case "2": s="running";  break; 
                case "3": s="stopping"; break;
              }; 
              if($2 != "") { printf "%10s/%-10s%s\n", $2, $4, s }
            }'
      bnfs/nfs1      running
      bnfs/nfs2      running

Disable second server.

$ echo -e "disable server bnfs/nfs2" | \
  sudo -u haproxy socat stdio unix-connect:/var/run/haproxy/admin.sock

Inspect current backend servers.

$ echo "show servers state bnfs" | \
  sudo -u haproxy socat stdio unix-connect:/var/run/haproxy/admin.sock | \
  awk 'NR>2 { switch($6) {
                case "0": s="stopped";  break; 
                case "1": s="starting"; break;
                case "2": s="running";  break; 
                case "3": s="stopping"; break;
              }; 
              if($2 != "") { printf "%10s/%-10s%s\n", $2, $4, s }
            }'
      bnfs/nfs1      running
      bnfs/nfs2      stopped

Enable second server and disable the first one.

$ echo -e "enable server bnfs/nfs2\ndisable server bnfs/nfs1" | \
  sudo -u haproxy socat stdio unix-connect:/var/run/haproxy/admin.sock
$ echo "show servers state bnfs" | \
  sudo -u haproxy socat stdio unix-connect:/var/run/haproxy/admin.sock | \
  awk 'NR>2 { switch($6) {
                case "0": s="stopped";  break; 
                case "1": s="starting"; break;
                case "2": s="running";  break; 
                case "3": s="stopping"; break;
              }; 
              if($2 != "") { printf "%10s/%-10s%s\n", $2, $4, s } 
            }'
      bnfs/nfs1      stopped
      bnfs/nfs2      running
ko-fi