0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI ロード・バランサでWebサーバを負荷分散

Last updated at Posted at 2025-03-19

本記事は、以下のOCIチュートリアルを参考に執筆しました。

しかし、上記チュートリアルの内容が古くなっているため、新たに本記事を執筆しました。

本記事のゴール

以下構成図を参考に、Webブラウザからロード・バランサのIPアドレスを入力を行い、​
事前に設定した2台のコンピュート(VM1・2)のWebページが交互に表示されることを確認します。
スクリーンショット 2025-03-18 17.16.39.png

本手順

本検証は以下の手順で実施を行います。
1. コンピュート・インスタンス2台(VM1・2)を作成
2. 作成後、httpdを使用してVM1・2をWebサーバ化​
3. ロード・バランサ用のパブリックIPアドレスを予約​
4. ロード・バランサを作成、バックエンド・セットにVM1・2を登録
5. Webブラウザからロード・バランサのパブリックIPアドレスを入力、​
VM1・2で設定したWebページが交互に表示されるか確認

事前準備

事前に以下リソースは作成済の状態となっております。

  • VCN:VCN_10.0.0.0/16
    • パブリック・サブネット:Pubsub_10.0.0.0/24
    • プライベート・サブネット:Prisub_10.0.1.0/24
    • インターネット・ゲートウェイ:IGW(パブリック・サブネットにアタッチ)
    • NATゲートウェイ:NGW(プライベート・サブネットにアタッチ)
  • ルート表​
    • パブリック・サブネット用:宛先CIDR:0.0.0.0/0,ターゲット:IGW​
    • プライベート・サブネット用:宛先CIDR:0.0.0.0/0,ターゲット:NGW​
  • ファイアウォール(今回はNSGで制御。セキュリティ・リストは空で設定)
    • ロード・バランサ用​
      • イングレス・ルール:ソースCIDR:0.0.0.0/0, プロトコル:TCP/80(HTTP)​
      • エグレス・ルール:宛先CIDR:0.0.0.0/0, プロトコル:全てのプロトコル
    • VM1・2用​
      • イングレス・ルール:ソースCIDR:10.0.0.0/24(パブリック・サブネット), プロトコル:TCP/80(HTTP)​
      • エグレス・ルール:宛先CIDR:0.0.0.0/0, プロトコル:全てのプロトコル

また、パブリック・サブネットに踏み台サーバ(Bastion)を作成、踏み台サーバ経由でワンライナーで接続します。

1. コンピュート・インスタンス2台(VM1・2)を作成

ここでは以下スペックを参考に、コンピュート・インスタンスを作成します。
※尚、時間の関係上VM1のみの作成とします。

  • OS:Oracle Linux 9
  • シェイプ:VM.Standard.E5.Flex
  • OCPU:1OCPU
  • メモリ:8GB
  • ストレージ:50GB

最初にOCIコンソールの左上のナビゲーション・メニューから「コンピュート」→「インスタンス」をそれぞれ選択します。
スクリーンショット 2025-03-19 10.51.50.png

インスタンスの作成」を選択します。
スクリーンショット 2025-03-19 10.58.05.png

以下項目をそれぞれ入力します。

  • 名前:VM1
  • フォルト・ドメイン:任意(ここではFD-1を使用)
    スクリーンショット 2025-03-19 11.00.26.png

イメージの変更」を選択してイメージを変更します。
スクリーンショット 2025-03-19 11.02.02.png

イメージの選択画面が表示されるので、「Oracle Linux 9」にチェックを入れ、「イメージの選択」を選択します。
スクリーンショット 2025-03-19 11.03.01.png

イメージの選択後、「Change Shape」を選択してシェイプを変更します。
スクリーンショット 2025-03-19 11.04.56.png

シェイプをそれぞれ適切な値に変更、「シェイプの選択」を選択します。
スクリーンショット 2025-03-19 11.07.46.png

以下項目をそれぞれ入力、「拡張オプションの表示」を選択します。

  • VCN:VCN_10.0.0.0/16
  • サブネット:Prisub_10.0.1.0/24
  • プライベートIPv4アドレス:10.0.1.2
    スクリーンショット 2025-03-19 11.jpg

ネットワーク・セキュリティ・グループを使用してトラフィックを制御」にチェックを入れ、「NSG-VM」を選択します。
スクリーンショット 2025-03-19 11.14.27.png

