nginx failover โดยไม่มี load balance


13

ฉันมีปัญหาในการกำหนดค่า nginx

ฉันใช้ nignx เป็น reverse proxy ฉันต้องการส่งคำขอทั้งหมดไปยังเซิร์ฟเวอร์เครื่องแรก หากเซิร์ฟเวอร์แรกไม่ทำงานฉันต้องการส่งคำขอไปยังเซิร์ฟเวอร์ที่สอง

กล่าวโดยย่อฉันจะมีวิธีแก้ไขปัญหาความล้มเหลวได้อย่างไรโดยไม่ต้องทำโหลดบาลานซ์?

คำตอบ:


13

สิ่งที่คุณต้องการคือการตั้งค่าแบบแอคทีฟ + แบบพาสซีฟ นี่คือตัวอย่างข้อมูล nginx conf เพื่อให้คุณไป:

upstream backend {
    server 1.2.3.4:80 fail_timeout=5s max_fails=3;
    server 4.5.6.7:80 backup;
}

server {
    listen 80;
    server_name whatevs.com;

    location / {
        proxy_pass http://backend;
    }
}

ดังนั้น 'ปกติ' คำขอทั้งหมดจะไปที่โฮสต์ 1.2.3.4 หากเราได้รับความล้มเหลวสามครั้งไปยังกล่องนั้น 4.5.6.7 จะเข้าแทนที่


ถ้าคุณมีข้อมูลสำรองหลายชุด
Benny Bottema

0

โหลดบาลานซ์ใน nginx นั้นง่ายมากเราแค่กำหนดชื่อเซิร์ฟเวอร์ในขอบเขตอัปสตรีมที่เราเขียนรายชื่อเซิร์ฟเวอร์สำหรับโหลดบาลานซ์
nginx สนับสนุนอัลกอริทึมที่แตกต่างกันสำหรับการปรับสมดุลโหลดโดยค่าเริ่มต้นมันเป็นรอบโรบิน แต่เรากำหนดค่าด้วยปุ่มที่แตกต่างกันเช่น ip_hash ...

http{
 upstream servername{
    ip_hash//for sticky hash
    least_conn//FOR least connection 
    sever localhost:1001;
    sever localhost:1002;
    sever localhost:1003;
}

0

การขยายคำตอบของ chrskly คุณอาจต้องการกำหนดค่า 3 ค่า / การตั้งค่า

  1. fail_timeout : เวลาทั้งหมดจากความพยายามที่ล้มเหลวและทำเครื่องหมายเซิร์ฟเวอร์เป็น DOWN ในเวลาเดียวกัน หาก 5 วินาทีจากนั้นจะลองmax_failใน 5 วินาทีและหากยังคงล้มเหลวให้ทำเครื่องหมายเซิร์ฟเวอร์นั้นเป็น DOWN เป็นเวลา 5 วินาที
  2. max_fail : จำนวนครั้งสูงสุด
  3. proxy_connect_timeout : ระยะเวลารอการเชื่อมต่อ

ในตัวอย่าง GRPC ต่อไปนี้หากเซิร์ฟเวอร์หลักไม่สามารถเชื่อมต่อได้ใน 7 วินาทีให้เปลี่ยนเป็นการสำรองและทำเครื่องหมายเซิร์ฟเวอร์หลักเป็น 6000 วินาที:

upstream grpcservers {
    server 192.168.0.XX:9997 fail_timeout=6000s max_fails=1;  # After 1 fail in 6000s, Main server is marked unavailable for 6000s.
    server 192.168.0.XX:9999 backup;
        } 
location / {
            grpc_pass grpc://grpcservers;
            grpc_connect_timeout 7s;  # If conn cant be made in 7sec, switch to backup
        }

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