nginx स्वचालित विफलता लोड संतुलन


29

मैं लोडिंग के लिए nginx और NginxHttpUpstreamModule का उपयोग कर रहा हूं। मेरा विन्यास बहुत सरल है:

upstream lb {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

server {
    listen  89;
    server_name localhost;

    location / {
            proxy_pass      http://lb;
            proxy_redirect  off;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

लेकिन इस कॉन्फिग के साथ, जब 2 बैकएंड सर्वर में से एक डाउन हो जाता है, तो नगनेक्स अभी भी रूट करने के लिए अनुरोध करता है और इसका परिणाम आधे समय में होता है :(

क्या यह किसी डाउन सर्वर का पता लगाने पर किसी अन्य सर्वर के अनुरोध को स्वचालित रूप से रूट करने के लिए नेग्नेक्स बनाने का कोई समाधान है।

धन्यवाद।

जवाबों:


33

मुझे लगता है कि यह इसलिए है क्योंकि nginx यह पता नहीं लगा रहा है कि ऊपर की ओर नीचे है क्योंकि यह एक ही मशीन पर है।

जो विकल्प आप देख रहे हैं, वे हैं : xy_next_upstream और xy_connect_timeout

इसे इस्तेमाल करे:

location / {
        proxy_pass              http://lb;
        proxy_redirect          off;
        proxy_next_upstream     error timeout invalid_header http_500;
        proxy_connect_timeout   2;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}

मुझे अपूर्ण अपाचे / PHP सेटअप (अनुपस्थित PEAR लाइब्रेरी फ़ाइलें) के साथ समस्या हो रही थी, जिसने http 500 त्रुटियों को फेंक दिया। प्रॉक्सी_नेक्स्ट_अपस्ट्रीम बस दूसरी मशीन पर पीछे हट गई - ठीक है।
एलिस्टर बुलमैन

5
प्रॉक्सी_रेड अप्रत्यक्ष क्यों है?
सीन ओसेवा

2

अरे, कृपया विकी देखें: http://wiki.nginx.org/NginxHttpUpstreamModule#server

मूल रूप से यदि विफलता का पता चला है तो बैकएंड को x सेकंड के लिए नीचे चिह्नित किया जाएगा और यह फिर से कोशिश करेगा। इसलिए यदि आप कनेक्शन देखते रहते हैं तो यह संभवत: nginx है जो जाँचता रहता है कि बैकएंड उपलब्ध हो गया है या नहीं।

हालाँकि, इसे अपस्ट्रीम ब्लॉक में अगली प्रविष्टि की कोशिश करनी चाहिए, इसलिए आपको वास्तव में यह नहीं देखना चाहिए कि केवल एक डाउन होने पर कोई बैकएंड उपलब्ध नहीं है।

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