LinuCレベル3 プラットフォームスペシャリスト 高可用性プラットフォームの構築 問21
高可用性プラットフォームの構築/Webサーバーによる負荷分散nginxをリバースプロキシとして、複数台のキャッシュサーバーへ負荷分散している。キャッシュの効率を上げるため、同じURLへのリクエストは常に同じキャッシュサーバーへ振り分け、サーバーを増減したときに振り分け先が変わるURLはできるだけ少なくしたい。upstreamブロックに書く設定として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「高可用性プラットフォームの構築」に対応。実際の試験問題ではありません)
- Aip_hash;
- Bleast_conn;
- Chash $remote_addr consistent;
- Dhash $request_uri consistent;
正解:D
解説
nginxのupstreamブロックのhashディレクティブは、指定したキー(変数を含められます)のハッシュ値で振り分け先のサーバーを決めます。キーに$request_uriを使うと、同じURLへのリクエストは常に同じサーバーへ振り分けられるため、各キャッシュサーバーが受け持つURLが分かれてキャッシュの効率が上がります。consistentを付けるとketamaのコンシステントハッシュが使われ、サーバーを追加・削除したときに振り分け先が変わるキーを一部にとどめられます。consistentを付けない場合は、サーバー数が変わると多くのキーの振り分け先が変わります。
選択肢ごとの解説
- A誤り。ip_hashは、クライアントのIPアドレスをもとに振り分け先を決めます。同じクライアントは同じサーバーへ振り分けられますが、同じURLが同じサーバーへ行くとは限りません。
- B誤り。least_connは、アクティブな接続数が最も少ないサーバーへ振り分けます。URLと振り分け先は対応しないため、キャッシュの効率は上がりません。
- C誤り。$remote_addrをキーにすると、クライアントのIPアドレスで振り分け先が決まります。サーバーの増減の影響は抑えられますが、URLごとに振り分け先がそろいません。
- D正しい。$request_uriをキーにしたhashで同じURLを同じサーバーへ振り分け、consistentでサーバー増減時の振り分け先の変化を最小限にします。