チュートリアル: 仮想マシン スケール セットを作成して Linux に高可用性アプリをデプロイする

適用対象: ✔️ Linux VM ✔️ 均一スケール セット

仮想マシン スケール セットでは、フレキシブル オーケストレーションを使用して、負荷分散が行われる VM のグループを作成して管理できます。 需要または定義されたスケジュールに応じて、VM インスタンスの数を自動的に増減させることができます。

このチュートリアルでは、仮想マシン スケール セットを Azure にデプロイします。次の方法について説明します。

  • リソース グループを作成する。
  • ロード バランサーを使用してフレキシブル スケール セットを作成する。
  • Nginx をスケール セット インスタンスに追加する。
  • HTTP トラフィックに対してポート 80 を開く。
  • スケール セットをテストする。

スケール セットの概要

スケール セットには、次のような主な利点があります。

  • 複数の VM の作成と管理が容易である
  • 複数の障害ドメインに VM を分散することにより、高可用性とアプリケーションの回復性が提供される
  • リソースの需要の変化に応じた、アプリケーションの自動スケーリングを可能にする
  • 大規模に動作する

Azure ではフレキシブル オーケストレーションを使用することで、Azure VM エコシステム全体で統合されたエクスペリエンスを実現できます。 フレキシブル オーケストレーションでは、リージョン内の障害ドメインまたは可用性ゾーン内で VM を分散することで、(最大 1,000 個の VM まで) 高可用性を保証します。 これにより、以下のようなクォーラムベースまたはステートフル ワークロードを実行するのに欠かせない障害ドメインを分離したまま、アプリケーションをスケールアウトできます。

  • クォーラムベースのワークロード
  • オープンソース データベース
  • ステートフル アプリケーション
  • 高可用性と大きいスケールが必要なサービス
  • 仮想マシンの種類の混在、またはスポットとオンデマンドの VM の併用が求められるサービス
  • 既存の可用性セット アプリケーション

オーケストレーション モードでの均一スケール セットとフレキシブル スケール セットの違いについて確認してください。

スケール セットを作成する

Azure portal を使用してフレキシブル スケール セットを作成します。

  1. Azure Portalを開きます。
  2. [仮想マシン スケール セット] を検索して選択します。
  3. [仮想マシン スケール セット] ページで [作成] を選択します。 [仮想マシン スケール セットを作成する] が開きます。
  4. [サブスクリプション] で、使用するサブスクリプションを選択します。
  5. [リソース グループ] で、 [新規作成] を選択し、名前に「myVMSSRG」と入力して [OK] を選択します。 Project details.
  6. [仮想マシン スケール セットの名前] に、「myVMSS」と入力します。
  7. [地域] で、 [米国東部] のように、自分の地域に近いリージョンを選択します。 Name and region.
  8. この例では、 [可用性ゾーン] は空白のままにします。
  9. [オーケストレーション モード] で、 [フレキシブル] を選択します。
  10. [Fault domain count](障害ドメイン数) は、既定値の [1] のままにするか、ドロップダウンから別の値を選択します。 Choose Flexible orchestration mode.
  11. [イメージ]に、[Ubuntu 18.04 LTS] を選択します。
  12. [サイズ] は、既定値のままにするか、[Standard_E2s_V3] のようにサイズを選択します。
  13. [ユーザー名] に「azureuser」と入力します。
  14. [SSH public key source](SSH 公開キー ソース) では、 [新しいキー ペアの生成] を既定値のまま残し、 [Key pair name](キー ペアの名前) に「myKey」と入力します。 Screenshot of the Administrator account section where you select an authentication type and provide the administrator credentials.
  15. [ネットワーク] タブの [負荷分散] で、 [ロード バランサーを使用する] を選択します。
  16. [負荷分散のオプション ] は、既定の [Azure load balancer](Azure ロード バランサー) のままにします。
  17. [ロード バランサーを選択します] で、 [Create new](新規作成) を選択します。 Load balancer settings.
  18. [Create a load balancer](ロードバランサーの作成) ページで、ロード バランサーの名前とパブリック IP アドレス名を入力します。
  19. [ドメイン名ラベル] には、ドメイン名のプレフィックスとして使用する名前を入力します。 この名前は一意である必要があります。
  20. 完了したら、 [作成] を選択します。 Create a load balancer.
  21. [ネットワーク] タブに戻り、バックエンド プールの既定の名前をそのまま使用します。
  22. [スケーリング] タブで、インスタンス数を既定の [2] のままにするか、独自の値を追加します。 これは、作成される VM の数です。この値を変更した場合は、サブスクリプションのコストと制限に注意してください。
  23. スケーリング ポリシー は、 [手動] に選択されたままにします。 Scaling policy settings.
  24. [詳細] タブを選択します。
  25. [Custom data and cloud init](カスタム データと cloud-init) で以下をコピーして [Custom data](カスタム データ) テキスト ボックスに貼り付けます。
    #cloud-config
    package_upgrade: true
    packages:
      - nginx
      - nodejs
      - npm
    write_files:
      - owner: www-data:www-data
      - path: /etc/nginx/sites-available/default
        content: |
          server {
            listen 80;
            location / {
              proxy_pass http://localhost:3000;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection keep-alive;
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
            }
          }
      - owner: azureuser:azureuser
      - path: /home/azureuser/myapp/index.js
        content: |
          var express = require('express')
          var app = express()
          var os = require('os');
          app.get('/', function (req, res) {
            res.send('Hello World from host ' + os.hostname() + '!')
          })
          app.listen(3000, function () {
            console.log('Hello world app listening on port 3000!')
          })
    runcmd:
      - service nginx restart
      - cd "/home/azureuser/myapp"
      - npm init
      - npm install express -y
      - nodejs index.js
    
  26. 完了したら、 [確認および作成] を選択します。
  27. 検証が成功したことを確認したら、ページの下部にある [作成] を選択してスケール セットをデプロイできます。
  28. [新しいキー ペアの生成] ウィンドウが開いたら、 [Download private key and create resource](秘密キーをダウンロードし、リソースを作成する) を選択します。 キー ファイルは myKey.pem としてダウンロードされます。 .pem ファイルがダウンロードされた場所を必ず把握してください。そのパスが次の手順で必要になります。
  29. デプロイが完了したら、[リソースに移動] を選択し、スケール セットを表示します。

