LinuCレベル3 プラットフォームスペシャリスト 高可用性プラットフォームの構築 問20
高可用性プラットフォームの構築/ロードバランサーの構築HAProxyで2台のWebサーバーへ負荷分散している。利用者の多くが同じ企業のNAT配下から同じグローバルIPアドレスでアクセスしてくるが、ログイン後のセッションを保つため、利用者ごとに同じWebサーバーへ振り分け続けたい。haproxy.cfgのbackendの設定として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「高可用性プラットフォームの構築」に対応。実際の試験問題ではありません)
- A「cookie SERVERID insert indirect nocache」を書き、各server行に「cookie s1」等を付ける
- B「balance source」と「hash-type consistent」を書き、送信元IPアドレスのハッシュで振り分け先を固定する
- C各server行に「weight 100」と「maxconn 500」を付け、同じサーバーへ振り分けられる比率と同時接続数を調整する
- D「option forwardfor」を書き、X-Forwarded-Forヘッダで利用者の元のIPアドレスを各Webサーバーへ伝える
正解:A
解説
HAProxyのcookieによるスティッキーセッションでは、backendに cookie SERVERID insert を書くと、HAProxyが応答にSERVERIDというCookieを挿入し、各server行のcookieで指定した識別子(s1等)を値として入れます。以降のリクエストではこのCookieを見て同じサーバーへ振り分けるため、同じIPアドレスから来る利用者どうしでも個別に振り分け先を保てます。indirectはサーバーへ転送するリクエストからこのCookieを取り除く指定、nocacheは途中のキャッシュにCookie付きの応答を保存させないための指定です。balance sourceは送信元IPアドレスで振り分けるため、NAT配下の利用者は全員が同じサーバーへ集中してしまいます。
選択肢ごとの解説
- A正しい。cookie insertでHAProxyがサーバーの識別子をCookieに入れ、以降はそのCookieで利用者ごとに同じサーバーへ振り分けます。
- B誤り。balance sourceは送信元IPアドレスのハッシュで振り分け先を決めるため(hash-type consistentはサーバー増減時の影響を抑えるだけです)、同じグローバルIPアドレスの利用者は全員が同じサーバーへ集まり、負荷が偏ります。
- C誤り。weightはサーバーごとの振り分けの比率を、maxconnはサーバーごとの同時接続数の上限を決める指定です。同じ利用者を同じサーバーへ振り分け続ける仕組みにはなりません。
- D誤り。option forwardforは、クライアントの元のIPアドレスをX-Forwarded-Forヘッダでサーバーへ伝える指定です。振り分け先の決め方は変わりません。