मैं कमांड लाइन के माध्यम से हाइपोक्सी से संतुलित नोड कैसे निकाल सकता हूं?


46

मुझे अपने लोड-बैलेंसर के रूप में चलने वाली हाइप्रोक्सी है और हाइपोक्सी के साथ आने वाले सांख्यिकी वेब इंटरफ़ेस से, मैं एक वेब सर्वर को रखरखाव मोड में रख सकता हूं (और इसे फिर से वापस ला सकता हूं) - जो बहुत अच्छा है!

हालाँकि, मैं कमांड लाइन (कुछ स्वचालित परिनियोजन वर्कफ़्लो में उपयोग के लिए) से उसी क्रिया को करने में सक्षम होना चाहता हूं। क्या यह संभव है और यदि ऐसा हो तो कैसे?

बहुत धन्यवाद

जवाबों:


59

अद्यतन (२ ha अगस्त २०१२): मैं आजकल हाइप्रोक्टेकल का उपयोग करता हूं , जो नीचे वर्णित विधियों का उपयोग करता है।


मैंने इसे कुछ और शोध के बाद, उसी मुद्दे के साथ किसी और के लिए तय किया है: -

आप अपने कॉन्फ़िगरेशन में एक यूनिक्स सॉकेट जोड़ सकते हैं, फिर उसके साथ बातचीत कर सकते हैं ( यहां संभावित कमांड हैं )।

स्थापित करना:

sudo nano /etc/haproxy/haproxy.cfg

अपने 'वैश्विक' खंड में जोड़ें:

stats socket /etc/haproxy/haproxysock level admin

अपने haproxy डेमन (जैसे sudo service haproxy restart) को पुनरारंभ करें

अब आपको समाज की आवश्यकता है (यदि आपके पास यह नहीं है, तो बस apt-get install socatउबंटू पर)।

अब आप सभी को एक नोड नीचे करने के लिए इस कमांड को बंद करना होगा:

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

इसे वापस लाने के लिए ऊपर दिए गए कमांड में सक्षम के साथ अक्षम करें।


21

दाढ़ी-मूंछ की गूंज विधि के अलावा, आप यह अंतःक्रियात्मक रूप से भी कर सकते हैं:

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 /var/run/haproxy.stat stdioहर एक आदेश के लिए उपयोग करते हैं
बेंटोलर

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 कोड को वापस करने के लिए अपने वेब सर्वर को कॉन्फ़िगर करें यदि रखरखाव। Html (उदाहरण के लिए) नाम की कोई फ़ाइल मौजूद है। अपाचे के साथ आप इसे निम्नानुसार कर सकते हैं:

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

2 - केवल एक पोर्ट की जाँच करने के बजाय एक URL की जाँच करने के लिए अपने haproxy बैकएंड को कॉन्फ़िगर करें:

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

यदि आपके पास डेबियन है, तो रीडलाइन काम नहीं करती है, तो नेटसैट इंटरैक्टिव के लिए एक बेहतर विकल्प है:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.