SSHキーの追加」でSSHキーを作成する場合は「キー・ペアの自動で生成」を、既存SSHキーを使用する場合は「公開キー・ファイル(.pub)のアップロード」をそれぞれ選択します。

カスタム・ブート・ボリューム・サイズを指定します」にチェックを入れ、ストレージのサイズを調整します。
スクリーンショット 2025-03-19 11.21.39.png

全ての項目の入力が終わった後、「作成」を選択します。
スクリーンショット 2025-03-19 11.22.46.png

2. 作成後、httpdを使用してVM1・2をWebサーバ化​

コンピュート・インスタンスの作成後、httpdをインストールしてWebサーバ化を行います。

最初に以下コマンドで踏み台サーバを経由してワンライナーでVM1にSSH接続を行います。

ssh -i <コンピュートのsshキーのパス> -o ProxyCommand='ssh -i <踏み台サーバのsshキーのパス> -W %h:%p opc@<踏み台サーバのパブリックIPアドレス>' opc@<コンピュートのプライベートIPアドレス>

VM1にログイン後、以下コマンドでOS側のファイアウォール(firewalld)の無効化を行います。

sudo systemctl stop firewalld

必要に応じて、firewalldの自動起動の無効化も以下コマンドで実行します。

sudo systemctl disable firewalld

今回はhttpdをインストールしてWebサーバ化を行います。

sudo dnf install -y httpd

実行ログの最後に以下の文が表示された場合、httpdのインストールは完了となります。

完了しました!

httpdの起動と、必要であれば自動起動の有効化も行います。

sudo systemctl start httpd
sudo systemctl enable httpd

以下コマンドでhttpdが起動しているか確認を行います。

sudo systemctl status httpd
実行結果
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Wed 2025-03-19 12:41:41 JST; 45s ago
       Docs: man:httpd.service(8)
   Main PID: 101087 (httpd)
     Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
      Tasks: 177 (limit: 47290)
     Memory: 21.8M
        CPU: 60ms
     CGroup: /system.slice/httpd.service
             ├─101087 /usr/sbin/httpd -DFOREGROUND
             ├─101088 /usr/sbin/httpd -DFOREGROUND
             ├─101089 /usr/sbin/httpd -DFOREGROUND
             ├─101090 /usr/sbin/httpd -DFOREGROUND
             └─101091 /usr/sbin/httpd -DFOREGROUND

 3月 19 12:41:41 vm1 systemd[1]: Starting The Apache HTTP Server...
 3月 19 12:41:41 vm1 systemd[1]: Started The Apache HTTP Server.
 3月 19 12:41:41 vm1 httpd[101087]: Server configured, listening on: port 80

httpdの場合、作成後に/var/www/htmlのディレクトリが自動作成されて、/html配下にWebコンテンツをアップロードしてWebサーバを作成する、といった流れとなります。
ここではドキュメントルートを表すindex.htmlに以下ファイルを格納して、擬似的なWebページを作成します。

最初に/var/www/htmlに移動します。

cd /var/www/html

移動後に以下コマンドでindex.htmlを作成、その下にある簡易的なWebサイト用ソースコードをペーストします。

