回答:
必要なのは、アクティブ+パッシブセットアップです。以下に、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が引き継ぎます。
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;
}
chrsklyの答えを拡張して、3つのフラグ/構成を構成することができます。
次の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
}