3

ダウンタイムなしで個々のバックエンド サーバーをプログラムで Varnish ディレクタに追加または削除する最良の方法は何ですか? 私はこれの良い例を探していましたが、見つけることができません。

必要に応じてバックエンド サーバーをスケールアップおよびスケールダウンできるようにしたいと考えています。

ありがとう!

サム

4

1 に答える 1

1

これはバックエンドを追加する最もエレガントな方法でも動的な方法でもありませんが、別の VCL でバックエンドを定義し、それをdefault.vcl使用に含めることでこれにアプローチします

include "backend.vcl";

バックエンドとディレクターを定義する場所。例えば

probe healthcheck {
   .url = "/online";
   .interval = 15s;
   .timeout = 0.3 s;
   .window = 3;
   .threshold = 1;
   .initial = 1;
}

backend web1 {
  .host = "10.1.2.1";
  .port = "80";
  .connect_timeout = 300s;
  .first_byte_timeout = 5000s;
  .between_bytes_timeout = 300s;
  .probe = healthcheck;
}

director backendpool round-robin {
  { .backend = web1; }
}

backendpoolをバックエンドとして使用します。次に、シェル スクリプト、ssh、カスタム デーモン、またはニーズに最適な方法を使用してbackend.vcl、バックエンドを追加し、Varnish のリロードを発行して更新します。

このアプローチの問題点は、Varnish が から削除されたバックエンドを実際には削除しないことbackend.vclです。それらが使用されていなくても、Varnish はそれらを調査し続けます。これにより、長期的には予期しない動作が発生する可能性があります。少なくとも、バックエンド名が再利用されると、バックエンド ヘルス プローブの結果が混乱する可能性があります。たとえばweb1、上記の例でバックエンドの名前を数回変更し、そのホストを無効なものに変更した後、有効なバックエンドのみが定義されBackend_healthた上記の構成に戻した後のポーリング結果を次に示します。web1

0 Backend_health - web1 Still healthy 4--X-RH 3 1 3 0.001141 0.001055 HTTP/1.1 200 OK
0 Backend_health - web1 Still sick ------- 0 1 3 0.000000 0.000000
0 Backend_health - web2 Still healthy 4--X-RH 3 1 3 0.001061 0.001111 HTTP/1.1 200 OK
0 Backend_health - web3 Still healthy 4--X-RH 3 1 3 0.001007 0.001021 HTTP/1.1 200 OK

Varnish 2.1 にはより詳細なバックエンド処理用のパッチがありますが、私の知る限り、Varnish 3 では利用できません。

于 2013-01-10T07:38:32.973 に答える