スケール セット内の VM を表示する

スケール セットのページで、左側のメニューから [インスタンス] を選択します。

スケール セットの一部である VM の一覧が表示されます。 この一覧の内容:

  • VM の名前
  • VM によって使用されるコンピューター名。
  • VM の現在の状態 (例: [実行中] )。
  • VM の [プロビジョニングの状態] (例: [Succeeded](成功) )。

Table of information about the scale set instances.

ポート 80 を開く

ネットワーク セキュリティ グループ (NSG) に受信規則を追加して、スケール セットのポート 80 を開きます。

  1. スケール セットのページで、左側のメニューから [ネットワーク] を選択します。 [ネットワーク] ページが開きます。
  2. [受信ポートの規則を追加する] を選択します。 [受信セキュリティ規則の追加] ページが開きます。
  3. [サービス][HTTP] を選択し、ページの下部にある [追加] を選択します。

スケール セットのテスト

ブラウザーからスケールセットに接続してテストします。

  1. スケールセットの [概要] ページで、パブリック IP アドレスをコピーします。
  2. ブラウザーで別のタブを開いて、アドレス バーにその IP アドレスを貼り付けます。
  3. ページが読み込まれたら、表示されているコンピューター名をメモしておきます。
  4. コンピューター名の変更が反映されるまでページを更新します。

スケール セットの削除

完了したら、リソース グループを削除する必要があります。これにより、スケール セットにデプロイしたすべてのものが削除されます。

  1. スケール セットのページで、[リソース グループ] を選択します。 自分のリソース グループのページが開きます。
  2. ページの上部で [リソース グループの削除] を選択します。
  3. [削除しますか] ページで、リソース グループの名前を入力し、[削除] を選択します。

次のステップ

このチュートリアルでは、仮想マシン スケール セットを作成しました。 以下の方法を学習しました。

  • リソース グループを作成する。
  • ロード バランサーを使用してフレキシブル スケール セットを作成する。
  • Nginx をスケール セット インスタンスに追加する。
  • HTTP トラフィックに対してポート 80 を開く。
  • スケール セットをテストする。

次のチュートリアルでは、仮想マシンでの負荷分散の概念について詳しく説明します。