Dengeli düğümü haproxy'den komut satırıyla nasıl kaldırabilirim?


46

Yük dengeleyici olarak çalışan haproxy'm var ve haproxy ile gelen istatistik web arayüzünden bir web sunucusunu bakım moduna geçirebilirim (ve tekrar geri getirebilirim) - bu harika!

Ancak, aynı işlemi komut satırından da gerçekleştirebilmek istiyorum (bazı otomatik dağıtım iş akışlarında kullanmak için). Bu mümkün mü ve eğer mümkünse nasıl?

Çok teşekkürler

Yanıtlar:


59

Güncelleme (28 Ağu 2012): Şimdilerde, aşağıda açıklanan yöntemleri kullanan günümüzde haproksiktl kullanmaya meyilliyim .


Aynı konuyu başkaları için biraz daha araştırdıktan sonra düzelttim: -

Konfigürasyonunuza bir unix soketi ekleyebilir, ardından bununla etkileşime girebilirsiniz ( işte olası komutlar ).

Kurmak:

sudo nano /etc/haproxy/haproxy.cfg

'Genel' bölümünüze şunu ekleyin:

stats socket /etc/haproxy/haproxysock level admin

Haproxy arka planınızı yeniden başlatın (örn. sudo service haproxy restart)

Şimdi socat'a ihtiyacınız var (eğer yoksa, sadece apt-get install socatUbuntu'da).

Şimdi tek yapmanız gereken, bir düğümü devirmek için bu komutu ateşlemek:

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

Geri getirmek için yukarıdaki komuttaki enable ile değiştirin.


21

Beardwizzle'ın yankı yöntemine ek olarak, bunu etkileşimli olarak da yapabilirsiniz:

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

6
Bir büyük Burada tuzak o adam sayfasında öyle diyor gerçi Debian'ın SoCat "readline" desteklemez olmasıdır. Libreadline (GPL) ve OpenSSL arasındaki bir lisans anlaşmazlığı nedeniyle kapattılar. Bu durumda socat /var/run/haproxy.stat stdioher bir komut için kullanıyorsunuz
bentolor

7

Sadece netcat ( nc) erişimine sahip olma şansınız HAProxy'nin soket dosyası ile benzer şekilde etkileşimde bulunmak için kullanabilirsiniz 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

Bir sunucuyu devre dışı bırakmak için:

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

Soket dosyasının yukarıdakileri gerçekleştirmek için uygun erişim seviyesine sahip olduğundan emin olun. Temelde böyle bir şey:

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

Aksi takdirde, reddedilen hatalara izin verilir:

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

$

Referanslar


7

Kolay yol:

1 - Web sunucunuzu maintenance.html (örneğin) adlı bir dosya varsa, 503 kodunu döndürecek şekilde yapılandırın. Apache ile aşağıdaki gibi yapabilirsiniz:

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

2 - Bir bağlantı noktasını yalnızca aşağıdaki gibi kontrol etmek yerine bir URL'yi kontrol etmek için haproxy arka ucunuzu yapılandırın:

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 - Web sunucunuzu yeniden başlatın ve dengeleyiciyi yükleyin.

4 - Web sunucunuzu bakım moduna geçirin.

touch /var/www/maintenance.html

5 - Web sunucunuzu bakım modundan kaldırın.

rm -f /var/www/maintenance.html

2

Son noktaya gelmek ve ardından başvurunuzu yayınlamak için sağlık kontrolü sayfasını geçici olarak bir sunucudan "kaldırabilirsiniz".


0

Debian varsa, readline çalışmıyor, netcat etkileşimli için daha iyi bir seçenektir:

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
...

Etkileşimli Olmayan:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.