Bagaimana saya bisa menghapus simpul seimbang dari haproxy melalui baris perintah?

46

Saya telah menjalankan haproxy sebagai penyeimbang beban dan dari antarmuka web statistik yang datang dengan haproxy, saya dapat menempatkan server web ke mode pemeliharaan (dan mengembalikannya lagi) - yang sangat bagus!

Namun, saya juga ingin dapat melakukan tindakan yang sama dari baris perintah (untuk digunakan dalam beberapa alur kerja penyebaran otomatis). Apakah ini mungkin dan jika iya, bagaimana?

Terimakasih banyak

isNaN1247
sumber

Jawaban:

59

Pembaruan (28 Agustus 2012): Saya sekarang cenderung menggunakan haproxyctl saat ini, yang menggunakan metode yang dijelaskan di bawah ini.


Saya telah memperbaikinya setelah melakukan sedikit penelitian, untuk orang lain dengan masalah yang sama: -

Anda dapat menambahkan soket unix di konfigurasi Anda, kemudian berinteraksi dengan itu ( berikut adalah perintah yang mungkin ).

Untuk mengatur:

sudo nano /etc/haproxy/haproxy.cfg

Di bagian 'global' Anda, tambahkan:

stats socket /etc/haproxy/haproxysock level admin

Mulai ulang daemon haproxy Anda (mis. sudo service haproxy restart)

Sekarang Anda perlu socat (jika Anda tidak memilikinya, hanya apt-get install socatdi Ubuntu).

Sekarang yang perlu Anda lakukan adalah menjalankan perintah ini untuk menghapus simpul:

echo "disable server yourbackendname/yourservername" | socat stdio /etc/haproxy/haproxysock

Untuk mengaktifkannya ganti disable dengan mengaktifkan pada perintah di atas.

isNaN1247
sumber
21

Selain metode gema beardwizzle, Anda juga dapat melakukan ini secara interaktif:

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
Kyle Brandt
sumber
6
Sebuah besar perangkap di sini adalah bahwa socat Debian tidak mendukung "readline" meskipun mengatakan demikian di halaman manual. Mereka menambalnya karena bentrokan lisensi antara libreadline (GPL) dan OpenSSL. Dalam hal ini Anda gunakan socat /var/run/haproxy.stat stdiountuk setiap perintah tunggal
bentolor
7

Jika Anda hanya memiliki akses ke netcat ( nc), Anda dapat menggunakannya untuk berinteraksi dengan file socket HAProxy dengan cara yang serupa 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

Untuk menonaktifkan server:

$ echo "enable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats

Berhati-hatilah untuk memastikan bahwa file soket memiliki tingkat akses yang sesuai untuk melakukan hal di atas. Terutama sesuatu seperti ini:

stats       socket /var/lib/haproxy/stats level admin

Kalau tidak, Anda akan mendapatkan izin yang ditolak kesalahan:

$ echo "disable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats
Permission denied

$

Referensi

slm
sumber
7

Cara mudahnya adalah:

1 - Konfigurasikan server web Anda untuk mengembalikan kode 503 jika ada file bernama maintenance.html (misalnya). Dengan apache Anda dapat melakukannya sebagai berikut:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} !=503
  RewriteCond "/var/www/maintenance.html" -f
  RewriteRule ^(.*)$ /$1 [R=503,L]
</IfModule>

2 - Konfigurasikan backend haproxy Anda untuk memeriksa URL alih-alih hanya memeriksa port sebagai berikut:

backend site
    balance roundrobin
    option httpchk GET /index.html
    server myserver1.example.com 192.0.2.1:80 cookie S1 check inter 2000 fall 3
    server myserver2.example.com 192.0.2.2:80 cookie S2 check inter 2000 fall 3

3 - Mulai ulang server web Anda dan muat penyeimbang.

4 - Tempatkan server web Anda dalam mode pemeliharaan.

touch /var/www/maintenance.html

5 - Hapus server web Anda dari mode pemeliharaan.

rm -f /var/www/maintenance.html
mijhael3000
sumber
2

Anda juga dapat sementara "menghapus" halaman pemeriksaan kesehatan dari satu server, untuk mendapatkan titik akhir turun dan kemudian menerbitkan aplikasi Anda.

rafael oliveira
sumber
0

Jika Anda memiliki debian, readline tidak berfungsi, netcat adalah pilihan yang lebih baik untuk interaktif:

user@server:/etc/haproxy$ sudo nc -U /etc/haproxy/haproxysock
prompt
> show info
Name: HAProxy
Version: 1.7.11-1ppa1~xenial
Release_date: 2018/04/30
Nbproc: 1
Process_num: 1
Pid: 12307
Uptime: 0d 10h33m22s
...

Non Interaktif:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
wjenkins9
sumber