การทำโหลดบาลานซ์อัตโนมัติให้โดยอัตโนมัติ


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 หยุดทำงาน nginx ยังคงจัดเส้นทางการร้องขอไปและจะส่งผลให้หมดเวลาครึ่งหนึ่งของเวลา :(

มีวิธีใดที่จะทำให้ nginx กำหนดเส้นทางการร้องขอไปยังเซิร์ฟเวอร์อื่นโดยอัตโนมัติเมื่อตรวจพบเซิร์ฟเวอร์ที่ดาวน์สตรีม

ขอขอบคุณ.

คำตอบ:


33

ฉันคิดว่าเป็นเพราะ nginx ตรวจไม่พบว่า upstream หยุดทำงานเนื่องจากอยู่ในเครื่องเดียวกัน

ตัวเลือกที่คุณกำลังมองหาคือ: proxy_next_upstreamและ proxy_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;
}

ฉันมีปัญหากับการติดตั้ง Apache / PHP ที่ไม่สมบูรณ์ (ไฟล์ไลบรารี PEAR หายไป) ที่ทำให้เกิดข้อผิดพลาด http 500 proxy_next_upstream เพิ่งลองใหม่ในเครื่องอื่น - ที่ได้ตกลง
Alister Bulman

5
ทำไม proxy_redirect ถึงปิด?
Seun Osewa

2

สวัสดีโปรดดูวิกิ: http://wiki.nginx.org/NginxHttpUpstreamModule#server

โดยพื้นฐานหากตรวจพบความล้มเหลวแบ็กเอนด์จะถูกทำเครื่องหมายว่าไม่ทำงานเป็นเวลา x วินาทีและจะลองอีกครั้ง ดังนั้นหากคุณยังคงเห็นการเชื่อมต่ออาจเป็น nginx ที่คอยตรวจสอบว่าแบ็กเอนด์ใช้ได้หรือไม่

อย่างไรก็ตามควรลองรายการถัดไปในบล็อกอัปสตรีมดังนั้นคุณไม่ควรเห็นว่าไม่มีแบ็กเอนด์เหลืออยู่หากมีรายการเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.