読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。
ロードバランサは、クライアントからの通信を複数のサーバに振り分ける装置です。1つのサービスを複数のサーバで処理することで、処理能力・可用性(耐障害性)・メンテナンス性が上がります。この記事では、F5社のBIG-IP LTM(Version 16.1.2)で、2台のHTTPサーバに負荷分散する基本設定と動作を確認します。
- Node(負荷分散するサーバのIPアドレス)の登録
- Pool と Pool Member(IPアドレス+ポート)の作成
- Virtual Server の作成と、ラウンドロビンでの振り分けの確認
検証構成と設定の全体像
端末は www.hirotanoblog.work(10.0.1.100)へHTTPでアクセスします。BIG-IPはこの通信を受け取り、Web-01(10.0.2.24)かWeb-02(10.0.2.71)のどちらかへ中継します。インターフェースやVLANなど、ネットワーク関連の設定は済んでいるものとします。
BIG-IPの負荷分散は、Node・Pool Member・Pool・Virtual Server の4つを組み合わせて設定します。設定はこの順番(下から上)に作っていくと、前に作ったものを選ぶだけで済みます。
| 設定 | 中身 | 今回の値 |
|---|---|---|
| Node | 負荷分散するサーバのIPアドレス(ポートは含まない) | Web-01:10.0.2.24、Web-02:10.0.2.71 |
| Pool Member | Node のIPアドレス+公開するサービスのポート | 10.0.2.24:80、10.0.2.71:80 |
| Pool | Pool Member のグループ。振り分け方式とヘルスモニタを持つ | Web-Pool(Round Robin、http監視) |
| Virtual Server | 利用者に公開するIPアドレス+ポート。受けた通信を Pool へ渡す | Web-VS:10.0.1.100:80 |
この記事の設定画面は、実際の画面ではなく、検証時の画面から設定する項目を抜き出して描いたイメージです。BIG-IPのバージョンによって、項目の並びや表記は変わります。
Node の設定
Node を登録する
Node は、負荷分散するサーバのIPアドレスです。サーバでどのサービス(ポート)が動いているかはここでは関係なく、IPアドレスだけを登録します。Web-01(10.0.2.24)と Web-02(10.0.2.71)の2台を登録します。
Main ›› Local Traffic ›› Nodes ›› Node List を開き、右上の Create をクリックします。
| 1Name | Web-01 |
| Description | |
| 2Address | ◉ Address○ FQDN 10.0.2.24 |
| 3Health Monitors | Node Specific |
| 4Select Monitors | Active/Common icmpAvailable/Common gateway_icmp https_443 real_server snmp_dca |
| Availability Requirement | All Health Monitor(s) |
| Ratio | 1 |
| Connection Limit | 0 |
| Connection Rate Limit | 0 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | 任意の名前。今回は Web-01 にします。 |
| 2 | Address | Address を選び、サーバのIPアドレス 10.0.2.24 を入力します。 |
| 3 | Health Monitors | 任意。Node Specific を選ぶと、このNode用のモニタを指定できます。 |
| 4 | Select Monitors | icmp を Active に移します。ICMP(ping)でサーバの死活を監視します。 |
| 5 | Finished | クリックして登録します。 |
同じ手順で Web-02(10.0.2.71)も登録します。ICMPに応答があると、Status が利用可能(実際の画面では緑の丸)になります。
| Status | Name | Description | Application | Address |
|---|---|---|---|---|
| Web-01 | 10.0.2.24 | |||
| Web-02 | 10.0.2.71 |
Pool Member と Pool の設定
Pool を作成して Pool Member を登録する
Pool Member は、Node のIPアドレスと公開するサービスのポート番号の組み合わせです。今回はTCP 80番でWebサーバを公開しているので、Web-01 なら 10.0.2.24:80 になります。この Pool Member を Pool にまとめ、Pool の中で負荷分散します。
設定では、Pool を作る画面の中で、登録済みの Node を選んで Pool Member を追加します。Main ›› Local Traffic ›› Pools ›› Pool List を開き、右上の Create をクリックします。
| 1Name | Web-Pool |
| Description | |
| 2Health Monitors | Active/Common httpAvailable/Common gateway_icmp http2 http2_head_f5 http_head_f5 |
| 3Load Balancing Method | Round Robin | ||||||||||||
| Priority Group Activation | Disabled | ||||||||||||
| 4New Members | ○ New Node○ New FQDN Node◉ Node List Address: Web-02 (10.0.2.71) Service Port: 80 HTTP Add
|
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | 任意の名前。今回は Web-Pool にします。 |
| 2 | Health Monitors | Webサーバなので http を Active に移し、HTTPで監視します。 |
| 3 | Load Balancing Method | 既定の Round Robin のままにします。 |
| 4 | New Members | Node List を選ぶと、Address のプルダウンに登録済みの Node が出ます。Service Port に 80(HTTP)を入れて Add をクリックします。画面は Web-01、Web-02 の2台を追加し終えた状態です。 |
| 5 | Finished | クリックして作成します。 |
作成後、Pool List の Members が2になっていることを確認します。HTTPのモニタに応答があると、Status が利用可能になります。
| Status | Name | Description | Application | Members |
|---|---|---|---|---|
| Web-Pool | 2 |
今回は Node に icmp、Pool に http のモニタを設定しています。Node のモニタはサーバ自体が生きているか、Pool のモニタはサービス(HTTP)が応答するかを見ます。Node が停止と判断されると、その Node を使う Pool Member も振り分け対象から外れます。
Virtual Server の設定
Virtual Server を作成して Pool と紐付ける
Virtual Server は、Pool を利用者に公開するために BIG-IP が持つIPアドレスとポート番号の組み合わせです。今回は、上で作った Web-Pool を 10.0.1.100 の80番で公開します。
Main ›› Local Traffic ›› Virtual Servers ›› Virtual Server List を開き、右上の Create をクリックします。設定する項目は画面の上から下まで分かれているので、スクロールしながら入力します。
| 1Name | Web-VS |
| Type | Standard |
| Source Address | ◉ Host○ Address List |
| 2Destination Address/Mask | ◉ Host○ Address List 10.0.1.100 |
| 3Service Port | ◉ Port○ Port List 80 HTTP |
| State | Enabled |
| Protocol | TCP |
| Protocol Profile (Client) | tcp |
| 4HTTP Profile (Client) | http |
| HTTP Profile (Server) | (Use Client Profile) |
| ⋮ (中略) | |
| VLAN and Tunnel Traffic | All VLANs and Tunnels |
| 5Source Address Translation | Auto Map |
| 6Default Pool | Web-Pool |
| Default Persistence Profile | None |
| Fallback Persistence Profile | None |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | 任意の名前。今回は Web-VS にします。 |
| 2 | Destination Address/Mask | 公開するIPアドレス 10.0.1.100 を入力します。 |
| 3 | Service Port | HTTPなので 80 にします。 |
| 4 | HTTP Profile (Client) | http を選びます。BIG-IPがHTTPの中身を解釈できるようになり、Cookieを使ったパーシステンスなどHTTPに関わる機能を使うときに必要です。 |
| 5 | Source Address Translation | Auto Map にします。端末から来た通信の送信元IPアドレスを BIG-IP のアドレスに変換(送信元NAT)してサーバへ送ります。 |
| 6 | Default Pool | 振り分け先の Web-Pool を選びます。 |
| 7 | Finished | クリックして作成します。 |
送信元NATを使う理由を図で確認しておきます。
送信元を変換しないと、サーバは端末のIPアドレス宛てに直接応答を返そうとします。サーバのデフォルトゲートウェイが BIG-IP でない構成では、応答が BIG-IP を通らず、通信が成立しません。Auto Map は、サーバ側のネットワークにある BIG-IP 自身のアドレス(Self IP)を送信元に使います。
作成が終わると、Virtual Server List に表示されます。
| Status | Name | Description | Application | Destination | Service Port |
|---|---|---|---|---|---|
| Web-VS | 10.0.1.100 | 80 (HTTP) |
動作確認
端末から www.hirotanoblog.work で Virtual Server のアドレス(10.0.1.100)に接続できるよう、hosts ファイルに登録しておきます。ブラウザでアクセスすると Web-01 が表示され、別の端末からアクセスすると Web-02 が表示されました。
Pool の負荷分散方式はラウンドロビン(Round Robin)なので、新しい接続を2台に交互に割り振ります。curl コマンドでWebページのタイトルだけを取り出すと、Web-01 と Web-02 が交互に表示されることが確認できます。
$ curl -s www.hirotanoblog.work | grep -o '<title>.*</title>' | sed 's#<title>\(.*\)</title>#\1#' Web-01 – Web-01 $ curl -s www.hirotanoblog.work | grep -o '<title>.*</title>' | sed 's#<title>\(.*\)</title>#\1#' Web-02 – Web-02 $ curl -s www.hirotanoblog.work | grep -o '<title>.*</title>' | sed 's#<title>\(.*\)</title>#\1#' Web-01 – Web-01 $ curl -s www.hirotanoblog.work | grep -o '<title>.*</title>' | sed 's#<title>\(.*\)</title>#\1#' Web-02 – Web-02
ラウンドロビンは接続(TCPセッション)単位で振り分けます。ブラウザは同じ接続を使い回すことがあるため、同じブラウザで再読み込みしても表示が切り替わらない場合があります。curl のように毎回新しく接続すると、交互に振り分けられる様子が分かりやすくなります。
うまくいかないときの確認ポイント
| 症状 | よくある原因 | 確認すること |
|---|---|---|
| Node や Pool の Status が利用可能にならない | モニタの応答がない(ICMPやHTTPが届かない、サーバでサービスが止まっている) | BIG-IPからサーバへの到達性、Pool のモニタ(http)とサーバのポート |
| Virtual Server にアクセスしても応答がない | サーバの応答が BIG-IP を通らずに返っている | Source Address Translation の設定、サーバのデフォルトゲートウェイ |
| いつも同じサーバに振り分けられる | ブラウザが接続を使い回している、片方のメンバーが停止している | Pool Member の Status、curl など新しい接続での動作 |
まとめ
| 手順 | メニュー | 主な設定値 |
|---|---|---|
| Node | Local Traffic ›› Nodes ›› Node List | Web-01(10.0.2.24)、Web-02(10.0.2.71)、Monitor:icmp |
| Pool / Pool Member | Local Traffic ›› Pools ›› Pool List | Web-Pool、Monitor:http、Round Robin、メンバー::80 ×2 |
| Virtual Server | Local Traffic ›› Virtual Servers ›› Virtual Server List | Web-VS、10.0.1.100:80、HTTP Profile:http、SNAT:Auto Map、Default Pool:Web-Pool |
負荷分散方式やパーシステンスの設定は、次の記事で確認できます。
コメント