負荷分散なしのnginxフェールオーバー


13

nginxの設定に問題があります。

私はnignxをリバースプロキシとして使用しています。すべてのリクエストを最初のサーバーに送信したい。最初のサーバーがダウンした場合、2番目のサーバーにリクエストを送信します。

要するに、負荷分散なしでフェールオーバーソリューションを使用するにはどうすればよいですか?

回答:


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に送信されます。そのボックスに3つの障害が発生した場合、4.5.6.7が引き継ぎます。


複数のバックアップがある場合はどうなりますか?
ベニーボッテマ

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:失敗した試行の合計時間。また、同じ時間にサーバーを停止としてマークします。5秒の場合、max_failの試行は5秒で試行され、それでも失敗する場合は、そのサーバーを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.