ฉันจะลบโหนดที่สมดุลจาก haproxy ผ่านทางบรรทัดคำสั่งได้อย่างไร


46

ฉันมี haproxy ทำงานเป็น load-balancer ของฉันและจากเว็บอินเตอร์เฟสสถิติที่มาพร้อมกับ haproxy ฉันสามารถใส่เว็บเซิร์ฟเวอร์เข้าสู่โหมดบำรุงรักษา (และนำมันกลับมาอีกครั้ง) - เยี่ยมมาก!

อย่างไรก็ตามฉันยังต้องการที่จะสามารถดำเนินการเดียวกันนั้นจากบรรทัดคำสั่ง (สำหรับใช้ในเวิร์กโฟลว์การปรับใช้อัตโนมัติบางอย่าง) เป็นไปได้และถ้าเป็นเช่นนั้นได้อย่างไร

ขอบคุณมาก

คำตอบ:


59

อัปเดต (28 ส.ค. 2555):ตอนนี้ฉันมักจะใช้haproxyctlทุกวันนี้ซึ่งใช้วิธีการที่อธิบายไว้ด้านล่าง


ฉันได้รับการแก้ไขหลังจากการวิจัยเพิ่มเติมเล็กน้อยสำหรับคนอื่นที่มีปัญหาเดียวกัน: -

คุณสามารถเพิ่มซ็อกเก็ตยูนิกซ์ในการกำหนดค่าของคุณแล้วโต้ตอบกับที่ ( นี่คือคำสั่งที่เป็นไปได้ )

เพื่อติดตั้ง:

sudo nano /etc/haproxy/haproxy.cfg

ในส่วน 'ส่วนกลาง' ของคุณให้เพิ่ม:

stats socket /etc/haproxy/haproxysock level admin

รีสตาร์ท haproxy daemon ของคุณ (เช่นsudo service haproxy restart)

ตอนนี้คุณต้องใช้ socat (ถ้าคุณไม่มีapt-get install socatใน Ubuntu เท่านั้น)

ตอนนี้สิ่งที่คุณต้องทำคือปิดคำสั่งนี้เพื่อลบโหนด:

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

เพื่อนำมาสำรองแทนที่ปิดการใช้งานด้วยการเปิดใช้งานในคำสั่งด้านบน


21

นอกจากวิธี echo ของ 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

6
ข้อผิดพลาดใหญ่ที่นี่คือ socat ของ Debian ไม่สนับสนุน "readline" แม้ว่ามันจะบอกว่าในหน้าคน พวกเขาแพทช์มันออกมาเนื่องจากการปะทะกันของใบอนุญาตระหว่าง libreadline (GPL) และ OpenSSL ในกรณีนี้คุณใช้socat /var/run/haproxy.stat stdioสำหรับทุกคำสั่งเดียว
bentolor

7

เมื่อวันที่ปิดโอกาสที่คุณจะสามารถเข้าถึง 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

$

อ้างอิง


7

วิธีง่ายๆคือ:

1 - กำหนดค่าเว็บเซิร์ฟเวอร์ของคุณเพื่อส่งคืนรหัส 503 หากมีไฟล์ชื่อ maintenance.html (ตัวอย่าง) อยู่ ด้วย 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 - กำหนดค่าแบ็กเอนด์ haproxy ของคุณเพื่อตรวจสอบ URL แทนการตรวจสอบพอร์ตดังนี้:

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 - รีสตาร์ทเว็บเซิร์ฟเวอร์ของคุณและโหลดบาลานเซอร์

4 - ทำให้เว็บเซิร์ฟเวอร์ของคุณอยู่ในโหมดบำรุงรักษา

touch /var/www/maintenance.html

5 - ลบเว็บเซิร์ฟเวอร์ของคุณออกจากโหมดบำรุงรักษา

rm -f /var/www/maintenance.html

2

นอกจากนี้คุณยังสามารถ "ลบ" หน้าตรวจสุขภาพจากเซิร์ฟเวอร์เครื่องเดียวชั่วคราวเพื่อรับจุดสิ้นสุดจากนั้นเผยแพร่แอปพลิเคชันของคุณ


0

หากคุณมีเดเบียน Readline ไม่ทำงาน netcat เป็นตัวเลือกที่ดีกว่าสำหรับการโต้ตอบ:

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

ไม่ใช่แบบโต้ตอบ:

echo "show info;show stat" | sudo nc -U /etc/haproxy/haproxysock
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.