sudo vim index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test Server</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
        }
        .container {
            text-align: center;
            background: white;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
        }
        h1 {
            color: #333;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>This is a test server 1.</h1>
    </div>
</body>
</html>

保存後、Webサーバの作成は完了となります。

ロード・バランサ用のパブリックIPアドレスを予約​

Webサーバを作成後、OCIコンソール画面に戻りロード・バランサ用のパブリックIPアドレスの予約を行います。

OCIコンソールの左上のナビゲーション・メニューから「ネットワーキング」→「予約済パブリックIP」をそれぞれ選択します。
スクリーンショット 2025-03-19 13.01.05.png

パブリックIPアドレスの予約」を選択します。
スクリーンショット 2025-03-19 13.02.16.png

任意のIPアドレス名(ここでは「IP-FLB」)を入力、「パブリックIPアドレスの予約」を選択します。
スクリーンショット 2025-03-19 13.03.36.png

作成したパブリックIPアドレスが表示されます。
スクリーンショット 2025-03-19 13.05.57.png

4. ロード・バランサを作成、バックエンド・セットにVM1・2を登録

パブリックIPアドレスを予約​後、ロード・バランサの作成を行います。
OCIコンソールの左上のナビゲーション・メニューから「ネットワーキング」→「ロード・バランサ」をそれぞれ選択します。
スクリーンショット 2025-03-19 14.45.58.png

ロード・バランサの作成」を選択します。
スクリーンショット 2025-03-19 14.49.38.png

ロード・バランサの作成詳細画面が表示されるので、以下の項目を入力して「」を選択します。

  • ロード・バランサ名:FLB
  • 可視性タイプ:パブリック
  • パブリックIPアドレスの割当て:予約済IPアドレス
  • 予約済IPアドレス:IP-FLB
  • 帯域幅:任意(ここでは最小・最大いずれも10Mbps)
  • 仮想クラウド・ネットワーク:VCN_10.0.0.0/16
  • サブネット:Pubsub_10.0.0.0/24
  • ネットワーク・セキュリティ・グループを使用してトラフィックを制御:有効
  • ネットワーク・セキュリティ・グループ:NSG-FLB
    ※他はデフォルトの設定値で問題ございません。

スクリーンショット 2025-03-19 14.53.35.png
スクリーンショット 2025-03-19 14.54.46.png
スクリーンショット 2025-03-19 14.58.21.png

続いてバックエンドの選択画面が表示されるので、以下の項目を入力、「バックエンド・サーバーの選択」を選択します。

  • ロード・バランシング・ポリシー:重み付けラウンドロビン
    スクリーンショット 2025-03-19 15.06.16.png

VM1とVM2をそれぞれ選択、「インスタンスの追加」を選択します。
スクリーンショット 2025-03-19 15.07.43.png

ヘルス・チェック・ポリシーの指定画面が表示されますが、ここではデフォルトの設定で問題ございません。
スクリーンショット 2025-03-19 15.09.52.png

その他設定画面が表示されるので、以下の項目を入力、「」を選択します。

  • バックエンド・セット名:任意(ここでは「BS-FLB」)
  • セキュリティ・リスト:バックエンド・サーバーの追加後にセキュリティ・リスト・ルールを手動で構成します
    ※他はデフォルトの設定値で問題ございません。
    スクリーンショット 2025-03-19 15.10.40.png

リスナーの作成画面が表示されるので、以下の項目を入力、「」を選択します。

  • リスナー名:任意(ここでは「LSTN-FLB」)
    スクリーンショット 2025-03-19 15.15.17.png

ロギングの管理画面が表示されますが、取得不要のため全て無効化を行い「」を選択します。
スクリーンショット 2025-03-19 15.17.06.png

最後に全ての設定の確認画面が表示されるので、問題がない場合は「送信」を選択します。
スクリーンショット 2025-03-19 15.19.33.png

ステータスが「作成中」→「アクティブ」になったのち、ロード・バランサの作成は完了となります。
スクリーンショット 2025-03-19 15.22.40.png

左下のリソースから「バックエンド・セット」→「BS-FLB」をそれぞれ選択してバックエンド・セットの状態を確認します。
スクリーンショット 2025-03-19 15.23.55.png

バックエンド・セットとして設定した2台(VM1・VM2)はいずれもヘルスが「OK」の状態となり、正常にヘルス・チェックが実行されています。
尚、バックエンド・セットで1台でも「クリティカル」になった場合、全体のヘルスも「クリティカル」の状態になります。
スクリーンショット 2025-03-19 15.26.16.png

5.動作確認

全ての設定が完了したので、動作確認を行います。
ブラウザにロード・バランサのパブリックIPアドレスを入力、設定したWebサイトが表示されれば検証は完了となります。
スクリーンショット 2025-03-19 15.48.17.png

尚、「保護されていない通信」と警告文が表示されていますが、HTTPでの通信を行っていることが原因です。
別途HTTPS通信も有効化することで上記警告文は表示されずに、Webサイトを表示できます。

また、更新を実施することでVM2に設定したWebサイトが表示され、ロード・バランシング・ポリシー(重み付けラウンド・ロビン)の設定が反映されていることがわかります。
スクリーンショット 2025-03-19 15.53.45.png

本検証については以上となります。

ロード・バランサのプライベートIPアドレスを確認する方法

補足で、ロード・バランサのプライベートIPアドレスを確認する方法についても紹介します。
ロード・バランサのプライベートIPアドレスは設定不可で、自動で割り当てられます。

バックエンドの詳細画面から、バックエンドに指定されているリソースの赤枠アイコンを選択、表示されているIPアドレスがロード・バランサのものとなっております。
スクリーンショット 2025-03-19 15.42.22.png

尚、IPアドレスが2つ表示されているのは、ロード・バランサが内部で冗長化されており、2つのロード・バランサからヘルス・チェックを実施しているためです。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?