Microsoft Azure での RHEL のデプロイと管理


Red Hat Enterprise Linux 10

RHEL システムイメージの取得と Azure 上での RHEL インスタンスの作成

Red Hat Customer Content Services

概要

Microsoft Azure で Red Hat Enterprise Linux (RHEL) を使用するには、RHEL システムイメージを作成してデプロイします。
これには以下も含まれます:
  • Azure での RHEL イメージの登録、デプロイ、プロビジョニング
  • RHEL Azure 仮想マシン (VM) のネットワーク設定の管理
  • プラットフォームセキュリティーと信頼できる実行テクノロジーの設定
  • RHEL インスタンスの Red Hat High Availability (HA) クラスターの管理

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 パブリッククラウドプラットフォームでの RHEL の導入

パブリッククラウドプラットフォームは、コンピューティングリソースをサービスとして提供します。オンプレミスのハードウェアを使用する代わりに、Red Hat Enterprise Linux (RHEL) システムなどの IT ワークロードをパブリッククラウドインスタンスとして実行できます。

1.1. パブリッククラウドで RHEL を使用する利点

パブリッククラウドプラットフォーム上に配置されたクラウドインスタンスとしての RHEL には、RHEL オンプレミスの物理システムまたは仮想マシン (VM) に比べて次の利点があります。

リソースの柔軟性と詳細な割り当て

RHEL のクラウドインスタンスは、クラウドプラットフォーム上の仮想マシンとして実行されます。この仮想マシンは、クラウドサービスプロバイダーによって維持管理されるリモートサーバーのクラスターです。したがって、ソフトウェアレベルでは、特定の種類の CPU やストレージをはじめとするハードウェアリソースのインスタンスへの割当は、簡単にカスタマイズできます。

また、ローカルの RHEL システムと比較すると、物理ホストの機能によって制限されることがありません。むしろ、クラウドプロバイダーが提供する選択肢に基づいて、さまざまな機能から選択できます。

領域とコスト効率

クラウドワークロードをホストするためにオンプレミスサーバーを所有する必要がありません。これにより、物理ハードウェアに関連するスペース、電力、メンテナンスの要件が回避されます。

代わりに、パブリッククラウドプラットフォームでは、クラウドインスタンスの使用料をクラウドプロバイダーに直接支払います。通常、コストはインスタンスに割り当てられたハードウェアとその使用時間に基づきます。したがって、要件に基づいてコストを最適化できます。

ソフトウェアで制御される設定

クラウドインスタンスの設定は、すべてクラウドプラットフォーム上にデータとして保存し、ソフトウェアで制御します。したがって、インスタンスの作成、削除、クローン作成、または移行を簡単に行うことができます。また、クラウドインスタンスは、クラウドプロバイダーのコンソールでリモートで操作され、デフォルトでリモートストレージに接続されます。

さらに、クラウドインスタンスの現在の状態をいつでもスナップショットとしてバックアップできます。その後、スナップショットをロードしてインスタンスを保存した状態に復元できます。

ホストからの分離とソフトウェアの互換性

ローカルの仮想マシンと同様に、クラウドインスタンス上の RHEL ゲストオペレーティングシステムは Kernel-based Virtual Machine (KVM) 上で実行されます。このカーネルは、ホストオペレーティングシステムや、インスタンスへの接続に使用する クライアント システムとは別のものです。

したがって、任意のオペレーティングシステムをクラウドインスタンスにインストールできます。つまり、RHEL パブリッククラウドインスタンスでは、ローカルオペレーティングシステムでは使用できない RHEL 固有のアプリケーションを実行できます。

さらに、インスタンスのオペレーティングシステムが不安定になったり侵害されたりした場合でも、クライアントシステムには一切影響がありません。

1.2. RHEL のパブリッククラウドのユースケース

パブリッククラウドへのデプロイには多くの利点がありますが、すべてのシナリオにおいて最も効率的なソリューションであるとは限りません。RHEL デプロイメントをパブリッククラウドに移行するかどうかを評価している場合は、ユースケースがパブリッククラウドの利点を享受できるかどうかを検討してください。

有益なユースケース
  • パブリッククラウドインスタンスのデプロイは、デプロイメントのアクティブなコンピューティング能力を柔軟に増減する (スケールアップ および スケールダウン とも呼ばれます) 場合に非常に効果的です。したがって、次の状況ではパブリッククラウド上で RHEL を使用できます。

    • ピーク時のワークロードが高く、一般的なパフォーマンス要件が低いクラスター。要求に応じてスケールアップおよびスケールダウンすることで、リソースコストの面で高い効率が得られる場合があります。
    • クラスターを迅速にセットアップまたは拡張できます。これにより、ローカルサーバーのセットアップにかかる高額な初期費用が回避されます。
  • クラウドインスタンスは、ローカル環境で何が起こっても影響を受けません。したがって、バックアップや障害復旧に使用できます。
問題が発生する可能性のあるユースケース
  • 調整不可能な既存の環境を運用している場合。既存デプロイメントの特定のニーズに合わせてクラウドインスタンスをカスタマイズすることは、現在のホストプラットフォームと比較して経済的でない可能性があります。
  • 厳しい予算制限の中で運用している場合。通常、ローカルデータセンターでデプロイメントを維持管理すると、パブリッククラウドよりも柔軟性は低くなりますが、最大リソースコストをより細かく制御できます。

パブリッククラウドデプロイメント用の RHEL を入手する方法の詳細は、パブリッククラウドデプロイメント用の RHEL の入手 を参照してください。

1.3. パブリッククラウドへの移行時によくある懸念事項

RHEL ワークロードをローカル環境からパブリッククラウドプラットフォームに移行すると、それに伴う変更に懸念が生じる可能性があります。よくある質問は次のとおりです。

RHEL は、クラウドインスタンスとして動作する場合、ローカル仮想マシンとして動作する場合とは異なる動作になりますか?

パブリッククラウドプラットフォーム上の RHEL インスタンスは、ほとんどの点で、オンプレミスサーバーなどのローカルホスト上の RHEL 仮想マシンと同じように機能します。注目すべき例外には次のようなものがあります。

  • パブリッククラウドインスタンスは、プライベートオーケストレーションインターフェイスの代わりに、プロバイダー固有のコンソールインターフェイスを使用してクラウドリソースを管理します。
  • ネストされた仮想化などの特定の機能が正しく動作しない可能性があります。特定の機能がデプロイメントにとって重要な場合は、選択したパブリッククラウドプロバイダーとその機能の互換性を事前に確認してください。
ローカルサーバーと比べて、パブリッククラウドではデータは安全に保たれますか?

RHEL クラウドインスタンス内のデータの所有権はユーザーにあり、パブリッククラウドプロバイダーはデータにアクセスできません。さらに、主要なクラウドプロバイダーは転送中のデータ暗号化をサポートしているため、仮想マシンをパブリッククラウドに移行する際のデータのセキュリティーが向上します。

RHEL パブリッククラウドインスタンスのセキュリティーに関しては、以下が適用されます。

  • パブリッククラウドプロバイダーは、クラウドハイパーバイザーのセキュリティーを担当します。
  • Red Hat は、RHEL ゲストオペレーティングシステムのセキュリティー機能をインスタンスに提供します。
  • ユーザーは、クラウドインフラストラクチャーにおける特定のセキュリティー設定とプラクティスを管理します。
ユーザーの地理的リージョンは、RHEL パブリッククラウドインスタンスの機能にどのように影響しますか?
RHEL インスタンスは、地理的な場所に関係なく、パブリッククラウドプラットフォームで使用できます。したがって、オンプレミスサーバーと同じリージョンでインスタンスを実行できます。ただし、物理的に離れたリージョンでインスタンスをホストすると、操作時に待ち時間が長くなる可能性があります。さらに、パブリッククラウドプロバイダーによっては、特定のリージョンで、追加機能が提供される場合や、より高いコスト効率が得られる場合があります。RHEL インスタンスを作成する前に、選択したクラウドプロバイダーで利用可能なホスティングリージョンのプロパティーを確認してください。

1.4. パブリッククラウドデプロイメント用の RHEL の入手

RHEL システムをパブリッククラウド環境にデプロイするには、次の手順を実行する必要があります。

  • 要件と市場の現在のオファーに基づいて、ユースケースに最適なクラウドプロバイダーを選択します。RHEL インスタンスを実行するための認定クラウドサービスプロバイダー (CCSP) は次のとおりです。

  • 選択したクラウドプラットフォーム上に RHEL クラウドインスタンスを作成します。詳細は、RHEL クラウドインスタンスを作成する方法 を参照してください。
  • RHEL デプロイメントを最新の状態に保つには、Red Hat Update Infrastructure (RHUI) を使用します。

1.5. RHEL クラウドインスタンスを作成する方法

RHEL インスタンスをパブリッククラウドプラットフォームにデプロイするには、次のいずれかの方法を使用できます。

RHEL システムイメージを作成してクラウドプラットフォームにインポートする
  • システムイメージを作成するには、RHEL Image Builder を使用するか、イメージを手動でビルドします。
  • これは既存の RHEL サブスクリプションを使用する方法で、bring your own subscription (BYOS) とも呼ばれます。
  • 年間サブスクリプションを前払いすると、Red Hat お客様割引を利用できます。
  • Red Hat がカスタマーサービスを提供します。
  • 多くのイメージを効率的に作成するには、cloud-init ツールを使用できます。
RHEL インスタンスをクラウドプロバイダーマーケットプレイスから直接購入する
  • サービスの利用に対して時間料金を後払いで支払います。したがって、この方法は 従量課金制 (PAYG) とも呼ばれます。
  • クラウドプラットフォームプロバイダーがカスタマーサービスを提供します。
注記

さまざまな方法を使用して Microsoft Azure に RHEL インスタンスをデプロイする詳細な手順は、このドキュメントの次の章を参照してください。

第2章 VHD イメージを準備して Microsoft Azure にアップロードする

RHEL Image Builder を使用すると、カスタムイメージを作成し、そのイメージを手動または自動で Microsoft Azure クラウドにアップロードできます。

2.1. Microsoft Azure VHD イメージを手動でアップロードする準備

Microsoft Azure クラウドに手動でアップロードできる VHD イメージを作成するには、RHEL Image Builder を使用できます。

前提条件

  • Microsoft Azure リソースグループとストレージアカウントがある。
  • Python がインストールされている。AZ CLI ツールは Python に依存しています。

手順

  1. Microsoft リポジトリーキーをインポートします。

    $ sudo rpm --import https://packages.microsoft.com/keys/microsoft-2025.asc
  2. packages-microsoft-com-prod リポジトリーを作成します。

    [azure-cli]
    name=Azure CLI
    baseurl=https://packages.microsoft.com/yumrepos/packages.microsoft.com/rhel/10/prod/
    enabled=1
    gpgcheck=1
    gpgkey=https://packages.microsoft.com/keys/microsoft.asc
  3. Microsoft Azure CLI をインストールします。ダウンロードした Microsoft Azure CLI パッケージのバージョンは、現在利用可能なバージョンによって異なる場合があります。

    $ sudo dnf install azure-cli
  4. Microsoft Azure CLI を実行します。

    $ az login

    ターミナルに次のメッセージが表示されます。Note, we have launched a browser for you to login. For old experience with device code, use az login --use-device-code。その後、ターミナルで Login 画面が開き、そこからログインできるようになります。

    注記

    リモート (SSH) セッションを実行している場合、ログインページのリンクがブラウザーで開きません。この場合、リンクをブラウザーにコピーしてログインし、リモートセッションを認証できます。サインインするには、Web ブラウザーを使用して Login ページを開き、デバイスコードを入力して認証してください。

  5. Microsoft Azure のストレージアカウントのキーをリスト表示し、コマンドの出力から key1 の値をメモします。

    $ az storage account keys list --resource-group <resource_group_name> --account-name <account_name>

    resource-group-name は、Microsoft Azure リソースグループの名前に、storage-account-name は Microsoft Azure ストレージアカウントの名前に置き換えます。

    1. 利用可能なリソースをリスト表示するには、次のコマンドを使用します。

      $ az resource list
  6. ストレージコンテナーを作成します。

    $ az storage container create --account-name <storage_account_name> \
    --account-key <key1_value> --name <storage_account_name>

    storage-account-name はストレージアカウントの名前に置き換えます。

2.2. VHD イメージを Microsoft Azure クラウドに手動でアップロードする

カスタマイズした VHD イメージを作成したら、それを手動で Microsoft Azure クラウドにアップロードできます。CLI を使用して .vhd イメージを作成すると、RHEL Image Builder は /var サブディレクトリーに一時ファイルを書き込みます。

.vhd イメージの作成失敗を防ぐために、/var サブディレクトリーの容量を増やし、少なくとも 15 - 20 GB の空き領域を確保してください。

前提条件

  • Microsoft Azure VHD イメージをアップロードするようにシステムをセットアップしている。
  • RHEL Image Builder で Microsoft Azure VHD イメージを作成している。

    • GUI で、Azure Disk Image (.vhd) イメージタイプを使用します。
    • CLI で、vhd 出力タイプを使用します。

手順

  1. イメージをビルドします。

    $ image-builder build <image-type>
  2. イメージを Microsoft Azure にプッシュし、そこからインスタンスを作成します。

    $ az storage blob upload --account-name account_name --container-name container_name --file image_disk.vhd --name image-disk.vhd --type page
  3. Microsoft Azure Blob ストレージへのアップロードが完了したら、そこから Microsoft Azure イメージを作成します。RHEL Image Builder で作成したイメージは、V1 = BIOSV2 = UEFI の両方のインスタンスタイプをサポートするハイブリッドイメージとして生成されます。そのため、--hyper-v-generation 引数を指定できます。デフォルトのインスタンスタイプは V1 です。

    $ az image create --resource-group resource_group_name --name image-disk.vhd --os-type linux --location location \
    --source https://$account_name.blob.core.windows.net/container_name/image-disk.vhd
    - Running

検証

  1. Microsoft Azure portal または次のようなコマンドを使用してインスタンスを作成します。

    $ az vm create --resource-group resource_group_name --location location --name vm_name --image image-disk.vhd(--admin-username azure-user --generate-ssh-keys*
    - Running
  2. SSH を使用して秘密鍵を使用し、作成したインスタンスにアクセスします。azure-user としてログインします。このユーザー名は前のステップで設定したものです。

2.3. VHD イメージを作成して Microsoft Azure クラウドに自動的にアップロードする

RHEL Image Builder を使用すると、Microsoft Azure クラウドサービスプロバイダーの Azure Blob Storage に自動的にアップロードされる .vhd イメージを作成できます。

前提条件

手順

  1. RHEL Image Builder ダッシュボードで、使用するブループリントを選択します。
  2. Images タブをクリックします。
  3. Create Image をクリックして、カスタマイズした .vhd イメージを作成します。

    Create image ウィザードが開きます。

    1. Type ドロップダウンメニューリストから Microsoft Azure (.vhd) を選択します。
    2. イメージを Microsoft Azure クラウドにアップロードするには、Upload to Azure チェックボックスをオンします。
    3. Image Size を入力し、Next をクリックします。
  4. Upload to Azure ページで、次の情報を入力します。

    1. 認証ページで、次のように入力します。

      1. Storage account の名前。Microsoft Azure portalStorage account ページにあります。
      2. Storage access key: これは、Access Key ストレージページにあります。
      3. Next をクリックします。
    2. Authentication ページで、次のように入力します。

      1. イメージ名
      2. Storage container。これは、イメージのアップロード先の Blob コンテナーです。Microsoft Azure portalBlob service セクションにあります。
      3. Next をクリックします。
  5. Review ページで Create をクリックします。RHEL Image Builder が起動し、アップロードプロセスが開始します。

    Microsoft Azure Cloud にプッシュしたイメージにアクセスします。

  6. Microsoft Azure portal にアクセスします。
  7. 検索バーに "storage account" と入力し、リストから Storage accounts をクリックします。
  8. 検索バーに "Images" と入力し、Services の下にある最初のエントリーを選択します。Image dashboard にリダイレクトされます。
  9. ナビゲーションパネルで、Containers をクリックします。
  10. 作成したコンテナーを見つけます。コンテナー内には、RHEL Image Builder を使用して作成およびプッシュした .vhd ファイルがあります。

検証

  1. 仮想マシンイメージを作成して起動できることを確認します。

    1. 検索バーに images account と入力し、リストから Images をクリックします。
    2. +Create をクリックします。
    3. ドロップダウンリストから、前に使用したリソースグループを選択します。
    4. イメージの名前を入力します。
    5. OS typeLinux を選択します。
    6. VM generationGen 2 を選択します。
    7. Storage BlobBrowse をクリックし、VHD ファイルに到達するまでストレージアカウントとコンテナーをクリックします。
    8. ページの最後にある Select をクリックします。
    9. Account Type を選択します (例: Standard SSD)
    10. Review + Create をクリックし、Create をクリックします。イメージが作成されるまでしばらく待機します。
  2. 仮想マシンを起動するには、次の手順に従います。

    1. Go to resource をクリックします。
    2. ヘッダーのメニューバーから + Create VM をクリックします。
    3. 仮想マシンの名前を入力します。
    4. Size セクションと Administrator account セクションに入力します。
    5. Review + Create をクリックし、Create をクリックします。デプロイメントの進行状況を確認できます。

      デプロイメントが完了したら、仮想マシン名をクリックしてインスタンスのパブリック IP アドレスを取得し、SSH を使用して接続します。

    6. ターミナルを開いて SSH 接続を作成し、仮想マシンに接続します。

第3章 RHEL イメージを Azure 上のコンピュートインスタンスとしてデプロイする

Microsoft Azure) で RHEL イメージを使用するには、イメージを Azure 互換形式に変換し、イメージから仮想マシンをデプロイして Azure コンピュート仮想マシンとして実行します。RHEL 仮想ハードドライブ (VHD) を Azure ディスクイメージ形式として作成、カスタマイズ、およびデプロイするには、次のいずれかの方法を使用できます。

  • RHEL Image Builder を使用します。手順は、VHD イメージを準備して Microsoft Azure にアップロードする を参照してください。
  • VHD を手動で作成して設定します。これはより複雑なプロセスですが、より詳細なカスタマイズオプションを使用できます。詳細は、次のセクションを参照してください。

始める前に、次の手順を必ず完了してください。

3.1. パブリッククラウドで利用可能な RHEL イメージタイプ

認定クラウドサービスプロバイダー (CCSP) に RHEL 仮想マシンをデプロイするには、いくつかの方法を使用できます。次の表に、使用可能なイメージタイプ、サブスクリプション、留意事項、イメージタイプのサンプルシナリオを示します。

注記

カスタマイズされた ISO イメージをデプロイするには、RHEL Image Builder を使用できます。RHEL Image Builder を使用すると、選択した CCSP に特化したカスタムイメージを作成、アップロード、およびデプロイできます。詳細は、RHEL システムイメージのカスタマイズ を参照してください。

Expand
表3.1 イメージオプション
イメージタイプサブスクリプション留意事項サンプルシナリオ

Red Hat ゴールドイメージをデプロイする

既存の Red Hat サブスクリプションを使用する

サブスクリプションには、Red Hat 製品コストと Cloud Access イメージのサポートが含まれており、その他のインスタンスコストはすべて CCSP に支払います。

CCSP で Red Hat ゴールドイメージを選択します。ゴールドイメージの詳細と CCSP でのアクセス方法は、Red Hat Cloud Access リファレンスガイド を参照してください。

CCSP に移動するカスタムイメージをデプロイする

既存の Red Hat サブスクリプションを使用する

サブスクリプションには、Red Hat 製品のコストとカスタム RHEL イメージのサポートが含まれており、その他のインスタンスコストはすべて CCSP に支払います。

カスタムイメージをアップロードし、サブスクリプションを割り当てます。

既存の RHEL ベースのカスタムマシンイメージをデプロイする

カスタムマシンイメージには RHEL イメージが含まれる

従量課金 モデルに基づき、CCSP に時間単位で支払います。このモデルの場合、オンデマンドイメージは CCSP マーケットプレイスで入手できます。CCSP はこれらのイメージに対するサポートを提供し、Red Hat が更新を処理します。CCSP は Red Hat Update Infrastructure (RHUI) を通じて更新を提供します。

CCSP クラウド管理コンソールでインスタンスを起動するときに RHEL イメージを選択するか、CCSP マーケットプレイスからイメージを選択します。

重要

オンデマンドインスタンスをカスタム RHEL インスタンスに変換することはできません。オンデマンドイメージからカスタム RHEL Bring Your Own Subscription (BYOS) イメージに移行するには、次の手順を実行してください。

  • 新しいカスタム RHEL インスタンスを作成し、その後、オンデマンドインスタンスからデータを移行します。
  • データ移行が完了したら、追加の課金を避けるためにオンデマンドインスタンスを終了します。

3.2. 必要なシステムパッケージ

RHEL の基本イメージを作成して設定するには、ホストシステムに次のパッケージがインストールされている必要があります。

Expand
表3.2 システムパッケージ
パッケージリポジトリー説明

libvirt

rhel-10-for-x86_64-appstream-rpms

プラットフォーム仮想化を管理するためのオープンソース API、デーモン、および管理ツール。

virt-install

rhel-10-for-x86_64-appstream-rpms

仮想マシンを構築するためのコマンドラインユーティリティー

libguestfs

rhel-10-for-x86_64-appstream-rpms

仮想マシンファイルシステムにアクセスして変更するためのライブラリー

guestfs-tools

rhel-10-for-x86_64-appstream-rpms

仮想マシン用のシステム管理ツール。virt-customize ユーティリティーが含まれています

上記のシステムパッケージのインストールを確認したら、カスタムベースイメージを使用して RHEL インスタンスをデプロイする のデプロイ手順を実行できます。

3.3. カスタムベースイメージを使用して RHEL インスタンスをデプロイする

仮想マシンを手動で設定するには、まずベース (スターター) となる仮想マシンイメージを作成します。続いて、設定を変更して、仮想マシンがクラウドで動作するために必要なパッケージを追加できます。イメージのアップロード後に、特定のアプリケーションに追加の設定変更を行うこともできます。

RHEL のクラウドイメージを準備するには、以下のセクションの手順に従います。RHEL の Hyper-V クラウドイメージを準備するには、Hyper-V Manager から Red Hat ベースの仮想マシンの準備 を参照してください。

ベースイメージから仮想マシンを作成する場合、次の利点があります。

  • 完全にカスタマイズ可能
  • あらゆるユースケースに対応する高い柔軟性
  • 軽量 - オペレーティングシステムと必須のランタイムライブラリーのみが含まれます

ISO イメージから RHEL のカスタムベースイメージを作成するには、コマンドラインインターフェイス (CLI) または Web コンソールを使用して仮想マシンを作成および設定します。

注記

次の仮想マシン設定を確認してください。

最初の仮想マシン作成時、または Azure クラウドへの仮想マシンイメージを提供時に、設定が有効になります。

  • SSH - SSH を有効にして仮想マシンへのリモートアクセスを許可します。
  • DHCP - DHCP を使用するようにプライマリー仮想アダプターを設定します。
  • スワップ領域 - インストール中に、オペレーティングシステム (OS) ディスクまたはストレージディスクに専用のスワップファイルまたは swap パーティションを作成しないでください。仮想マシンのエフェメラルディスクに swap パーティションを自動的に作成するように cloud-init ユーティリティーを設定してください。エフェメラルディスクは仮想マシンのローカルストレージです。一方、リソースディスクは仮想マシン自体にマウントされるストレージです。どちらのタイプのストレージもデータを一時的に保存します。
  • NIC - プライマリー仮想ネットワークアダプター用に virtio を選択します。
  • Encryption - カスタムイメージの場合には、Azure で完全なディスク暗号化に Network Bound Disk Encryption (NBDE) を使用します。

前提条件

  • 必要なシステムパッケージのリスト を確認した。
  • ホストマシンで 仮想化を有効化 した。
  • Web コンソールの場合は、次のオプションを確認する。
  • Immediately Start VM オプションは選択していない。
  • Memory サイズを必要な設定に変更した。
  • Virtual Network Interface SettingsModel オプションを virtio に変更し、vCPUs を仮想マシンの容量設定に変更した。

手順

  1. Red Hat Enterprise Linux (RHEL) 仮想マシンを設定します。

    1. コマンドライン (CLI) からインストールするには、仮想マシンの要件に応じて、デフォルトのメモリー、ネットワークインターフェイス、CPU が設定されていることを確認します。詳細は、コマンドラインを使用した仮想マシンの作成 を参照してください。
    2. Web コンソールからインストールするには、Web コンソールを使用した仮想マシンの作成 を参照してください。
  2. インストールが開始されたら、以下を実行します。

    1. root のパスワードを作成します。
    2. 管理者ユーザーアカウントを作成します。
  3. インストールが完了してから、仮想マシンを再起動して root アカウントにログインします。
  4. root としてログインすると、イメージを設定できます。
  5. 仮想マシンを登録し、RHEL リポジトリーを有効にします。

    # subscription-manager register

検証

  • システムに cloud-init パッケージがあるかどうかを確認し、有効にします。

    # dnf install cloud-init
    # systemctl enable --now cloud-init.service
  • 仮想マシンの電源をオフにします。

次のステップ

  • Azure リソースとサービスにアクセスするには、Azure CLI をインストールします。

3.4. Azure CLI のインストール

Azure コマンドラインインターフェイス (CLI) を使用すると、Azure クラウドに接続し、ホストターミナルから直接 Azure リソースを管理できます。

前提条件

手順

  1. Microsoft リポジトリーキーをインポートします。

    $ sudo dnf --import https://packages.microsoft.com/keys/microsoft.asc
  2. ローカル Azure CLI リポジトリーエントリーを作成します。

    $ sudo sh -c 'echo -e "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'
  3. dnf パッケージインデックスを更新します。

    $ sudo dnf update
  4. Azure CLI をインストールします。

    $ sudo dnf install -y azure-cli
  5. Azure CLI を実行します。

    $ az login

次のステップ

3.5. Hyper-V デバイスドライバーのインストール

Microsoft は、Linux Integration Services (LIS) for Hyper-V パッケージの一部として、ネットワークおよびストレージデバイスのドライバーを提供しています。仮想マシンイメージを Azure 仮想マシンとしてプロビジョニングする前に、Hyper-V デバイスドライバーをインストールします。

前提条件

  • Azure CLI がインストールされている。

手順

  1. システムに Hyper-V デバイスドライバーがあるかどうかを確認します。

    # lsinitrd | grep hv
    
    drwxr-xr-x   2 root     root            0 Aug 12 14:21 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/hv
    -rw-r--r--   1 root     root        31272 Aug 11 08:45 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/hv/hv_vmbus.ko.xz
    -rw-r--r--   1 root     root        25132 Aug 11 08:46 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/net/hyperv/hv_netvsc.ko.xz
    -rw-r--r--   1 root     root         9796 Aug 11 08:45 usr/lib/modules/3.10.0-932.el10.x86_64/kernel/drivers/scsi/hv_storvsc.ko.xz

    すべてのドライバーがインストールされていない場合、または hv_vmbus ドライバーがリストされない場合は、残りのステップを完了します。

  2. /etc/dracut.conf.d ディレクトリーに hv.conf ファイルを作成し、次のドライバーパラメーターを追加します。

    # vi hv.conf
    
    add_drivers+=" hv_vmbus "
    add_drivers+=" hv_netvsc "
    add_drivers+=" hv_storvsc "
    add_drivers+=" nvme "

    環境内に他の Hyper-V ドライバーがすでに存在する場合に備えて、一意のドライバーをロードするために、二重引用符の前後にスペースを追加してください (add_drivers+=" hv_vmbus ")。

  3. initramfs イメージを再生成します。

    # dracut -f -v --regenerate-all

検証

  1. マシンを再起動します。
  2. ドライバーのインストールを確認します。

    # lsinitrd | grep hv

次のステップ

3.6. Azure 上の cloud-init を使用したスワップ領域の設定

Microsoft Azure 上の Red Hat Enterprise Linux (RHEL) 仮想マシン (VM) でスワップ領域を使用するには、エフェメラルディスクにスワップパーティションを作成する必要があります。スワップパーティションを作成する場合は、オペレーティングシステムディスクやデータ (ストレージ) ディスクではなく、エフェメラルディスクのみを使用してください。仮想マシンを削除するとエフェメラルディスクが削除されるため、スワップパーティションも削除されます。

cloud-init ユーティリティーを使用して、エフェメラルディスク上にスワップパーティションを必要に応じて設定できます。エフェメラルディスクは仮想マシンのローカルストレージです。一方、リソースディスクは仮想マシン自体にマウントされるストレージです。どちらのタイプのストレージもデータを一時的に保存します。仮想マシンを削除、移動、停止するか、仮想マシンに障害が発生すると、エフェメラルディスクまたはリソースディスクに保存されているデータが失われます。

重要

永続データにはエフェメラルディスクを使用しないでください。仮想マシンが停止または移動すると、スワップパーティションを含むすべての内容が削除されます。

前提条件

  • 仮想マシンに cloud-init ユーティリティーをインストールした。
  • /etc/waagent.conf ファイルでパラメーターを設定して、Windows Azure Linux エージェント (WALA) のスワップ設定を無効にした。

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    ResourceDisk.SwapSizeMB=0
  • 仮想マシン上でエフェメラルディスクが使用可能である。

手順

  1. 仮想マシンにログインします。
  2. /etc/cloud/cloud.cfg.d/00-azure-swap.cfg 設定ファイルを作成して編集し、次の cloud-init 設定をファイルに追加します。

    # vi /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
    #cloud-config
    disk_setup:
      ephemeral0:
        table_type: gpt
        layout: [66, [33,82]]
        overwrite: true
    fs_setup:
      - device: ephemeral0.1
        filesystem: ext4
      - device: ephemeral0.2
        filesystem: swap
    mounts:
      - ["ephemeral0.1", "/mnt"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service", "0", "0"]

    この設定の内容は次のとおりです。

    • GPT パーティションテーブルを使用して、エフェメラルディスク (ephemeral0) にパーティションを作成します。
    • 2 つのパーティションを作成します。66% はファイルシステム用 (/mnt にマウント)、33% は swap 領域用です。
    • 最初のパーティションを ext4 としてフォーマットし、2 番目のパーティションを swap としてフォーマットします。
    • 両方のパーティションを起動時に自動マウントするように設定します。

      注記

      パーティションレイアウト [66, [33,82]] は、ディスクの 66% を最初のパーティションに割り当て、33% を 2 番目のパーティションに割り当てます。2 番目のパーティション仕様の 82 は、Linux スワップパーティションのタイプを示しています。これらのパーセンテージは要件に応じて調整できます。

  3. 設定ファイルにエラーがないか確認します。

    # cloud-init devel schema --config-file /etc/cloud/cloud.cfg.d/00-azure-swap.cfg

    設定が有効な場合、コマンドはエラーを返しません。

検証

  • 仮想マシンを再起動した後、アクティブなスワップ領域、スワップ使用量、および /etc/fstab ファイル内のスワップパーティションのエントリーを確認して、スワップパーティションが設定されアクティブであることを確認します。

    • アクティブなスワップ領域を確認します。

      $ swapon -s

      出力に ephemeral0.2 のスワップパーティションが表示されます。

      Filename                 Type        Size      Used    Priority
      /dev/ephemeral0.2     partition     8388604     0      -2
    • スワップ使用量を確認します。

      $ free -h

      出力の Swap 行にスワップ領域が表示されます。

               total        used        free      shared      buffered/cache   available
      Mem:     7.8Gi        1.2Gi       5.8Gi        16MiB       800MiB       6.3Gi
      Swap:    8.0Gi        0B          8.0Gi
    • /etc/fstab ファイルにスワップパーティションが存在することを確認します。

      $ grep swap /etc/fstab

      出力にスワップパーティションのエントリーが表示されるはずです。次に例を示します。

      /dev/ephemeral0.2   none     swap  sw,nofail,x-systemd.requires=cloud-init.service   0       0

3.7. Azure デプロイメント用の仮想マシンの準備

仮想マシンの互換性を確保し、Azure 環境で動作できるようにするには、カスタムベースイメージをデプロイする前に設定を変更します。

前提条件

手順

  1. ログインして仮想マシンを登録し、Red Hat Enterprise Linux (RHEL) リポジトリーを有効にします。

    # subscription-manager register
    
    Installed Product Current Status:
    Product Name: Red Hat Enterprise Linux for x86_64
    Status: Subscribed
  2. cloud-init および hyperv-daemons パッケージをインストールします。

    # dnf install cloud-init hyperv-daemons -y
  3. cloud-init 設定ファイルを作成し、Azure サービスと統合するための編集を行います。

    1. Hyper-V Data Exchange Service (KVP) へのログ記録を有効にするには、/etc/cloud/cloud.cfg.d/10-azure-kvp.cfg 設定ファイルを編集し、次の行を追加します。

      reporting:
          logging:
              type: log
          telemetry:
              type: hyperv
    2. Azure データソースを追加するには、/etc/cloud/cloud.cfg.d/91-azure_datasource.cfg ファイルを編集し、次の行を追加します。

      datasource_list: [ Azure ]
      datasource:
          Azure:
              apply_network_config: False
    3. エフェメラルディスク上のスワップ領域を設定するには、/etc/cloud/cloud.cfg.d/00-azure-swap.cfg 設定ファイルを作成し、そのファイルに次の行を追加します。

      重要

      エフェメラルディスクは一時的なストレージです。したがって、仮想マシンが割り当て解除または移動されると、スワップ領域を含め、そこに保存されているデータが失われます。エフェメラルディスクは、スワップ領域などの一時データにのみ使用してください。

      #cloud-config
      disk_setup:
        ephemeral0:
          table_type: gpt
          layout: [66, [33,82]]
          overwrite: true
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service", "0", "0"]
  4. 特定のカーネルモジュールの自動ロードをブロックするには、/etc/modprobe.d/blocklist.conf ファイルを編集し、次の行を追加します。

    blacklist nouveau
    blacklist lbm-nouveau
    blacklist floppy
    blacklist amdgpu
    blacklist skx_edac
    blacklist intel_cstate
  5. udev ネットワークデバイスルールを変更します。

    1. 存在する場合は、次の永続的なネットワークデバイスルールを削除します。

      # rm -f /etc/udev/rules.d/70-persistent-net.rules
      # rm -f /etc/udev/rules.d/75-persistent-net-generator.rules
      # rm -f /etc/udev/rules.d/80-net-name-slot-rules
    2. Azure で高速ネットワークが確実に機能するためには、/etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules の新しいネットワークデバイスルールを編集し、次の行を追加します。

      SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
  6. sshd サービスが自動的に起動するように設定します。

    # systemctl enable sshd
    # systemctl is-enabled sshd
  7. カーネルブートパラメーターを変更します。

    1. /etc/default/grub ファイルの GRUB_TIMEOUT パラメーター値を更新します。

      GRUB_TIMEOUT=10
    2. 存在する場合は、GRUB_CMDLINE_LINUX 行の末尾から次のオプションを削除します。

      rhgb quiet
    3. 次の設定詳細で、/etc/default/grub ファイルを更新します。

      GRUB_CMDLINE_LINUX="loglevel=3 crashkernel=auto console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300"
      GRUB_TIMEOUT_STYLE=countdown
      GRUB_TERMINAL="serial console"
      GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
      注記

      GRUB_CMDLINE_LINUX 行の末尾に elevator=none オプションを追加すると、I/O スケジューラーが完全に無効になります。このオプションは、ディスクパフォーマンスを最適化せずに、実行順序に従って I/O 要求を処理します。elevator=none がオンの場合、以下のとおりとなります。

      • ハードディスクドライブ (HDD): パフォーマンスとスループットが低下するため、ワークロードの実行には適していません。
      • ソリッドステートドライブ (SSD): 高性能でレイテンシーが低いため、ワークロードの実行に適しています。
    4. grub.cfg ファイルを再生成します。

      • BIOS ベースのマシンの場合:

        # grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline
      • UEFI ベースのマシンの場合:

        # grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline
        警告

        grub.cfg を再構築するパスは、BIOS ベースと UEFI ベースの両マシンで同じです。オリジナルの grub.cfg は BIOS パスにのみ存在します。UEFI パスには、grub2-mkconfig コマンドを使用して変更または再作成してはならないスタブファイルがあります。

        システムが grub.cfg にデフォルト以外の場所を使用している場合は、それに応じてコマンドを調整してください。

  8. Windows Azure Linux Agent (WALinuxAgent) を設定します。

    1. WALinuxAgent パッケージをインストールして有効にします。

      # dnf install WALinuxAgent -y
      # systemctl enable waagent
    2. WALinuxAgent でスワップ設定を無効にするために (cloud-init を使用してスワップを管理する場合に必要)、/etc/waagent.conf ファイルで次の行を編集します。

      Provisioning.DeleteRootPassword=y
      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      ResourceDisk.SwapSizeMB=0
      注記

      WALinuxAgent でスワップを無効にすると、cloud-init がエフェメラルディスク上のスワップ設定を管理できるようになります。

  9. Azure プロビジョニング用に VM を準備します。

    1. Red Hat Subscription Manager から仮想マシンの登録を解除します。

      # subscription-manager unregister
    2. 既存のプロビジョニングの詳細をクリーンアップします。

      # waagent -force -deprovision
      注記

      このコマンドは、Azure が仮想マシンのプロビジョニングを自動的に処理すると警告を生成します。

    3. シェル履歴をクリーンアップし、仮想マシンをシャットダウンします。

      # export HISTSIZE=0
      # poweroff

次のステップ

3.8. RHEL イメージを Azure ディスクイメージに変換する

Microsoft Azure は、Azure ディスクイメージ (.vhd) 形式をサポートしています。イメージを変換するには、イメージファイルが 1 MB の倍数の位置から始まることを確認してから、RHEL イメージを qcow2 から固定 VHD 形式に変換します。

注記

次のコマンドは qemu-img バージョン 2.12.0 を使用します。

前提条件

手順

  1. イメージを qcow2 形式から raw 形式に変換します。

    $ qemu-img convert -f qcow2 -O raw <image_example_name>.qcow2 <image_name>.raw
  2. align.sh シェルスクリプトを編集します。

    $ vi align.sh
    
    #!/bin/bash
    MB=$((1024 * 1024))
    size=$(qemu-img info -f raw --output json "$1" | gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1) * $MB))
    if [ $(($size % $MB)) -eq  0 ]
    then
     echo "Your image is already aligned. You do not need to resize."
     exit 1
    fi
    echo "rounded size = $rounded_size"
    export rounded_size
  3. スクリプトを実行します。

    $ sh align.sh <image_example_name>.raw
  4. Your image is already aligned. You do not need to resize. というメッセージが表示された場合、以下を実行します。

    1. ファイルを固定 VHD 形式に変換します。

      $ qemu-img convert -f raw -o subformat=fixed,force_size -O vpc <image_example_name>.raw <image_example_name>.vhd

      変換されると、VHD ファイルは Azure にアップロードする準備が整います。

  5. 値が表示される場合は、raw イメージが調整されていないことを意味します。

    1. 上記のように丸められた値を使用して、raw ファイルのサイズを変更します。

      $ qemu-img resize -f raw <image_example_name>.raw +1G
    2. raw イメージファイルを VHD 形式に変換します。

      $ qemu-img convert -f raw -o subformat=fixed,force_size -O vpc <image_example_name>.raw <image_example_name>.vhd

      変換されると、VHD ファイルは Azure にアップロードする準備が整います。

次のステップ

3.9. RHEL イメージ用の Azure リソースを設定する

Azure リソースは、コンピュート、ネットワーク、ストレージなどのクラウドベースのリソース管理の基本サービスです。VHD ファイルをアップロードして Azure イメージを作成する前に、Azure リソースの設定を完了する必要があります。

前提条件

手順

  1. Azure 認証情報を使用してホストを認証し、ログインします。

    $ az login

    ブラウザーからログインするには、CLI からブラウザーで Azure サインインページを開きます。詳細は、Sign in with a browser を参照してください。

  2. Azure リージョンにリソースグループを作成します。

    $ az group create --name <resource-group> --location <azure-region>

    以下に例を示します。

    [clouduser@localhost]$ az group create --name azrhelclirsgrp --location southcentralus
    {
      "id": "/subscriptions//resourceGroups/azrhelclirsgrp",
      "location": "southcentralus",
      "managedBy": null,
      "name": "azrhelclirsgrp",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
  3. 有効な Stock Keeping Unit (SKU) タイプでストレージアカウントを作成します。詳細は、SKU Types を参照してください。

    $ az storage account create -l <azure-region> -n <storage-account-name> -g <resource-group> --sku <sku_type>

    以下に例を示します。

    $ az storage account create -l southcentralus -n azrhelclistact -g azrhelclirsgrp --sku Standard_LRS
    {
      "accessTier": null,
      "creationTime": "2017-04-05T19:10:29.855470+00:00",
      "customDomain": null,
      "encryption": null,
      "id": "/subscriptions//resourceGroups/azrhelclirsgrp/providers/Microsoft.Storage/storageAccounts/azrhelclistact",
      "kind": "StorageV2",
      "lastGeoFailoverTime": null,
      "location": "southcentralus",
      "name": "azrhelclistact",
      "primaryEndpoints": {
        "blob": "https://azrhelclistact.blob.core.windows.net/",
        "file": "https://azrhelclistact.file.core.windows.net/",
        "queue": "https://azrhelclistact.queue.core.windows.net/",
        "table": "https://azrhelclistact.table.core.windows.net/"
    },
    "primaryLocation": "southcentralus",
    "provisioningState": "Succeeded",
    "resourceGroup": "azrhelclirsgrp",
    "secondaryEndpoints": null,
    "secondaryLocation": null,
    "sku": {
      "name": "Standard_LRS",
      "tier": "Standard"
    },
    "statusOfPrimary": "available",
    "statusOfSecondary": null,
    "tags": {},
      "type": "Microsoft.Storage/storageAccounts"
    }
  4. ストレージアカウントの詳細を表示します。

    $ az storage account show-connection-string -n <storage_account_name> -g <resource_group>

    以下に例を示します。

    $ az storage account show-connection-string -n azrhelclistact -g azrhelclirsgrp
    {
      "connectionString": "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=azrhelclistact;AccountKey=NreGk...=="
    }
  5. 既存の接続文字列をエクスポートして環境変数を設定し、システムをストレージアカウントに接続します。

    $ export AZURE_STORAGE_CONNECTION_STRING="<storage_connection_string>"

    以下に例を示します。

    $ export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=azrhelclistact;AccountKey=NreGk...=="
  6. ストレージコンテナーを作成します。

    $ az storage container create -n <container_name>

    以下に例を示します。

    $ az storage container create -n azrhelclistcont
    {
      "created": true
    }
  7. 仮想ネットワークを作成します。

    $ az network vnet create -g <resource group> --name <vnet_name> --subnet-name <subnet_name>

    以下に例を示します。

    $ az network vnet create --resource-group azrhelclirsgrp --name azrhelclivnet1 --subnet-name azrhelclisubnet1
    {
      "newVNet": {
        "addressSpace": {
          "addressPrefixes": [
          "10.0.0.0/16"
          ]
      },
      "dhcpOptions": {
        "dnsServers": []
      },
      "etag": "W/\"\"",
      "id": "/subscriptions//resourceGroups/azrhelclirsgrp/providers/Microsoft.Network/virtualNetworks/azrhelclivnet1",
      "location": "southcentralus",
      "name": "azrhelclivnet1",
      "provisioningState": "Succeeded",
      "resourceGroup": "azrhelclirsgrp",
      "resourceGuid": "0f25efee-e2a6-4abe-a4e9-817061ee1e79",
      "subnets": [
        {
          "addressPrefix": "10.0.0.0/24",
          "etag": "W/\"\"",
          "id": "/subscriptions//resourceGroups/azrhelclirsgrp/providers/Microsoft.Network/virtualNetworks/azrhelclivnet1/subnets/azrhelclisubnet1",
          "ipConfigurations": null,
          "name": "azrhelclisubnet1",
          "networkSecurityGroup": null,
          "provisioningState": "Succeeded",
          "resourceGroup": "azrhelclirsgrp",
          "resourceNavigationLinks": null,
          "routeTable": null
        }
      ],
      "tags": {},
      "type": "Microsoft.Network/virtualNetworks",
      "virtualNetworkPeerings": null
      }
    }

3.10. VHD イメージを Azure Blob ストレージにアップロードする

Microsoft Azure Blob ストレージを使用すると、VHD ファイルを管理し、カスタム Azure イメージを作成できます。

警告

システムを再起動すると、エクスポートしたストレージ接続文字列は維持されません。以下の手順でいずれかのコマンドが失敗した場合は、再び接続文字列をエクスポートしてください。接続文字列を取得してエクスポートするには、RHEL イメージの Azure リソースを設定する を参照してください。

前提条件

手順

  1. ストレージコンテナーに VHD ファイルをアップロードします。

    $ az storage blob upload \
        --account-name _<storage_account_name> --container-name _<container_name> \
        --type page --file _<path_to_vhd> --name _<image_name>.vhd

    以下に例を示します。

    $ az storage blob upload \
    --account-name azrhelclistact --container-name azrhelclistcont \
    --type page --file ~/Downloads/rhel-image-10.vhd --name rhel-image-10.vhd
    
    Percent complete: 100.0%
  2. ストレージコンテナーをリスト表示します。

    1. 表形式で表示するには、次のように入力します。

      $ az storage container list --output table
    2. YAML 形式で表示するには、次のように入力します。

      $ az storage container list --output yaml
  3. 最初のステップでアップロードした VHD ファイルの URL を使用します。

    $ az storage blob url -c <container_name> -n _<image_name>.vhd _<url_of_vhd_file>_

    以下に例を示します。

    $ az storage blob url -c azrhelclistcont -n rhel-image-10.vhd "https://azrhelclistact.blob.core.windows.net/azrhelclistcont/rhel-image-10.vhd"
  4. Azure カスタムイメージを作成します。

    $ az image create -n _<image_name> -g _<resource_group> -l _<azure_region> --source _<URL> --os-type linux
    注記

    仮想マシンのハイパーバイザーのデフォルトの生成は V1 です。必要に応じて、--hyper-v-generation V2 オプションを使用して V2 ハイパーバイザーの世代を指定できます。第 2 世代の仮想マシンは、UEFI ベースのブートアーキテクチャーを使用します。詳細は、Support for generation 2 VMs on Azure を参照してください。このコマンドは、"Only blobs formatted as VHDs can be imported" エラーを返す場合があります。このエラーは、イメージが VHD に変換される前に最も近い 1 MB の境界に合致していないことを意味します。

    以下に例を示します。

    $ az image create -n rhel10 -g azrhelclirsgrp2 -l southcentralus --source https://azrhelclistact.blob.core.windows.net/azrhelclistcont/rhel-image-10.vhd --os-type linux

次のステップ

3.11. Azure で RHEL 仮想マシンを起動して接続する

イメージからマネージドディスク Azure 仮想マシンを作成する必要があります。

手順

  1. 仮想マシンを作成します。

    $ az vm create \
        -g <resource_group> -l <azure_region> -n <vm_name> \
        --vnet-name <vnet_name> --subnet <subnet_name> --size Standard_A2 \
        --os-disk-name <simple_name> --admin-username <administrator_name> \
        --generate-ssh-keys --image <path_to_image>

    以下に例を示します。

    $ az vm create \
    -g azrhelclirsgrp2 -l southcentralus -n rhel-azure-vm-1 \ 
    1
    
    --vnet-name azrhelclivnet1 --subnet azrhelclisubnet1 --size Standard_A2 \
    --os-disk-name vm-1-osdisk --admin-username clouduser \ 
    2
    
    --generate-ssh-keys --image rhel10
    
    {
      "fqdns": "",
      "id": "/subscriptions//resourceGroups/azrhelclirsgrp/providers/Microsoft.Compute/virtualMachines/rhel-azure-vm-1",
      "location": "southcentralus",
      "macAddress": "",
      "powerState": "VM running",
      "privateIpAddress": "10.0.0.4",
      "publicIpAddress": "<public_ip_address>",
      "resourceGroup": "azrhelclirsgrp2"
    }
    • --generate-ssh-keys オプションは、~/.ssh ディレクトリーに秘密鍵と公開鍵のペアファイルを作成します。
    • 公開鍵は、--admin-username オプションで指定したユーザーの仮想マシン上の authorized_keys ファイルに追加されます。

      詳細は、SSH 認証方法の種類 を参照してください。次のステップで仮想マシンにログインするときに必要となる publicIpAddress をメモしておきます。

  2. SSH セッションを開始し、Azure 仮想マシンにログインします。

    [clouduser@localhost]$ ssh -i /home/clouduser/.ssh/id_rsa clouduser@<public_ip_address>
    
    The authenticity of host '<public_ip_address>' can't be established.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '<public_ip_address>' (ECDSA) to the list of known hosts.

検証

  • 仮想マシンに正常に接続すると、ユーザープロンプトが表示されます。
  • Microsoft Azure portal を使用して、監査ログ、割り当てられたリソースのプロパティーを確認し、仮想マシンを管理します。詳細は、Tutorial: Create and manage Linux VMs with the Azure portal を参照してください。
  • 多数の仮想マシンを管理している場合は、Azure CLI を使用することもできます。詳細は、CLI で az --help と入力するか、Azure CLI command reference を参照してください。

3.12. SSH 認証方法の種類

これは重要なセキュリティー対策ですが、場合によっては、Azure によって生成されたキーペアを使用せずに Azure インスタンスに接続することもできます。以下の例は、SSH 認証のための 2 種類の方法を示しています。

例 1
公開鍵ファイルを生成せずに、パスワードを使用して新しい Azure 仮想マシンをプロビジョニングします。
$ az vm create \
    -g <resource_group> -l <azure_region> -n <vm_name> \
    -vnet-name <vnet_name> -subnet <subnet_name> -size Standard_A2 \
    -os-disk-name <simple_name> -authentication-type password \
    -admin-username <administrator_name> -admin-password <ssh_password> -image <path_to_image>
$ ssh <admin_username>@<public_ip_address>
例 2
既存の公開鍵ファイルを使用して、新しい Azure 仮想マシンをプロビジョニングします。
$ az vm create \
    -g <resource_group> -l <azure_region> -n <vm_name> \
    -vnet-name <vnet_name> -subnet <subnet_name> -size Standard_A2 \
    -os-disk-name <simple_name> -admin-username <administrator_name> \
    -ssh-key-value <path_to_existing_ssh_key> -image <path_to_image>
$ ssh -i <path_to_existing_ssh_key> <admin_username>@<public_ip_address>

3.13. Red Hat サブスクリプションの割り当て

subscription-manager コマンドを使用すると、Red Hat サブスクリプションを登録して RHEL インスタンスに割り当てることができます。

前提条件

手順

  1. システムを登録します。

    # subscription-manager register
  2. サブスクリプションを割り当てます。

  3. オプション: Red Hat Hybrid Cloud Console でインスタンスに関するさまざまなシステムメトリクスを収集するには、インスタンスを Red Hat Lightspeed に登録できます。

    # insights-client register --display-name <display_name_value>

    Red Hat Lightspeed の詳細な設定は、Red Hat Lightspeed のクライアント設定ガイド を参照してください。

3.14. Azure ゴールドイメージの自動登録のセットアップ

Microsoft Azure への RHEL 仮想マシン (VM) のデプロイをより高速かつ快適にするために、RHEL のゴールドイメージが Red Hat Subscription Management (RHSM) に自動的に登録されるようにセットアップできます。

前提条件

  • RHEL ゴールドイメージは Microsoft Azure で利用できます。手順は、Azure でのゴールドイメージの使用 を参照してください。

    注記

    Microsoft Azure アカウントは、一度に 1 つの Red Hat アカウントにしか割り当てできません。そのため、Red Hat アカウントにアタッチする前に、他のユーザーが Azure アカウントへのアクセスを必要としていないことを確認してください。

手順

  • ゴールドイメージを使用して、Azure インスタンスに RHEL 仮想マシンを作成します。手順は、Azure で RHEL 仮想マシンを起動して接続する を参照してください。

    RHSM 設定が正しい場合、仮想マシンは自動的に RHSM にサブスクライブされます。

検証

  • 上記の手順を使用して作成した RHEL 仮想マシンで、RHSM がシステムに接続されていることを確認します。正常に登録されたシステムでは、subscription-manager identity コマンドによってシステムの UUID が表示されます。以下に例を示します。

    # subscription-manager identity
    system identity: fdc46662-c536-43fb-a18a-bbcb283102b7
    name: 192.168.122.222
    org name: 6340056
    org ID: 6340056

3.15. Microsoft Azure インスタンス用の kdump の設定

RHEL インスタンスでカーネルクラッシュが発生した場合は、kdump サービスを使用して原因を特定できます。カーネルインスタンスが予期せず終了したときに kdump が正しく設定されていれば、kdump はクラッシュダンプまたは vmcore ファイルと呼ばれるダンプファイルを生成します。デバッグのために、ファイルを分析してクラッシュが発生した原因を調べることができます。

kdump を Microsoft Azure インスタンスで動作させるには、仮想マシンのサイズと RHEL バージョンに合わせて、kdump の予約メモリーと vmcore ターゲットの調整が必要になる場合があります。

前提条件

  • kdump をサポートする Microsoft Azure 環境の仮想マシンを使用している。

    • Standard_DS2_v2
    • Standard NV16as v4
    • Standard M416-208s v2
    • Standard M416ms v2
  • root 権限を持っている。
  • システムが、kdump の設定とターゲットの要件を満たしている。詳細は、サポートされている kdump 設定とターゲット を参照してください。

手順

  1. kdump および必要なパッケージをインストールします。

    # dnf install kexec-tools kdump-utils makedumpfile
  2. クラッシュダンプファイルのデフォルトの場所が kdump 設定ファイルで設定されており、/var/crash ファイルが使用可能であることを確認します。

    # grep -v "#" /etc/kdump.conf
    
    path /var/crash
    core_collector makedumpfile -l --message-level 7 -d 31
  3. RHEL 仮想マシンのサイズとバージョンに基づき、より多くの空き領域を持つ vmcore ターゲット (例: /mnt/crash) が必要かどうかを確認します。

    Expand
    表3.3 Azure 上の GEN2 VM でテストされた仮想マシンのサイズ
    RHEL バージョンStandard DS1 v2 (1 vCPU、3.5GiB)Standard NV16as v4 (16 vCPU、56 GiB)Standard M416-208s v2 (208 vCPU、5700 GiB)Standard M416ms v2 (416 vCPU、11400 GiB)

    RHEL 9.4 - RHEL 10

    デフォルト

    デフォルト

    ターゲット

    ターゲット

    • Default は、デフォルトのメモリーとデフォルトの kdump ターゲットで kdump が期待どおりに動作することを示します。デフォルトの kdump ターゲットは /var/crash ファイルです。
    • Target は、kdump がデフォルトのメモリーで期待どおりに動作することを示します。ただし、より多くの空き領域を持つターゲットを割り当てる必要がある場合があります。
  4. /mnt/crash などの空き領域のあるターゲットを割り当てるには、/etc/kdump.conf ファイルを編集してデフォルトのパスを置き換えます。

    $ sed s/"path /var/crash"/"path /mnt/crash"

    オプションパス /mnt/crash は、kdump がクラッシュダンプファイルを保存するファイルシステムへのパスを表します。

    クラッシュダンプファイルを別のパーティションに書き込む、デバイスに直接書き込む、リモートマシンに保存するなどの詳細は、kdump ターゲットの設定 を参照してください。

  5. インスタンスで必要な場合は、適切なブートパラメーターを追加して、クラッシュカーネルのサイズを、kdumpvmcore をキャプチャーするのに十分なサイズまで増やします。

    たとえば、Standard M416-208s v2 仮想マシンの場合、十分なサイズは 512 MB なので、ブートパラメーターは crashkernel=512M になります。

    1. GRUB 設定ファイルを開き、ブートパラメーター行に crashkernel=512M を追加します。

      # vi /etc/default/grub
      
      GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300 crashkernel=512M"
    2. GRUB 設定ファイルを更新します。

      # grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline
  6. 仮想マシンを再起動して、仮想マシンに個別のカーネルクラッシュメモリーを割り当てます。

検証

  • kdump がアクティブで実行されていることを確認します。

    # systemctl status kdump
    ● kdump.service - Crash recovery kernel arming
       Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor prese>
       Active: active (exited) since Fri 2024-02-09 10:50:18 CET; 1h 20min ago
      Process: 1252 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCES>
     Main PID: 1252 (code=exited, status=0/SUCCESS)
        Tasks: 0 (limit: 16975)
       Memory: 512B
       CGroup: /system.slice/kdump.service

第4章 Microsoft Azure での Red Hat High Availability クラスターの設定

高可用性 (HA) クラスターは、いずれかのノードに障害が発生した場合にワークロードが自動的に再分散されるように、RHEL ノードをグループ化します。HA クラスターは、Microsoft Azure などのパブリッククラウドプラットフォームにデプロイできます。Azure で HA クラスターをセットアップするプロセスは、従来の非クラウド環境でクラスターを設定するプロセスと似ています。

仮想ハードドライブ (VHD) インスタンスをクラスターノードとして使用する Azure 上の Red Hat HA クラスターを設定するには、次のセクションを参照してください。クラスターの RHEL イメージを取得するには、いくつかのオプションがあります。詳細は、パブリッククラウドで利用可能な RHEL イメージタイプ を参照してください。

始める前に、次の手順を必ず完了してください。

4.1. パブリッククラウドプラットフォームで高可用性クラスターを使用する利点

高可用性 (HA) クラスターは、特定のワークロードを実行するために、コンピューター群 (ノード と呼ばれる) を結び付けたものです。HA クラスターは、ハードウェアまたはソフトウェアの障害に対処するための冗長性を提供します。HA クラスター内のいずれかのノードに障害が発生すると、Pacemaker クラスターリソースマネージャーはワークロードを他のノードに迅速に分散します。これにより、顕著なダウンタイムを発生させることなく、クラスター上のサービスを継続的に提供します。

HA クラスターはパブリッククラウドプラットフォームで実行することもできます。この場合、クラウド内の仮想マシン (VM) インスタンスを個々のクラスターノードとして使用します。パブリッククラウドプラットフォームで HA クラスターを使用すると、次の利点があります。

  • 可用性の向上: VM に障害が発生した場合、ワークロードがすぐに他のノードに再分散されるため、実行中のサービスが中断されません。
  • スケーラビリティー: 需要が高いときに追加のノードを起動し、需要が低いときにノードを停止することができます。
  • 費用対効果: 従量課金制の料金設定では、実行中のノードに対して料金を支払うだけで済みます。
  • 管理の単純化: 一部のパブリッククラウドプラットフォームでは、HA クラスターの設定を容易にする管理インターフェイスが提供されています。

RHEL システムで HA を有効にするために、Red Hat は HA アドオンを提供しています。Red Hat HA アドオンを使用して RHEL クラスターを設定し、RHEL サーバーのグループが含まれる HA クラスターを管理できます。Red Hat HA アドオンを使用すると、統合された効率的なツール群を利用できます。クラスターリソースマネージャー、フェンシングエージェント、リソースエージェントを使用すると、自動化のためにクラスターをセットアップおよび設定できます。Red Hat HA アドオンは、自動化のために次のコンポーネントを提供します。

  • 複数のノードをサポートするために、コマンドラインユーティリティー (pcs) と GUI (pcsd) の両方を提供するクラスターリソースマネージャーである Pacemaker
  • HA クラスターを作成および管理するための CorosyncKronosnet
  • カスタムアプリケーションを設定および管理するためのリソースエージェント
  • ベアメタルサーバーや仮想マシンなどのプラットフォームでクラスターを使用するためのフェンシングエージェント

Red Hat HA アドオンは、ノード障害、負荷分散、ノードのヘルスチェックなどの重要なタスクを処理して、フォールトトレランスとシステムの信頼性を確保します。

4.2. Azure の高可用性パッケージおよびエージェントのインストール

Azure 上で Red Hat High Availability クラスターを設定できるようにするには、各ノードに高可用性パッケージとエージェントをインストールする必要があります。

主な目的はフォールトトレラントで可用性の高いシステムを構築することですが、これらの特定のパッケージをインストールすることで、次のことが可能になります。

  • 自動フェイルオーバー機能 - 1 つのノードに障害が発生した場合、サービスが自動的に健全なノードに移動します。
  • リソース管理 - クラスターは、サービス、データベース、アプリケーションなどを管理および監視できます。
  • サービス継続性 - ハードウェアまたはソフトウェアの障害時でもサービスの可用性を確保することで、ダウンタイムを最小限に抑えます。
  • Azure 固有の統合 - fence-agents-azure-arm パッケージは、Azure 固有のフェンシング機能を提供します。この機能を使用すると、クラスターは Azure 環境の仮想マシンを停止したり、ネットワークアクセスを管理したりすることで、障害が発生したノードを安全に分離できます。

手順

  1. Azure 仮想マシンのパブリック IP アドレスを取得するには、Azure Portal で仮想マシンのプロパティーを開くか、次のように入力します。

    $ az vm list -g <resource_group> -d --output table

    以下に例を示します。

    $ az vm list -g azrhelclirsgrp -d --output table
    
    Name    ResourceGroup           PowerState      PublicIps        Location
    ------  ----------------------  --------------  -------------    --------------
    node01  azrhelclirsgrp          VM running      192.98.152.251    southcentralus
  2. 仮想マシンを Red Hat に登録します。

    $ sudo -i
    # subscription-manager register
  3. すべてのリポジトリーを無効にします。

    # subscription-manager repos --disable= *
  4. RHEL サーバーの HA リポジトリーを有効にします。

    # subscription-manager repos --enable=rhel-10-for-x86_64-highavailability-rpms
  5. すべてのパッケージを更新します。

    # dnf update -y
  6. Red Hat HA アドオンパッケージを Azure フェンシングエージェントと共にインストールします。

    # dnf install pcs pacemaker fence-agents-azure-arm
  7. 直のステップで pcs および pacemaker をインストールすると、hacluster ユーザーが作成されます。ここで、hacluster のパスワードを作成し、それをすべてのクラスターノードに使用します。

    # passwd hacluster
  8. システムに firewalld.service がある場合は、RHEL ファイアウォールに high availability サービスを追加します。

    # firewall-cmd --permanent --add-service=high-availability
    # firewall-cmd --reload
  9. pcs サービスを起動し、システムの起動時に開始できるようにします。

    # systemctl start pcsd.service
    # systemctl enable pcsd.service
    
    Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service.

検証

  • pcs サービスが実行していることを確認します。

    # systemctl status pcsd.service
    ...
    Active: active (running) since Fri 2018-02-23 11:00:58 EST; 1min 23s ago
    ...

4.3. Azure AD アプリケーションの作成

Azure Active Directory (AD) アプリケーションを作成するには、以下の手順を行います。Azure AD アプリケーションは、クラスター内のすべてのノードに対する高可用性 (HA) 操作へのアクセスを許可および自動化します。

前提条件

手順

  1. HA クラスター内の任意のノードで、Azure アカウントにログインします。

    $ az login
  2. Azure フェンスエージェントのカスタムロールの json 設定ファイルを作成します。次の設定を使用します。ただし、<subscription_id> は実際のサブスクリプション ID に置き換えます。

    {
          "Name": "Linux Fence Agent Role",
          "description": "Allows to power-off and start virtual machines",
          "assignableScopes": [
                  "/subscriptions/<subscription_id>"
          ],
          "actions": [
                  "Microsoft.Compute/*/read",
                  "Microsoft.Compute/virtualMachines/powerOff/action",
                  "Microsoft.Compute/virtualMachines/start/action"
          ],
          "notActions": [],
          "dataActions": [],
          "notDataActions": []
    }
  3. Azure フェンスエージェントのカスタムロールを定義します。前のステップで作成した json ファイルを使用します。

    $ az role definition create --role-definition <azure_fence_role.json>
    
    {
      "assignableScopes": [
        "/subscriptions/<my_subscription_id>"
      ],
      "description": "Allows to power-off and start virtual machines",
      "id": "/subscriptions/<my_subscription_id>/providers/Microsoft.Authorization/roleDefinitions/<role_id>",
      "name": "<role_id>",
      "permissions": [
        {
          "actions": [
            "Microsoft.Compute/*/read",
            "Microsoft.Compute/virtualMachines/powerOff/action",
            "Microsoft.Compute/virtualMachines/start/action"
          ],
          "dataActions": [],
          "notActions": [],
          "notDataActions": []
        }
      ],
      "roleName": "Linux Fence Agent Role",
      "roleType": "CustomRole",
      "type": "Microsoft.Authorization/roleDefinitions"
    }
  4. Azure Web コンソールインターフェイスで、Virtual Machine を選択し、左側のメニューで Identity をクリックします。
  5. On を選択→ Save をクリック→ Yes をクリックして確認します。
  6. Azure role assignmentsAdd role assignment をクリックします。
  7. ロールに必要な Scope (例: Resource Group) を選択します。
  8. 必要な Resource Group を選択します。
  9. オプション: 必要に応じて Subscription を変更します。
  10. Linux Fence Agent Role ロールを選択します。
  11. Save をクリックします。

検証

  • Azure AD で表示されるノードを表示します。

    # fence_azure_arm --msi -o list
    node1,
    node2,
    [...]

    このコマンドでクラスター上のすべてのノードが出力された場合、AD アプリケーションは正常に設定されています。

4.4. 高可用性クラスターの作成

以下の手順では、Red Hat High Availability Add-On クラスターを作成します。この手順の例では、ノード z1.example.com および z2.example.com で構成されるクラスターを作成します。

注記

pcs コマンドのパラメーターとそれらのパラメーターの説明を表示するには、pcs コマンドの -h オプションを使用します。

手順

  1. pcs を実行するノードでクラスター内の各ノードの pcs ユーザー hacluster を認証します。

    次のコマンドは、z1.example.comz2.example.com で構成される 2 ノードクラスターの両ノードに対して、z1.example.comhacluster ユーザーを認証します。

    [root@z1 ~]# pcs host auth z1.example.com z2.example.com
    Username: hacluster
    Password:
    z1.example.com: Authorized
    z2.example.com: Authorized
  2. z1.example.com で以下のコマンドを実行し、2 つのノード z1.example.comz2.example.com で構成される 2 ノードクラスター my_cluster を作成します。これにより、クラスター設定ファイルが、クラスターの両ノードに伝搬されます。このコマンドには --start オプションが含まれます。このオプションを使用すると、クラスターの両ノードでクラスターサービスが起動します。

    [root@z1 ~]# pcs cluster setup my_cluster --start z1.example.com z2.example.com
  3. クラスターサービスを有効にし、ノードの起動時にクラスターの各ノードでクラスターサービスが実行するようにします。

    注記

    使用している環境でクラスターサービスを無効のままにしておきたい場合などは、この手順を省略できます。この手順を行うことで、ノードがダウンした場合にクラスターやリソース関連の問題をすべて解決してから、そのノードをクラスターに戻すことができます。クラスターサービスを無効にしている場合には、ノードを再起動する時に pcs cluster start コマンドを使用して手作業でサービスを起動しなければならないので注意してください。

    [root@z1 ~]# pcs cluster enable --all
  4. pcs cluster status コマンドを使用して、作成したクラスターのステータスを表示します。pcs cluster setup コマンドで --start オプションを使用してクラスターサービスを起動した場合は、クラスターが稼働するのに時間が少しかかる可能性があるため、クラスターとその設定で後続の動作を実行する前に、クラスターが稼働していることを確認する必要があります。

    [root@z1 ~]# pcs cluster status
    Cluster Status:
     Stack: corosync
     Current DC: z2.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum
     Last updated: Thu Oct 11 16:11:18 2018
     Last change: Thu Oct 11 16:11:00 2018 by hacluster via crmd on z2.example.com
     2 Nodes configured
     0 Resources configured
    
    ...

4.5. Red Hat High Availability クラスターでのフェンシングの設定

クラスター内のノードの 1 つと通信が失敗した場合に、障害が発生したクラスターノードがアクセスする可能性があるリソースへのアクセスを、その他のノードが制限したり、解放したりできるようにする必要があります。クラスターノードが応答しない可能性があるため、そのクラスターノードと通信しても成功しません。代わりに、フェンスエージェントを使用した、フェンシングと呼ばれる外部メソッドを指定する必要があります。フェンスデバイスは、クラスターが使用する外部デバイスのことで、このデバイスを使用して、不安定なノードによる共有リソースへのアクセスを制限したり、クラスターノードでハードリブートを実行します。

フェンスデバイスが設定されていないと、以前使用していたリソースが解放されていることを切断されているクラスターノードが把握できず、他のクラスターノードでサービスを実行できなくなる可能性があります。また、クラスターノードがそのリソースを解放したとシステムが誤って想定し、データが破損または損失する可能性もあります。フェンスデバイスが設定されていないと、データの整合性は保証できず、クラスター設定はサポートされません。

フェンシングの進行中は、他のクラスター操作を実行できません。クラスターノードの再起動後にフェンシングが完了するか、クラスターノードがクラスターに再度参加するまで、クラスターの通常の動作を再開することができません。フェンシングと Red Hat High Availability クラスターにおけるその重要性の詳細は、Red Hat ナレッジベースのソリューション記事 Fencing in a Red Hat High Availability Cluster を参照してください。

4.5.1. 利用可能なフェンスエージェントと、そのオプションの表示

以下のコマンドは、利用可能なフェンスエージェントと、特定のフェンスエージェントで利用可能なオプションを表示できます。

注記

システムのハードウェアによって、クラスターに使用するフェンシングデバイスのタイプが決まります。サポートされているプラットフォームとアーキテクチャー、およびさまざまなフェンシングデバイスの詳細は、Red Hat ナレッジベースのアーティクル記事 Support Policies for RHEL High Availability ClustersCluster Platforms and Architectures のセクションを参照してください。

使用可能なすべてのフェンスエージェントのリストを表示するには、次のコマンドを実行します。フィルターを指定すると、フィルターに一致するフェンスエージェントのみが表示されます。

pcs stonith list [filter]

指定したフェンスエージェントのオプションを表示するには、次のコマンドを実行します。

pcs stonith describe [stonith_agent]

たとえば、次のコマンドでは Telnet または SSH 経由の APC 用フェンスエージェントのオプションを表示します。

# pcs stonith describe fence_apc
Stonith options for: fence_apc
  ipaddr (required): IP Address or Hostname
  login (required): Login Name
  passwd: Login password or passphrase
  passwd_script: Script to retrieve password
  cmd_prompt: Force command prompt
  secure: SSH connection
  port (required): Physical plug number or name of virtual machine
  identity_file: Identity file for ssh
  switch: Physical switch number on device
  inet4_only: Forces agent to use IPv4 addresses only
  inet6_only: Forces agent to use IPv6 addresses only
  ipport: TCP port to use for connection with device
  action (required): Fencing Action
  verbose: Verbose mode
  debug: Write debug information to given file
  version: Display version information and exit
  help: Display help and exit
  separator: Separator for CSV created by operation list
  power_timeout: Test X seconds for status change after ON/OFF
  shell_timeout: Wait X seconds for cmd prompt after issuing command
  login_timeout: Wait X seconds for cmd prompt after login
  power_wait: Wait X seconds after issuing ON/OFF
  delay: Wait X seconds before fencing is started
  retry_on: Count of attempts to retry power on
警告

fence_sbd エージェントを除き、method オプションを提供するフェンスエージェントで cycle の値はサポートされていません。データが破損する可能性があるため、この値は指定しないでください。ただし、fence_sbd の場合でもメソッドは指定せず、デフォルト値を使用する必要があります。

4.5.2. フェンスデバイスの作成

フェンスデバイスを作成するコマンドの形式は、以下のとおりです。利用可能なフェンスデバイス作成オプションのリストは、pcs stonith -h の出力を参照してください。

pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op  operation_action operation_options]

以下のコマンドは、1 つのノードに対して、1 つのフェンシングデバイスを作成します。

# pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s

1 つのノードのみをフェンスできるフェンスデバイスや、複数のノードをフェンスできるデバイスもあります。フェンシングデバイスの作成時に指定するパラメーターは、フェンシングデバイスが対応しているか、必要としているかにより異なります。

  • フェンスデバイスの中には、フェンスできるノードを自動的に判断できるものがあります。
  • フェンシングデバイスの作成時に pcmk_host_list パラメーターを使用すると、フェンシングデバイスで制御されるすべてのマシンを指定できます。
  • フェンスデバイスによっては、フェンスデバイスが理解する仕様へのホスト名のマッピングが必要となるものがあります。フェンシングデバイスの作成時に、pcmk_host_map パラメーターを使用して、ホスト名をマッピングできます。

pcmk_host_list パラメーターおよび pcmk_host_map パラメーターの詳細は、フェンシングデバイスの一般的なプロパティー を参照してください。

フェンスデバイスを設定したら、デバイスをテストして正しく機能していることを確認してください。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。

4.5.3. フェンシングデバイスの一般的なプロパティー

フェンシングデバイスにも設定可能な一般的なプロパティーや、フェンスの動作を決定するさまざまなクラスタープロパティーがあります。

クラスターノードは、フェンスリソースが開始しているかどうかに関わらず、フェンスデバイスでその他のクラスターノードをフェンスできます。以下の例外を除き、リソースが開始しているかどうかは、デバイスの定期的なモニターのみを制御するものとなり、使用可能かどうかは制御しません。

  • フェンシングデバイスは、pcs stonith disable stonith_id コマンドを実行して無効にできます。これにより、ノードがそのデバイスを使用できないように設定できます。
  • 特定のノードがフェンシングデバイスを使用できないようにするには、pcs constraint location …​ avoids コマンドで、フェンシングリソースの場所制約を設定できます。
  • stonith-enabled=false を設定すると、フェンシングがすべて無効になります。ただし、実稼働環境でフェンシングを無効にすることは適していないため、フェンシングが無効になっている場合は、Red Hat ではクラスターがサポートされないことに注意してください。

以下の表は、フェンシングデバイスに設定できる一般的なプロパティーを説明します。

Expand
表4.1 フェンシングデバイスの一般的なプロパティー
フィールドデフォルト説明

pcmk_host_map

文字列

 

ホスト名を、ホスト名に対応していないデバイスのポート番号へマッピングします。たとえば、node1:1;node2:2,3 の場合は、node1 にはポート 1 を使用し、node2 にはポート 2 と 3 を使用するようにクラスターに指示します。pcmk_host_map プロパティーは、値の前にバックスラッシュを使用して、pcmk_host_map 値内の特殊文字をサポートします。たとえば、pcmk_host_map="node3:plug\ 1" を指定して、ホストエイリアスにスペースを含めることができます。

pcmk_host_list

文字列

 

このデバイスで制御するマシンのリストです (pcmk_host_check=static-list 以外は任意)。

pcmk_host_check

文字列

* pcmk_host_list または pcmk_host_map が設定されている場合は static-list

* それが設定されておらず、フェンスデバイスが list アクションに対応する場合は dynamic-list になります。

* それ以外で、フェンスデバイスが status アクションに対応している場合は status になります。

* それ以外は、none になります。

デバイスで制御するマシンを指定します。使用できる値は、dynamic-list (デバイスへの問い合わせ)、static-list (pcmk_host_list 属性の確認)、なし (すべてのデバイスで全マシンのフェンスが可能と見なされる) です。

以下の表では、フェンシングデバイスに設定できるその他のプロパティーをまとめています。これらのオプションは高度な設定を行う場合にのみ使用されます。

Expand
表4.2 フェンシングデバイスの高度なプロパティー
フィールドデフォルト説明

pcmk_host_argument

文字列

port

port の代替パラメーターです。デバイスによっては、標準の port パラメーターに対応していない場合や、そのデバイス固有のパラメーターも提供している場合があります。このパラメーターを使用して、デバイス固有の代替パラメーターを指定します。これは、フェンシングするマシンを示します。クラスターが追加パラメーターを提供しないようにする場合は、none 値を使用します。

pcmk_reboot_action

文字列

reboot

reboot の代替コマンドです。標準的なコマンドに対応していないデバイスや、別のコマンドを提供しているデバイスがあります。このパラメーターを使用して、再起動を実行するデバイス固有の代替コマンドを指定します。

pcmk_reboot_timeout

時間

60s

stonith-timeout の代替コマンドで、再起動にタイムアウトを指定します。再起動が完了するまでに通常より長い時間を要するデバイスもあれば、通常より短い時間で完了するデバイスもあります。このパラメーターを使用して、再起動にデバイス固有のタイムアウトを指定します。

pcmk_reboot_retries

整数

2

タイムアウト期間内に、reboot コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による再起動の動作の再試行回数を変更する場合に使用します。

pcmk_off_action

文字列

off

off の代替コマンドです。標準的なコマンドに対応していないデバイスや、別のコマンドを提供しているデバイスがあります。このような場合は、このパラメーターを使用して、オフ操作を実行するデバイス固有のコマンドを指定します。

pcmk_off_timeout

時間

60s

stonith-timeout の代替コマンドで、オフ操作にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、オフ操作にデバイス固有のタイムアウトを指定します。

pcmk_off_retries

整数

2

タイムアウト期間内に、off コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker によるオフ動作の再試行回数を変更する場合に使用します。

pcmk_list_action

文字列

list

list の代替コマンドです。標準的なコマンドに対応していないデバイスや、別のコマンドを提供しているデバイスがあります。このような場合は、このパラメーターを使用して、list 操作を実行するデバイス固有のコマンドを指定します。

pcmk_list_timeout

時間

60s

list 操作にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、list 操作にデバイス固有のタイムアウトを指定します。

pcmk_list_retries

整数

2

タイムアウト期間内に、list コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による list 動作の再試行回数を変更する場合に使用します。

pcmk_monitor_action

文字列

monitor

monitor の代替コマンドです。標準的なコマンドに対応していないデバイスや、別のコマンドを提供しているデバイスがあります。このような場合は、このパラメーターを使用して、監視操作を実行するデバイス固有のコマンドを指定します。

pcmk_monitor_timeout

時間

60s

stonith-timeout の代替コマンドで、監視にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、監視操作にデバイス固有のタイムアウトを指定します。

pcmk_monitor_retries

整数

2

タイムアウト期間内に、monitor コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による監視操作の再試行回数を変更する場合に使用します。

pcmk_status_action

文字列

status

status の代替コマンドです。標準的なコマンドに対応していないデバイスや、別のコマンドを提供しているデバイスがあります。このような場合は、このパラメーターを使用して、status 操作を実行するデバイス固有のコマンドを指定します。

pcmk_status_timeout

時間

60s

stonith-timeout の代替コマンドで、status 操作にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、status 操作にデバイス固有のタイムアウトを指定します。

pcmk_status_retries

整数

2

タイムアウト期間内に、status コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による status 動作の再試行回数を変更する場合に使用します。

pcmk_delay_base

文字列

0s

フェンシング操作のベース遅延を有効にし、ベース遅延の値を指定します。pcmk_delay_base パラメーターを使用して、ノードごとに異なる値を指定できます。フェンシング遅延パラメーターとその相互作用に関する一般的な情報は、フェンシング遅延 を参照してください。

pcmk_delay_max

時間

0s

フェンシング操作のランダム遅延を有効にし、ベース遅延とランダム遅延を組み合わせた最大値である最大遅延を指定します。たとえば、ベース遅延が 3 で、pcmk_delay_max が 10 の場合、ランダム遅延は 3 - 10 になります。フェンシング遅延パラメーターとその相互作用に関する一般的な情報は、フェンシング遅延 を参照してください。

pcmk_action_limit

整数

1

このデバイスで並行して実行できる操作の上限です。最初に、クラスタープロパティーの concurrent-fencing=true を設定する必要があります (これがデフォルト値です)。値を -1 にすると無制限になります。

pcmk_on_action

文字列

on

高度な使用のみ - on の代替コマンドです。標準的なコマンドに対応していないデバイスや、別のコマンドを提供しているデバイスがあります。このような場合は、このパラメーターを使用して、on 操作を実行するデバイス固有のコマンドを指定します。

pcmk_on_timeout

時間

60s

高度な使用のみ - stonith-timeout の代替コマンドで、on 操作にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、on 操作にデバイス固有のタイムアウトを指定します。

pcmk_on_retries

整数

2

高度な使用のみ - タイムアウト期間内に、on コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が 失敗 する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による on 動作の再試行回数を変更する場合に使用します。

個々のフェンスデバイスに設定できるプロパティーのほかにも、以下の表で説明しているように、フェンス動作を判断するクラスタープロパティーも設定できます。

Expand
表4.3 フェンスの動作を決定するクラスタープロパティー
オプションデフォルト説明

stonith-enabled

true

障害が発生したノードと、停止できないリソースが含まれるノードをフェンスする必要があることを示します。データを保護するには、true に設定する必要があります。

true または未設定の場合は、STONITH リソースが設定されていない限り、クラスターによりリソースの起動が拒否されます。

Red Hat は、この値が true に設定されたクラスターのみをサポートします。

stonith-action

reboot

フェンシングデバイスに送信するアクション。使用できる値は rebootoff です。poweroff 値も使用できますが、レガシーデバイスでのみ使用されます。

stonith-timeout

60s

STONITH アクションが完了するのを待つ時間。

stonith-max-attempts

10

クラスターがすぐに再起動できなくなるまで、ターゲットでフェンシングが失敗する回数。

stonith-watchdog-timeout

 

ノードがハードウェアウォッチドッグによって強制終了すまで待機する最大時間。この値は、ハードウェアウォッチドッグのタイムアウト値の倍に設定することが推奨されます。このオプションは、ウォッチドッグのみの SBD 設定がフェンシングに使用される場合にのみ必要です。

concurrent-fencing

true

フェンシング操作を並行して実行できるようにします。

fence-reaction

stop

独自のフェンシングの通知を受信した場合は、クラスターノードがどのように反応するかを決定します。クラスターノードは、フェンシングの設定が間違っている場合に独自のフェンシングの通知を受信するか、ファブリックフェンシングがクラスター通信を遮断しない状態である可能性があります。許可される値は、Pacemaker をすぐに停止し、停止したままにする stop と、ローカルノードを直ちに再起動して失敗した場合に停止する panic です。

このプロパティーのデフォルト値は stop ですが、この値に最も安全な選択肢は panic であり、ローカルノードを直ちに再起動しようとします。停止動作を希望する場合は、おそらくファブリックフェンシングと併用する場合は、明示的に指定することが推奨されます。

priority-fencing-delay

0 (無効)

フェンシング遅延を設定すると、スプリットブレインが発生した場合に、リソースの実行数が最も少ない、または実行中のリソースの重要性が最も低いノードがフェンスされるように、2 ノードクラスターを設定できます。フェンシング遅延パラメーターとその相互作用に関する一般的な情報は、フェンシング遅延 を参照してください。

クラスタープロパティーの設定は、https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_high_availability_clusters/index#setting-cluster-properties を参照してください。

4.5.4. フェンシング遅延

2 ノードクラスターでクラスター通信が失われると、一方のノードがこれを先に検出し、他方のノードをフェンスすることがあります。ただし、両方のノードが同時に検出した場合、各ノードが他方のノードのフェンシングを開始した結果、両方のノードの電源がオフになるかリセットされる可能性があります。フェンシング遅延を設定すると、両方のクラスターノードが相互にフェンスし合う可能性を減らすことができます。3 つ以上のノードを持つクラスターでも遅延を設定できますが、クォーラムのあるパーティションしかフェンシングを開始しないため、通常は利点がありません。

システム要件に応じて、さまざまなタイプのフェンシング遅延を設定できます。

  • 静的フェンシング遅延

    静的フェンシング遅延は、事前に定義された固定の遅延です。1 つのノードに静的遅延を設定すると、そのノードがフェンシングされる可能性が高くなります。これは、通信の切断を検出した後、他のノードが先にフェンシングを開始する可能性が高まるためです。active/passive クラスターでは、passive ノードに遅延を設定すると、通信が切断されたときに passive ノードがフェンスされる可能性が高くなります。静的遅延を設定するには、pcs_delay_base クラスタープロパティーを使用します。このプロパティーは、各ノードに個別のフェンスデバイスが使用される場合、または単一のフェンスデバイスがすべてのノードに使用される場合に設定できます。

  • 動的フェンシング遅延

    動的フェンシング遅延はランダムです。この遅延は変化する可能性があり、フェンシングが必要なタイミングで決定されます。ランダム遅延を設定し、ベース遅延とランダム遅延を組み合わせた最大値を pcs_delay_max クラスタープロパティーで指定します。各ノードのフェンシング遅延がランダムの場合、どのノードがフェンスされるかもランダムです。この機能は、active/active 設計のすべてのノードに対して単一のフェンスデバイスを使用してクラスターが設定されている場合に便利です。

  • 優先フェンシング遅延

    優先フェンシング遅延は、アクティブなリソースの優先度に基づきます。すべてのリソースの優先度が同じ場合、実行中のリソースが最も少ないノードがフェンスされます。ほとんどの場合、遅延関連のパラメーターは 1 つしか使用しませんが、複数のパラメーターを組み合わせることも可能です。遅延関連のパラメーターを組み合わせると、リソースの優先度の値が加算されて、総遅延となります。優先フェンシング遅延は、priority-fencing-delay クラスタープロパティーを使用して設定します。この機能を使用すると、ノード間の通信が失われたときに、実行中のリソースが最も少ないノードがフェンスされる可能性が高くなるため、active/active クラスター設計で役立つ場合があります。

pcmk_delay_base クラスタープロパティー

pcmk_delay_base クラスタープロパティーを設定すると、フェンシングのベース遅延が有効になり、ベース遅延の値が指定されます。

pcmk_delay_base プロパティーに加えて pcmk_delay_max クラスタープロパティーを設定すると、この静的遅延にランダム遅延を追加した合計値が最大遅延を下回るように、全体の遅延が導出されます。pcmk_delay_base を設定し、pcmk_delay_max を設定しない場合は、遅延にランダムなコンポーネントは含まれず、遅延は pcmk_delay_base の値となります。

pcmk_delay_base パラメーターを使用して、ノードごとに異なる値を指定できます。これにより、ノードごとに異なる遅延を使用して、単一のフェンスデバイスを 2 ノードクラスターで使用できます。別個の遅延を使用するために 2 つの別個のデバイスを設定する必要はありません。ノードごとに異なる値を指定するには、pcmk_host_map と同様の構文を使用して、ホスト名をそのノードの遅延値にマップします。たとえば、node1:0;node2:10s は、node1 をフェンシングするときに遅延を使用せず、node2 をフェンシングするときに 10 秒の遅延を使用します。

pcmk_delay_max クラスタープロパティー

pcmk_delay_max クラスタープロパティーを設定すると、フェンシング操作のランダム遅延が有効になり、ベース遅延とランダム遅延を組み合わせた最大値である最大遅延が指定されます。たとえば、ベース遅延が 3 で、pcmk_delay_max が 10 の場合、ランダム遅延は 3 - 10 になります。

pcmk_delay_max プロパティーに加えて pcmk_delay_base クラスタープロパティーを設定すると、この静的遅延にランダム遅延を追加した合計値が最大遅延を下回るように、全体の遅延が導出されます。pcmk_delay_max を設定し、pcmk_delay_base を設定しない場合は、遅延に静的なコンポーネントは含まれません。

priority-fencing-delay クラスタープロパティー

priority-fencing-delay クラスタープロパティーを設定すると、スプリットブレインが発生した場合に、リソースの実行数が最も少ない、または実行中のリソースの重要性が最も低いノードがフェンスされるように、2 ノードクラスターを設定できます。

priority-fencing-delay プロパティーは期間に設定できます。このプロパティーのデフォルト値は 0 (無効) です。このプロパティーがゼロ以外の値に設定されている場合や、priority メタ属性が 1 つ以上のリソースに対して設定されている場合は、スプリットブレインが発生すると、実行中の全リソースの合計優先度が最も高いノードが稼働状態を維持する可能性が高くなります。たとえば、pcs resource defaults update priority=1pcs property set priority-fencing-delay=15s を設定し、他の優先度が設定されていない場合には、最も多くのリソースを実行するノード以外はフェンシングを開始するまで 15 秒間待機するため、最も多くのリソースを実行するノードが稼働状態を維持する可能性が高くなります。特定のリソースが他のリソースよりも重要である場合は、優先度を高く設定できます。

昇格可能なクローンに優先度が設定されている場合、そのクローンのプロモートロールを実行しているノードの優先度が 1 ポイント追加されます。

フェンシング遅延の相互作用

複数のタイプのフェンシング遅延を設定すると、以下のようになります。

  • priority-fencing-delay プロパティーで遅延を設定すると、その遅延は pcmk_delay_basepcmk_delay_max のフェンスデバイスプロパティーの遅延に追加されます。この動作により、両方のノードの優先度が同等の場合、またはノードの損失以外の理由で両方のノードをフェンシングする必要がある場合 (たとえば、on-fail=fencing がリソースモニター操作用に設定されている場合)、ある程度の遅延を許容します。これらの遅延を組み合わせて設定する場合は、優先ノードが優先されるよう、priority-fencing-delay プロパティーを、pcmk_delay_base および pcmk_delay_max の最大遅延よりもはるかに大きい値に設定します。このプロパティーを 2 倍の値に設定すると、常に安全です。
  • Pacemaker 自体がスケジュールしたフェンシングしか、フェンシング遅延を監視しません。dlm_controld などの外部コードでスケジュールされるフェンシングや、pcs stonith fence コマンドで実装されるフェンシングは、フェンスデバイスに必要な情報を提供しません。
  • 個々のフェンスエージェントの中には遅延パラメーターが実装されたものがあります。このパラメーターは、エージェントによって決定された名前を持ち、pcmk_delay_* プロパティーで設定された遅延の影響は受けません。両方の遅延が設定されている場合は、その両方が一緒に追加され、通常は併用されません。

4.5.5. フェンスデバイスのテスト

フェンシングは、Red Hat Cluster インフラストラクチャーの基本的な部分を設定しているため、フェンシングが適切に機能していることを確認またはテストすることは重要です。

注記

Pacemaker クラスターノードまたは Pacemaker リモートノードがフェンスされると、オペレーティングシステムのグレースフルシャットダウンではなく、ハードキルが実行されるはずです。システムがノードをフェンスするときにグレースフルシャットダウンが発生する場合は、/etc/systemd/logind.conf ファイルで ACPI soft-off を無効にして、電源ボタンが押されたことを示す信号をシステムが無視するようにします。logind.conf ファイルで ACPI Soft-Off を無効にする手順は、logind.conf ファイルでの ACPI Soft-Off の無効化 を参照してください。

以下の手順で、フェンスデバイスをテストします。

手順

  1. デバイスへの接続に使用する SSH、Telnet、HTTP などのリモートプロトコルを使用して、手動でログインしてフェンスデバイスをテストしたり、出力される内容を確認します。たとえば、IPMI 対応デバイスのフェンシングを設定する場合は、ipmitool を使用してリモートでのログインを試行します。手動でログインする際に使用するオプションに注意してください。これらのオプションは、フェンスエージェントを使用する際に必要になる場合があります。

    フェンシングデバイスにログインできない場合は、そのデバイスが ping 可能であること、ファイアウォール設定がフェンシングデバイスへのアクセスを妨げていないこと、フェンシングデバイスでリモートアクセスが有効になっていること、認証情報が正しいことなどを確認します。

  2. フェンスエージェントスクリプトを使用して、フェンスエージェントを手動で実行します。フェンスエージェントを実行するのに、クラスターサービスが実行している必要はないため、デバイスをクラスターに設定する前にこのステップを完了できます。これにより、先に進む前に、フェンスデバイスが適切に応答することを確認できます。

    注記

    これらの例では、iLO デバイスの fence_ipmilan フェンスエージェントスクリプトを使用します。実際に使用するフェンスエージェントと、そのエージェントを呼び出すコマンドは、お使いのサーバーハードウェアによって異なります。指定するオプションを確認するには、フェンスエージェントの man ページを参照してください。通常は、フェンスデバイスのログイン、パスワードなどの情報と、その他のフェンスデバイスに関する情報を把握しておく必要があります。

    以下の例は、-o status パラメーターを指定して fence_ipmilan フェンスエージェントスクリプトを実行する場合に使用する形式を示しています。このコマンドを実行すると、フェンシングは実行せずに、別のノードのフェンスデバイスインターフェイスのステータスを確認します。ノードの再起動を試行する前にデバイスをテストして、動作させることができます。このコマンドを実行する際に、iLO デバイスの電源をオン/オフにするパーミッションを持つ iLO ユーザーの名前およびパスワードを指定します。

    # fence_ipmilan -a ipaddress -l username -p password -o status

    以下の例は、-o reboot パラメーターを指定して fence_ipmilan フェンスエージェントスクリプトを実行するために使用する形式を示しています。このコマンドを 1 つのノードで実行すると、この iLO デバイスで管理するノードが再起動します。

    # fence_ipmilan -a ipaddress -l username -p password -o reboot

    フェンスエージェントがステータス、オフ、オン、または再起動の動作を適切に実行しない場合は、ハードウェア、フェンスデバイスの設定、およびコマンドの構文を確認する必要があります。さらに、デバッグ出力を有効にした状態で、フェンスエージェントスクリプトを実行できます。デバッグ出力は、一部のフェンスエージェントで、フェンスデバイスにログインする際に、フェンスエージェントスクリプトに問題が発生しているイベントシーケンスの場所を確認するのに役に立ちます。

    # fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug

    発生した障害を診断する際に、フェンスデバイスに手動でログインする際に指定したオプションが、フェンスエージェントスクリプトでフェンスエージェントに渡した内容と同一であることを確認する必要があります。

    フェンスエージェントが、暗号化した接続に対応する場合は、証明書の検証で障害が生じているためにエラーが出力される場合があり、ホストを信頼することや、フェンスエージェントの ssl-insecure パラメーターを使用することが求められます。同様に、ターゲットデバイスで SSL/TLS を無効にした場合は、フェンスエージェントに SSL パラメーターを設定する際に、これを考慮しないといけない場合があります。

    注記

    テスト対象のフェンスエージェントが fence_drac または fence_ilo の場合、もしくはその他の、継続して失敗しているシステム管理デバイスのフェンシングエージェントの場合は、フォールバックして fence_ipmilan を試行します。大半のシステム管理カードは IPMI リモートログインに対応しており、フェンスエージェントとしては fence_ipmilan だけに対応しています。

  3. フェンスデバイスを、手動で機能したオプションと同じオプションでクラスターに設定し、クラスターを起動したら、以下の例にあるように、任意のノードから pcs stonith fence コマンドを実行してフェンシングをテストします (または複数のノードから複数回実行します)。pcs stonith fence コマンドは、CIB からクラスター設定を読み取り、フェンス動作を実行するように設定されたフェンスエージェントを呼び出します。これにより、クラスター設定が正確であることが確認できます。

    # pcs stonith fence node_name

    pcs stonith fence コマンドが正常に動作する場合は、フェンスイベントが発生したときにクラスターのフェンシング設定が機能することを意味します。このコマンドが失敗すると、クラスター管理が取得した設定でフェンスデバイスを起動することができません。以下の問題を確認し、必要に応じてクラスター設定を更新します。

    • フェンス設定を確認します。たとえば、ホストマップを使用したことがある場合は、指定したホスト名を使用して、システムがノードを見つけられるようにする必要があります。
    • デバイスのパスワードおよびユーザー名に、bash シェルが誤って解釈する可能性がある特殊文字が含まれるかどうかを確認します。パスワードとユーザー名を引用符で囲んで入力すると、この問題に対処できます。
    • pcs stonith コマンドで指定したものとまったく同じ IP アドレスまたはホスト名を使用してデバイスに接続できるか確認します。たとえば、stonith コマンドでホスト名を指定し、IP アドレスを使用して行ったテストは有効ではありません。
    • フェンスデバイスが使用するプロトコルにアクセスできる場合は、そのプロトコルを使用してデバイスへの接続を試行します。たとえば、多くのエージェントが ssh または telnet を使用します。デバイスへの接続は、デバイスの設定時に指定した認証情報を使用して試行する必要があります。これにより、有効なプロンプトを取得し、そのデバイスにログインできるかどうかを確認できます。

      すべてのパラメーターが適切であることが確認できたものの、フェンスデバイスには接続できない時に、フェンスデバイスでログ機能が使用できる場合は、ログを確認できます。これにより、ユーザーが接続したかどうかと、ユーザーが実行したコマンドが表示されます。/var/log/messages ファイルで stonith やエラーを確認すれば、発生している問題のヒントが得られる可能性もあります。また、エージェントによっては、より詳細な情報が得られる場合があります。

  4. フェンスデバイステストに成功し、クラスターが稼働したら、実際の障害をテストします。このテストでは、クラスターで、トークンの損失を生じさせる動作を実行します。

    • ネットワークを停止します。ネットワークの利用方法は、設定により異なります。ただし、多くの場合は、ネットワークケーブルまたは電源ケーブルをホストから物理的に抜くことができます。ネットワーク障害のシミュレーションの詳細は、Red Hat ナレッジベースソリューション What is the proper way to simulate a network failure on a RHEL Cluster? を参照してください。

      注記

      ネットワークや電源ケーブルを物理的に切断せずに、ローカルホストのネットワークインターフェイスを無効にすることは、フェンシングのテストとしては推奨されません。実際に発生する障害を正確にシミュレートしていないためです。

    • ローカルのファイアウォールを使用して、corosync の受信トラフィックおよび送信トラフィックをブロックします。

      以下の例では corosync をブロックします。ここでは、デフォルトの corosync ポートと、ローカルのファイアウォールとして firewalld が使用されていることと、corosync が使用するネットワークインターフェイスがデフォルトのファイアウォールゾーンにあることが前提となっています。

      # firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP
      # firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop
    • sysrq-trigger でクラッシュをシミュレートし、マシンをクラッシュします。ただし、カーネルパニックを発生させると、データが損失する可能性があることに注意してください。クラッシュする前に、クラスターリソースを無効にすることが推奨されます。

      # echo c > /proc/sysrq-trigger

4.5.6. フェンスレベルの設定

Pacemaker は、フェンストポロジーと呼ばれる機能を用いて、複数デバイスでのノードのフェンシングに対応します。トポロジーを実装するには、通常の方法で各デバイスを作成し、設定のフェンストポロジーセクションでフェンスレベルを 1 つ以上定義します。

Pacemaker は、以下のようにフェンシングレベルを処理します。

  • レベルは、1 から昇順で試行されていきます。
  • デバイスに障害が発生すると、現在のレベルの処理が終了します。同レベルのデバイスには試行されず、次のレベルが試行されます。
  • すべてのデバイスのフェンシングが正常に完了すると、そのレベルが継承され、他のレベルは試行されなくなります。
  • いずれかのレベルで成功するか、すべてのレベルが試行され失敗すると、操作は終了します。

ノードにフェンスレベルを追加する場合は、次のコマンドを使用します。デバイスは、stonith ID をコンマ区切りのリストとして指定します。stonith ID が、指定したレベルで試行されます。

pcs stonith level add level node devices

次の例では、デバイス my_ilo に障害が発生してノードをフェンスできない場合に、Pacemaker がデバイス my_apc の使用を試みるようにフェンスレベルを設定します。

前提条件

  • ノード rh7-2my_ilo という ilo フェンスデバイスを設定した。
  • ノード rh7-2my_apc という apc フェンスデバイスを設定した。

手順

  1. ノード rh7-2 のフェンスデバイス my_ilo にフェンシングレベル 1 を追加します。

    # pcs stonith level add 1 rh7-2 my_ilo
  2. ノード rh7-2 のフェンスデバイス my_apc にフェンシングレベル 2 を追加します。

    # pcs stonith level add 2 rh7-2 my_apc
  3. 現在設定されているフェンシングレベルをリスト表示します。

    # pcs stonith level
     Node: rh7-2
      Level 1 - my_ilo
      Level 2 - my_apc

ノード属性の詳細は、https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html-single/configuring_and_managing_high_availability_clusters/index#node-attributes を参照してください。

4.5.7. フェンスレベルの削除

特定のノードおよびデバイスのフェンスレベルを削除できます。ノードやデバイスを指定しないと、指定したフェンスレベルがすべてのノードから削除されます。

手順

  • 特定のノードとデバイスのフェンスレベルを削除します。

    # pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]

4.5.8. フェンスレベルのクリア

特定のノードまたは stonith ID のフェンスレベルをクリアできます。ノードや stonith id を指定しないと、すべてのフェンスレベルが削除されます。

手順

  • 特定のノードまたは stinith ID のフェンスレベルをクリアします。

    # pcs stonith level clear [node]|stonith_id(s)]
  • 複数の stonith ID を指定する場合はコンマで区切って指定します。空白は入力しないでください。以下に例を示します。

    # pcs stonith level clear dev_a,dev_b

4.5.9. フェンスレベルでのノードとデバイスの検証

フェンスレベルで指定されているすべてのフェンスデバイスとノードが存在することを確認できます。

手順

  • フェンスレベルで指定されているすべてのフェンスデバイスとノードが存在することを確認するには、次のコマンドを使用します。

    # pcs stonith level verify

4.5.10. フェンシングトポロジーにおけるノードの指定

フェンストポロジーのノードは、ノード名に適用する正規表現と、ノードの属性 (およびその値) で指定できます。

手順

  • 次のコマンドでは、ノード node1node2、および node3 がフェンスデバイス apc1 および apc2 を使用するように設定し、ノード node4node5、および node6 がフェンスデバイス apc3 および apc4 を使用するように設定します。

    # pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2
    # pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4
  • 次のコマンドでは、ノード属性のマッチングを使用して同じ結果を実現します。

    # pcs node attribute node1 rack=1
    # pcs node attribute node2 rack=1
    # pcs node attribute node3 rack=1
    # pcs node attribute node4 rack=2
    # pcs node attribute node5 rack=2
    # pcs node attribute node6 rack=2
    # pcs stonith level add 1 attrib%rack=1 apc1,apc2
    # pcs stonith level add 1 attrib%rack=2 apc3,apc4

4.5.11. 冗長電源のフェンシング設定

冗長電源にフェンシングを設定する場合は、ホストを再起動するときに、クラスターが、最初に両方の電源をオフにしてから、いずれかの電源をオンにするようにする必要があります。

ノードの電源が完全にオフにならないと、ノードがリソースを解放しない場合があります。このとき、解放できなかったリソースに複数のノードが同時にアクセスして、リソースが破損する可能性があります。

各デバイスを一度だけ定義し、両方のデバイスがノードのフェンスに必要であると指定する必要があります。

手順

  1. 最初のフェンスデバイスを作成します。

    # pcs stonith create apc1 fence_apc_snmp ipaddr=apc1.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
  2. 2 つ目のフェンスデバイスを作成します。

    # pcs stonith create apc2 fence_apc_snmp ipaddr=apc2.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
  3. ノードをフェンスするには両方のデバイスが必要であることを指定します。

    # pcs stonith level add 1 node1.example.com apc1,apc2
    # pcs stonith level add 1 node2.example.com apc1,apc2

4.5.12. フェンスデバイスの管理

pcs コマンドラインインターフェイスは、フェンスデバイスを設定した後にそれらの管理に使用できるさまざまなコマンドを提供します。

4.5.12.1. 設定済みのフェンスデバイスの表示

以下のコマンドは、現在設定されているフェンスデバイスをすべて表示します。stonith_id が指定されている場合、コマンドはその設定されたフェンシングデバイスのみのオプションを表示します。--full オプションが指定されている場合、すべての設定されたフェンシングオプションが表示されます。

pcs stonith config [stonith_id] [--full]
4.5.12.2. pcs コマンドとしてのフェンスデバイスのエクスポート

pcs stonith config コマンドの --output-format=cmd オプションを使用して、別のシステムで設定されたフェンスデバイスを再作成するために使用できる pcs コマンドを表示できます。

次のコマンドは、fence_apc_snmp フェンスデバイスを作成し、デバイスを再作成するために使用できる pcs コマンドを表示します。

# pcs stonith create myapc fence_apc_snmp ip="zapc.example.com" pcmk_host_map="z1.example.com:1;z2.example.com:2" username="apc" password="apc"
# pcs stonith config --output-format=cmd
Warning: Only 'text' output format is supported for stonith levels
pcs stonith create --no-default-ops --force -- myapc fence_apc_snmp \
  ip=zapc.example.com password=apc 'pcmk_host_map=z1.example.com:1;z2.example.com:2' username=apc \
  op \
    monitor interval=60s id=myapc-monitor-interval-60s
4.5.12.3. フェンスレベル設定のエクスポート

pcs stonith configpcs stonith level config コマンドは、フェンシングレベル設定を JSON 形式と pcs コマンドとしてエクスポートする --output-format= オプションをサポートしています。

  • --output-format=cmd を指定すると、フェンシングレベルを設定する現在のクラスター設定から作成された pcs コマンドが表示されます。これらのコマンドを使用して、別のシステムで設定されたフェンシングレベルを再作成できます。
  • --output-format=json を指定すると、マシン解析に適した JSON 形式でフェンシングレベル設定が表示されます。
4.5.12.4. フェンスデバイスの修正と削除

次のコマンドを使用して、現在設定されているフェンシングデバイスのオプションを変更または追加します。

pcs stonith update stonith_id [stonith_device_options]

pcs stonith update コマンドを使用して SCSI フェンシングデバイスを更新すると、フェンシングリソースが実行されていたものと同じノードで実行中のすべてのリソースが再起動されます。以下のコマンドのいずれかのバージョンを使用して、他のクラスターリソースを再起動しなくても SCSI デバイスを更新できます。SCSI フェンシングデバイスは、マルチパスデバイスとして設定できます。

pcs stonith update-scsi-devices stonith_id set device-path1 device-path2
pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2

現在の設定からフェンシングデバイスを削除する場合は次のコマンドを使用します。

pcs stonith delete stonith_id
4.5.12.5. 手動によるクラスターノードのフェンシング

次のコマンドで、ノードを手動でフェンスできます。--off オプションを指定すると、stonith への off API 呼び出しが使用され、ノードを再起動する代わりにノードをオフにします。

pcs stonith fence node [--off]

ノードがアクティブでない場合でも、フェンスデバイスがそのノードをフェンスできない状況では、ノードのリソースをクラスターが復旧できない可能性があります。この場合は、ノードの電源が切れたことを手動で確認した後、次のコマンドを入力して、ノードの電源が切れたことをクラスターに確認し、そのリソースを回復のために解放できます。

警告

指定したノードが実際にはオフになっていないが、クラスターによって通常制御されるクラスターソフトウェアまたはサービスを実行している場合は、データの破損とクラスター障害が発生します。

pcs stonith confirm node
4.5.12.6. フェンスデバイスの無効化

フェンシングデバイスを無効にするには、pcs stonith disable コマンドを実行します。

以下のコマンドは、フェンスデバイス myapc を無効にします。

# pcs stonith disable myapc
4.5.12.7. ノードがフェンシングデバイスを使用しないように設定する手順

特定のノードがフェンシングデバイスを使用できないようにするには、フェンスリソースの場所の制約を設定します。

以下の例では、フェンスデバイスの node1-ipmi が、node1 で実行されないようにします。

# pcs constraint location node1-ipmi avoids node1

4.5.13. 統合フェンスデバイスで使用する ACPI の設定

クラスターが統合フェンスデバイスを使用する場合は、即時かつ完全なフェンシングを実行できるように、ACPI (Advanced Configuration and Power Interface) を設定する必要があります。

クラスターノードが統合フェンスデバイスでフェンシングされるように設定されている場合は、そのノードの ACPI Soft-Off を無効にします。ACPI Soft-Off を無効にすると、統合フェンスデバイスは、クリーンなシャットダウン (たとえば、shutdown -h now) を試行するのではなく、ノードを即座に完全にオフにすることができます。一方で、ACPI Soft-Off が有効になっていると、統合フェンスデバイスがノードをオフにするのに 4 秒以上かかることがあります (以下の注記部分を参照してください)。さらに、ACPI Soft-Off が有効になっていて、ノードがシャットダウン時にパニック状態になるか、フリーズすると、統合フェンスデバイスがノードをオフにできない場合があります。このような状況では、フェンシングが遅延するか、失敗します。したがって、ノードが統合フェンスデバイスでフェンシングされ、ACPI Soft-Off が有効になっている場合は、クラスターが徐々に復元します。または管理者の介入による復旧が必要になります。

注記

ノードのフェンシングにかかる時間は、使用している統合フェンスデバイスによって異なります。統合フェンスデバイスの中には、電源ボタンを押し続けるのと同じ動作を実行するものもあります。この場合は、ノードがオフになるのに 4 秒から 5 秒かかります。また、電源ボタンを押してすぐ離すのと同等の動作を行い、ノードの電源をオフにする行為をオペレーティングシステムに依存する統合フェンスデバイスもあります。この場合は、ノードがオフになるのにかかる時間は 4~ 5 秒よりも長くなります。

  • ACPI Soft-Off を無効にする場合は、BIOS での ACPI Soft-Off の無効化 で説明されているように、BIOS 設定を "instant-off" に変更するか、ノードを遅延なくオフにする同等の設定に変更することを推奨します。

システムによっては、BIOS で ACPI Soft-Off を無効にできません。お使いのクラスターでは、BIOS で ACPI Soft-Off を無効にできない場合に、以下のいずれかの方法で ACPI Soft-Off を無効にできます。

  • logind.conf ファイルでの ACPI Soft-Off の無効化 の説明に従って、/etc/systemd/logind.conf ファイルで HandlePowerKey=ignore を設定し、ノードがフェンスされたときに直ちにオフになることを確認します。これが、ACPI Soft-Off を無効にする 1 つ目の代替方法です。
  • GRUB 2 ファイルを使用した ACPI の完全な無効化 の説明に従って、カーネルブートコマンドラインに acpi=off を追加します。これは、ACPI Soft-Off を無効にする 2 つ目の代替方法です。この方法の使用が推奨される場合、または 1 つ目の代替方法が利用できない場合に使用してください。

    重要

    この方法は、ACPI を完全に無効にします。コンピューターの中には、ACPI が完全が無効になってるとシステムが正しく起動しないものもあります。お使いのクラスターに適した方法が他にない場合に 限り、この方法を使用してください。

4.5.13.1. BIOS で ACPI Soft-Off を無効化

以下の手順で、各クラスターノードの BIOS を設定して、ACPI Soft-Off を無効にできます。

注記

BIOS で ACPI Soft-Off を無効にする手順は、サーバーシステムにより異なる場合があります。この手順は、お使いのハードウェアのドキュメントで確認する必要があります。

手順

  1. ノードを再起動して BIOS CMOS Setup Utility プログラムを起動します。
  2. 電源メニュー (または同等の電源管理メニュー) に移動します。
  3. 電源メニューで、Soft-Off by PWR-BTTN 機能 (または同等) を Instant-Off (または、遅延なく電源ボタンでノードをオフにする同等の設定) に設定します。以下の BIOS CMOS Setup Utiliy の例は、ACPI FunctionEnabled に設定され、Soft-Off by PWR-BTTNInstant-Off に設定されている Power メニューを示しています。

    注記

    ACPI FunctionSoft-Off by PWR-BTTN、および Instant-Off に相当するものは、コンピューターによって異なります。ただし、この手順の目的は、電源ボタンを使用して遅延なしにコンピューターをオフにするように BIOS を設定することです。

  4. BIOS CMOS Setup Utility プラグラムを終了します。BIOS 設定が保存されます。
  5. ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。

BIOS CMOS Setup Utility:

`Soft-Off by PWR-BTTN` set to
`Instant-Off`

+---------------------------------------------|-------------------+
|    ACPI Function             [Enabled]      |    Item Help      |
|    ACPI Suspend Type         [S1(POS)]      |-------------------|
|  x Run VGABIOS if S3 Resume   Auto          |   Menu Level   *  |
|    Suspend Mode              [Disabled]     |                   |
|    HDD Power Down            [Disabled]     |                   |
|    Soft-Off by PWR-BTTN      [Instant-Off   |                   |
|    CPU THRM-Throttling       [50.0%]        |                   |
|    Wake-Up by PCI card       [Enabled]      |                   |
|    Power On by Ring          [Enabled]      |                   |
|    Wake Up On LAN            [Enabled]      |                   |
|  x USB KB Wake-Up From S3     Disabled      |                   |
|    Resume by Alarm           [Disabled]     |                   |
|  x  Date(of Month) Alarm       0            |                   |
|  x  Time(hh:mm:ss) Alarm       0 :  0 :     |                   |
|    POWER ON Function         [BUTTON ONLY   |                   |
|  x KB Power ON Password       Enter         |                   |
|  x Hot Key Power ON           Ctrl-F1       |                   |
|                                             |                   |
|                                             |                   |
+---------------------------------------------|-------------------+

この例では、ACPI FunctionEnabled に設定され、Soft-Off by PWR-BTTNInstant-Off に設定されていることを示しています。

4.5.13.2. logind.conf ファイルで ACPI Soft-Off の無効化

/etc/systemd/logind.conf ファイルで電源キーの処理を無効にする場合は、以下の手順を行います。

手順

  1. /etc/systemd/logind.conf ファイルに、以下の設定を定義します。

    HandlePowerKey=ignore
  2. systemd-logind サービスを再起動します。

    # systemctl restart systemd-logind.service

検証

  1. ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
4.5.13.3. GRUB 2 ファイルでの ACPI の完全な無効化

ACPI Soft-Off は、カーネルの GRUB メニューエントリーに acpi=off を追加して無効にできます。

重要

この方法は、ACPI を完全に無効にします。コンピューターの中には、ACPI が完全が無効になってるとシステムが正しく起動しないものもあります。お使いのクラスターに適した方法が他にない場合に 限り、この方法を使用してください。

手順

  1. 以下のように、grubby ツールで、--args オプションと --update-kernel オプションを使用して、各クラスターノードの grub.cfg ファイルを変更します。

    # grubby --args=acpi=off --update-kernel=ALL
  2. ノードを再起動します。

検証

  1. ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は、フェンスデバイスのテスト を参照してください。

4.6. Azure 内部ロードバランサーの作成

Azure 内部ロードバランサーは、ヘルスプローブ要求に応答しないクラスターノードを削除します。次の手順には、特定の Microsoft 手順を参照する各ステップがあり、HA 用にロードバランサーをカスタマイズするための設定が含まれています。

前提条件

手順

  1. 基本ロードバランサーを作成 します。IP アドレスの割り当てタイプの場合は、内部ロードバランサー基本 SKU、および 動的 を選択します。
  2. バックエンドのアドレスプールを作成します。バックエンドプールを HA に Azure リソースを作成した時に作成された可用性セットに関連付けます。ターゲットネットワーク IP 設定は設定しないでください。
  3. ヘルスプローブを作成します。ヘルスプローブの場合は TCP を選択し、ポート 61000 を入力します。別のサービスに干渉しない TCP ポート番号を使用できます。特定の HA 製品アプリケーション (SAP HANA や SQL Server など) には、Microsoft と連携して使用する正しいポートを指定する必要がある場合があります。
  4. ロードバランサールールを作成します。ロードバランシングルールを作成する場合は、デフォルト値が事前に設定されます。フローティング IP (ダイレクトサーバーを返す)有効 に設定してください。

4.7. ロードバランサーリソースエージェントの設定

ヘルスプローブを作成した後、load balancer リソースエージェントを設定する必要があります。このリソースエージェントは、Azure ロードバランサーからヘルスプローブ要求に応答し、要求に応答しないクラスターノードを削除するサービスを実行します。

前提条件

手順

  1. すべてのノードに nmap-ncat リソースエージェントをインストールします。

    # dnf install nmap-ncat resource-agents-cloud
  2. 1 つのノードで以下のステップを実行します。

    1. IPaddr2 アドレスの FrontendIP ロードバランサーを使用して、pcs リソースとグループを作成します。

      # pcs resource create resource-name IPaddr2 ip="10.0.0.7" --group <cluster_resources_group>
    2. load balancer リソースエージェントを設定します。

      # pcs resource create resource-loadbalancer-name azure-lb port=port-number --group <cluster_resources_group>

検証

  • pcs status を実行して結果を表示します。

    [root@node01 clouduser]# pcs status
    
    Cluster name: clusterfence01
    Stack: corosync
    Current DC: node02 (version 1.1.16-12.el7_4.7-94ff4df) - partition with quorum
    Last updated: Tue Jan 30 12:42:35 2018
    Last change: Tue Jan 30 12:26:42 2018 by root via cibadmin on node01
    
    3 nodes configured
    3 resources configured
    
    Online: [ node01 node02 node03 ]
    
    Full list of resources:
    
    clusterfence (stonith:fence_azure_arm):      Started node01
    Resource Group: g_azure
        vip_azure  (ocf::heartbeat:IPaddr2):       Started node02
        lb_azure   (ocf::heartbeat:azure-lb):      Started node02
    
    Daemon Status:
      corosync: active/disabled
      pacemaker: active/disabled
      pcsd: active/enabled

4.8. 共有ブロックストレージの設定

Microsoft Azure 共有ディスクを使用して Red Hat High Availability クラスターの共有ブロックストレージを設定するには、次の手順を使用します。この手順は任意であることに注意してください。

注記

これは、ブロックストレージを設定するためのスタンドアロンのサンプル手順です。この手順では、クラスターを作成していないことを前提としています。

前提条件

手順

  1. 共有ブロックボリューム を作成します。

    $ az disk create -g <resource_group> -n <shared_block_volume_name> --size-gb <disk_size> --max-shares <number_vms> -l <location>

    たとえば、以下のコマンドは、Azure Availability Zone westcentralus 内のリソースグループ sharedblockshared-block-volume.vhd という名前の共有ブロックボリュームを作成します。

    $ az disk create -g sharedblock-rg -n shared-block-volume.vhd --size-gb 1024 --max-shares 3 -l westcentralus
    
    {
      "creationData": {
        "createOption": "Empty",
        "galleryImageReference": null,
        "imageReference": null,
        "sourceResourceId": null,
        "sourceUniqueId": null,
        "sourceUri": null,
        "storageAccountId": null,
        "uploadSizeBytes": null
      },
      "diskAccessId": null,
      "diskIopsReadOnly": null,
      "diskIopsReadWrite": 5000,
      "diskMbpsReadOnly": null,
      "diskMbpsReadWrite": 200,
      "diskSizeBytes": 1099511627776,
      "diskSizeGb": 1024,
      "diskState": "Unattached",
      "encryption": {
        "diskEncryptionSetId": null,
        "type": "EncryptionAtRestWithPlatformKey"
      },
      "encryptionSettingsCollection": null,
      "hyperVgeneration": "V1",
      "id": "/subscriptions/12345678910-12345678910/resourceGroups/sharedblock-rg/providers/Microsoft.Compute/disks/shared-block-volume.vhd",
      "location": "westcentralus",
      "managedBy": null,
      "managedByExtended": null,
      "maxShares": 3,
      "name": "shared-block-volume.vhd",
      "networkAccessPolicy": "AllowAll",
      "osType": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "sharedblock-rg",
      "shareInfo": null,
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      },
      "tags": {},
      "timeCreated": "2020-08-27T15:36:56.263382+00:00",
      "type": "Microsoft.Compute/disks",
      "uniqueId": "cd8b0a25-6fbe-4779-9312-8d9cbb89b6f2",
      "zones": null
    }
  2. 共有ブロックボリューム を確認します。

    $ az disk show -g <resource_group> -n <shared_block_volume_name>

    たとえば、次のコマンドは、リソースグループ sharedblock-rg 内の共有ブロックボリューム shared-block-volume.vhd の詳細を表示します。

    $ az disk show -g sharedblock-rg -n shared-block-volume.vhd
    
    {
      "creationData": {
        "createOption": "Empty",
        "galleryImageReference": null,
        "imageReference": null,
        "sourceResourceId": null,
        "sourceUniqueId": null,
        "sourceUri": null,
        "storageAccountId": null,
        "uploadSizeBytes": null
      },
      "diskAccessId": null,
      "diskIopsReadOnly": null,
      "diskIopsReadWrite": 5000,
      "diskMbpsReadOnly": null,
      "diskMbpsReadWrite": 200,
      "diskSizeBytes": 1099511627776,
      "diskSizeGb": 1024,
      "diskState": "Unattached",
      "encryption": {
        "diskEncryptionSetId": null,
        "type": "EncryptionAtRestWithPlatformKey"
      },
      "encryptionSettingsCollection": null,
      "hyperVgeneration": "V1",
      "id": "/subscriptions/12345678910-12345678910/resourceGroups/sharedblock-rg/providers/Microsoft.Compute/disks/shared-block-volume.vhd",
      "location": "westcentralus",
      "managedBy": null,
      "managedByExtended": null,
      "maxShares": 3,
      "name": "shared-block-volume.vhd",
      "networkAccessPolicy": "AllowAll",
      "osType": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "sharedblock-rg",
      "shareInfo": null,
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      },
      "tags": {},
      "timeCreated": "2020-08-27T15:36:56.263382+00:00",
      "type": "Microsoft.Compute/disks",
      "uniqueId": "cd8b0a25-6fbe-4779-9312-8d9cbb89b6f2",
      "zones": null
    }
  3. 3 つの ネットワークインターフェース を作成します。各ノードに異なる <nic_name> を使用して、以下のコマンドを 3 回実行します。

    $ az network nic create \
        -g <resource_group> -n <nic_name> --subnet <subnet_name> \
        --vnet-name <virtual_network> --location <location> \
        --network-security-group <network_security_group> --private-ip-address-version IPv4

    たとえば、以下のコマンドは、shareblock-nodea-vm-nic-protected という名前のネットワークインターフェイスを作成します。

    $ az network nic create \
        -g sharedblock-rg -n sharedblock-nodea-vm-nic-protected --subnet sharedblock-subnet-protected \
        --vnet-name sharedblock-vn --location westcentralus \
        --network-security-group sharedblock-nsg --private-ip-address-version IPv4
  4. 3 つの仮想マシンを作成し、共有ブロックボリュームを割り当てます。オプションの値は、各仮想マシンに独自の <vm_name><new_vm_disk_name> および <nic_name> が指定される点で異なります。

    $ az vm create \
        -n <vm_name> -g <resource_group> --attach-data-disks <shared_block_volume_name> \
        --data-disk-caching None --os-disk-caching ReadWrite --os-disk-name <new_vm_disk_name> \
        --os-disk-size-gb <disk_size> --location <location> --size <virtual_machine_size> \
        --image <image_name> --admin-username <vm_username> --authentication-type ssh \
        --ssh-key-values <ssh_key> --nics <nic_name> --availability-set <availability_set> --ppg <proximity_placement_group>

    たとえば、次のコマンドは、sharedblock-nodea-vm という名前の仮想マシンを作成します。

    $ az vm create \
    -n sharedblock-nodea-vm -g sharedblock-rg --attach-data-disks shared-block-volume.vhd \
    --data-disk-caching None --os-disk-caching ReadWrite --os-disk-name sharedblock-nodea-vm.vhd \
    --os-disk-size-gb 64 --location westcentralus --size Standard_D2s_v3 \
    --image /subscriptions/12345678910-12345678910/resourceGroups/sample-azureimagesgroupwestcentralus/providers/Microsoft.Compute/images/sample-azure-rhel-10.3.0-20200713.n.0.x86_64 --admin-username sharedblock-user --authentication-type ssh \
    --ssh-key-values @sharedblock-key.pub --nics sharedblock-nodea-vm-nic-protected --availability-set sharedblock-as --ppg sharedblock-ppg
    
    {
      "fqdns": "",
      "id": "/subscriptions/12345678910-12345678910/resourceGroups/sharedblock-rg/providers/Microsoft.Compute/virtualMachines/sharedblock-nodea-vm",
      "location": "westcentralus",
      "macAddress": "00-22-48-5D-EE-FB",
      "powerState": "VM running",
      "privateIpAddress": "198.51.100.3",
      "publicIpAddress": "",
      "resourceGroup": "sharedblock-rg",
      "zones": ""
    }

検証

  1. クラスター内の各仮想マシンで、ブロックデバイスが使用可能であることを確認します。そのためには、仮想マシンの IP アドレスを指定した ssh コマンドを使用して仮想マシンに接続します。

    # ssh <ip_address> "hostname ; lsblk -d | grep ' 1T '"

    たとえば、次のコマンドは、仮想マシン IP 198.51.100.3 のホスト名およびブロックデバイスを含む詳細をリスト表示します。

    # ssh 198.51.100.3 "hostname ; lsblk -d | grep ' 1T '"
    
    nodea
    sdb    8:16   0    1T  0 disk
  2. ssh ユーティリティーを使用して、クラスター内の各仮想マシンが同じ共有ディスクを使用していることを確認します。

    # ssh <ip_address> "hostname ; lsblk -d | grep ' 1T ' | awk '{print \$1}' | xargs -i udevadm info --query=all --name=/dev/{} | grep '^E: ID_SERIAL='"

    たとえば、以下のコマンドは、インスタンス IP アドレス 198.51.100.3 のホスト名および共有ディスクボリューム ID が含まれる詳細をリスト表示します。

    # ssh 198.51.100.3 "hostname ; lsblk -d | grep ' 1T ' | awk '{print \$1}' | xargs -i udevadm info --query=all --name=/dev/{} | grep '^E: ID_SERIAL='"
    
    nodea
    E: ID_SERIAL=3600224808dd8eb102f6ffc5822c41d89

    各仮想マシンが共有ディスクに接続されていることを確認したら、クラスターに対して Resilient Storage を設定できます。

第5章 セキュアブートを使用した Azure での RHEL の設定

Unified Extensible Firmware Interface (UEFI) 仕様のセキュアブートメカニズムは、起動時にプログラムの実行を制御します。セキュアブートは、ブート時にブートローダーとその他のコンポーネントのデジタル署名を検証することで、無許可のプログラムの実行を防ぎながら、許可された信頼できるプログラムだけを実行します。

Azure プラットフォーム上で公開されている RHEL イメージには、セキュアブートがデフォルトで組み込まれています。Allowed Signature データベース (db) には Microsoft 証明書が含まれています。Azure Compute Gallery に新しいイメージバージョンを登録するときに、UEFI セキュアブートの変数にカスタム証明書を追加できます。

5.1. クラウド上の RHEL のセキュアブートについて

セキュアブートは、Unified Extensible Firmware Interface (UEFI) の機能です。これにより、ブート時に、ブートローダーやカーネルなどの信頼できるデジタル署名されたプログラムとコンポーネントだけが実行されます。セキュアブートは、ハードウェアに保存されている信頼できる鍵と、デジタル署名を照合します。改ざんされたコンポーネントや信頼できないエンティティーによって署名されたコンポーネントが検出されると、ブートプロセスが中止されます。この機能により、悪意のあるソフトウェアがオペレーティングシステムを侵害するのを防ぎます。

セキュアブートは、信頼できるエンティティーだけをブートチェーンに参加させるという点で、Confidential Virtual Machine (CVM) の設定において重要な役割を果たします。定められたインターフェイスを介して特定のデバイスパスへのアクセスを認証し、最新の設定の使用を強制し、以前の設定を永続的に上書きします。セキュアブートを有効にして Red Hat Enterprise Linux (RHEL) カーネルを起動すると、カーネルが lockdown モードに入ります。これにより、信頼できるベンダーによって署名されたカーネルモジュールだけが確実にロードされます。その結果、セキュアブートによってオペレーティングシステムのブートシーケンスのセキュリティーが強化されます。

5.1.1. セキュアブートのコンポーネント

セキュアブートメカニズムは、ファームウェア、署名データベース、暗号鍵、ブートローダー、ハードウェアモジュール、およびオペレーティングシステムで構成されます。以下は、UEFI の信頼済み変数の構成要素です。

  • Key Exchange Key データベース (KEK): RHEL オペレーティングシステムと仮想マシンファームウェア間の信頼を確立するための公開鍵の交換。これらの鍵を使用して、Allowed Signature データベース (db) と Forbidden Signature データベース (dbx) を更新することもできます。
  • Platform Key データベース (PK): 仮想マシンファームウェアとクラウドプラットフォーム間の信頼を確立するための自己署名のシングルキーデータベース。また、PK は KEK データベースを更新します。
  • Allowed Signature データベース (db): バイナリーファイルがシステム上で起動できるかどうかを確認するための証明書またはバイナリーハッシュのリストを保持するデータベース。さらに、db からのすべての証明書は、RHEL カーネルの .platform キーリングにインポートされます。この機能を使用すると、lockdown モードで署名されたサードパーティーのカーネルモジュールを追加およびロードすることができます。
  • Forbidden Signature データベース (dbx): システム上で起動することが禁止されている証明書またはバイナリーハッシュのリストを保持するデータベース。
注記

バイナリーファイルは、dbx データベースと Secure Boot Advanced Targeting (SBAT) メカニズムに照らしてチェックされます。SBAT を使用すると、バイナリーに署名した証明書を有効なままに保ちながら、特定のバイナリーの古いバージョンを無効にできます。

5.1.2. クラウド上の RHEL におけるセキュアブートの段階

RHEL インスタンスが Unified Kernel Image (UKI) モードで起動し、セキュアブートが有効な場合、RHEL インスタンスは次の順序でクラウドサービスインフラストラクチャーとやり取りします。

  1. 初期化: RHEL インスタンスが起動すると、クラウドでホストされているファームウェアが最初に起動し、セキュアブートメカニズムを実装します。
  2. 変数ストアの初期化: ファームウェアは、変数ストアから UEFI 変数を初期化します。このストアは、ブートプロセスと実行時の操作のためにファームウェアが管理する必要がある情報専用のストレージ領域です。RHEL インスタンスが初めて起動すると、ストアは仮想マシンイメージに関連付けられたデフォルト値によって初期化されます。
  3. ブートローダー: ブート時に、ファームウェアは第 1 段階のブートローダーをロードします。x86 UEFI 環境の RHEL インスタンスの場合、第 1 段階のブートローダーは shim です。shim ブートローダーは、ブートプロセスの次の段階を認証して読み込み、UEFI と GRUB 間の橋渡し役として機能します。

    1. RHEL の shim x86 バイナリーは、現在 Microsoft Corporation UEFI CA 2011 Microsoft 証明書によって署名されています。これは、Allowed Signature データベース (db) にデフォルトの Microsoft 証明書が含まれているさまざまなハードウェアおよび仮想化プラットフォーム上で、RHEL インスタンスをセキュアブート対応モードで起動できるようにするためです。
    2. shim バイナリーは、Red Hat Secure Boot CA と、必要に応じて Machine Owner Key (MOK) を使用して、信頼済み証明書のリストを拡張します。
  4. UKI: shim バイナリーは、RHEL UKI (kernel-uki-virt パッケージ) をロードします。対応する証明書 (x86_64 アーキテクチャーでは Red Hat Secure Boot Signing 504) が UKI に署名します。この証明書は redhat-sb-certs パッケージにあります。この証明書は Red Hat Secure Boot CA によって署名されているため、チェックは成功します。
  5. UKI アドオン: UKI cmdline 拡張機能を使用する場合、RHEL カーネルが、拡張機能の署名を dbMOK、および shim に同梱されている証明書と照合して積極的にチェックします。このプロセスにより、その拡張機能が、オペレーティングシステムベンダーである RHEL か、ユーザーのどちらかによって署名されていることが保証されます。

RHEL カーネルがセキュアブートモードで起動すると、カーネルは lockdown モードになります。lockdown に入ると、RHEL カーネルは db の鍵を .platform キーリングに追加し、MOK の鍵を .machine キーリングに追加します。カーネルビルドプロセス中、ビルドシステムは、秘密鍵と公開鍵で構成される一時的な鍵を使用して動作します。ビルドシステムは、kernel-modules-corekernel-moduleskernel-modules-extra などの標準の RHEL カーネルモジュールに署名します。各カーネルビルドが完了すると、この秘密鍵はサードパーティーモジュールの署名には使用できなくなります。この署名のためには、db および MOK の証明書を使用できます。

5.2. セキュアブートを使用した Azure 上の RHEL 仮想マシンの設定

Azure クラウドプラットフォーム上の Red Hat Enterprise Linux (RHEL) インスタンスで、オペレーティングシステムのブートプロセスのセキュリティーを確保するには、セキュアブートを使用します。カスタム RHEL Azure イメージが登録されると、そのイメージはセキュアブート用に事前保存された Unified Extensible Firmware Interface (UEFI) 変数で構成されます。これにより、RHEL イメージから起動されたすべてのインスタンスが、最初の起動時に必要な変数を使用してセキュアブートメカニズムを使用できるようになります。

Microsoft Azure は、Trusted Launch 仮想マシンによるセキュアブートをサポートしています。これらの仮想マシンは、ルートキットやブートキットから保護するためのセキュリティーメカニズムを提供するとともに、Virtual Trusted Platform Manager (vTPM) などの追加機能も提供します。GUI を使用してインスタンスを作成する場合、Enable secure boot オプションは、Configure security features 設定の下にあります。

Azure プラットフォーム上のセキュアブート

前提条件

  • パッケージをインストールしている。

    • python3
    • openssl
    • efivar
    • keyutils
    • python3-virt-firmware
  • azure-cli ユーティリティーがインストールされている。詳細は、Installing the Azure CLI on Linux を参照してください。

手順

  1. openssl ユーティリティーを使用してカスタム証明書 custom_db.cer を生成します。

    $ openssl req -quiet \
    -newkey rsa:4096 \
    -nodes -keyout custom_db.key \
    -new -x509 \
    -sha256 -days 3650 \
    -subj "/CN=Signature Database key/" \
    --outform DER \
    -out custom_db.cer
  2. 証明書を base64 エンコード形式に変換します。

    $ echo base64 -w0 custom_db.cer
    
    MIIFIjCCAwqgAwIBAgITNf23J4k0d8c0NR ....
  3. 新しい Azure Compute Gallery イメージバージョンを登録するための azure-example-template.json Azure Resource Manager (ARM) ファイルを作成して編集します。

    $ vi azure-example-template.json
    
    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
            {
                "type": "Microsoft.Compute/galleries/images/versions",
                "apiVersion": "2023-07-03",
                "name": "<your compute gallery/your image definition/version>",
                "location": "<location of the VHD>",
                "properties": {
                    "storageProfile": {
                        "osDiskImage": {
                            "source": {
                                "id": "<your-storage-account-id>",
                                "uri": "<url-with-the-vhd>"
                            },
                            "hostCaching": "ReadOnly"
                        }
                    },
                    "securityProfile": {
                        "uefiSettings": {
                            "signatureTemplateNames": [
                                "MicrosoftUefiCertificateAuthorityTemplate"
                            ],
                            "additionalSignatures": {
                                "db": [
                                    {
                                        "type": "x509",
                                        "value": [
                                            "<base64 of custom_db.cer>"
                                        ]
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        ]
    }
  4. azure-cli ユーティリティーを使用して、イメージバージョンを登録します。

    $ az deployment group create --name <example_deployment> \
    --resource-group <example_resource_group> \
    --template-file <example_template.json>
  5. Azure Portal からインスタンスを再起動します。

検証

  1. 新しく作成された RHEL インスタンスでセキュアブートが有効になっているか確認します。

    $ mokutil --sb-state
    SecureBoot enabled
  2. keyctl ユーティリティーを使用して、カスタム証明書のカーネルキーリングを確認します。

    $ sudo keyctl list %:.platform
    
    keys in keyring:
    ...
    586621657: ---lswrv   0   0
    asymmetric: Signature Database key: f064979641c24e1b935e402bdbc3d5c4672a1acc
    ...

第6章 Intel TDX を使用したパブリッククラウドプラットフォーム上の RHEL の設定

Intel Trust Domain Extensions (TDX) は、Confidential Virtual Machine (CVM) のセキュリティータイプの 1 つであり、仮想マシンにセキュアで隔離された環境を提供します。このアプローチは、以前のテクノロジーである Intel Software Guard Extensions (SGX) を進化させたものです。

SGX は、エンクレーブと呼ばれるセキュアなメモリー領域を作成することで、ハイパーバイザーおよびクラウドサービスプロバイダーからの仮想マシンの隔離を実現します。エンクレーブ内に格納されたアプリケーションコードは、エンクレーブ内に格納されたメモリーとデータにアクセスできます。外部のエンティティーからは、このメモリーとデータにアクセスできません。

TDX は、Trusted Domains (TD) と呼ばれるハードウェアによって隔離された仮想マシンを作成します。これにより、仮想マシンのみが自身のメモリーにアクセスし、TD の仮想マシンが Virtual Machine Manager (VMM)、ハイパーバイザー、他の仮想マシン、およびホストから隔離されることが保証されます。そのため、ハイパーバイザー、CPU のリソースを使用しながら、データの機密性と整合性を維持して TD の仮想マシンのセキュリティーを確保できます。

SGX と TDX の主な違いは、SGX はアプリケーションレベルで動作するのに対し、TDX はハイパーバイザーのアクセスを制限して仮想化レベルで動作することです。

注記

パブリッククラウドプラットフォームに Red Hat Enterprise Linux (RHEL) をデプロイする前に、必ず該当するクラウドサービスプロバイダーに問い合わせて、特定の RHEL インスタンスタイプのサポート状況と認定を確認してください。

6.1. Intel TDX セキュアブートプロセスについて

  1. 初期化と測定: TDX 対応ハイパーバイザーが、仮想マシンの初期状態を設定します。このハイパーバイザーは、ファームウェアバイナリーファイルを仮想マシンメモリーにロードし、初期レジスター状態を設定します。Intel プロセッサーが仮想マシンの初期状態を測定し、仮想マシンの初期状態を検証するための詳細を提供します。
  2. ファームウェア: 仮想マシンが UEFI ファームウェアを初期化します。ファームウェアには、ステートフルまたはステートレスな Virtual Trusted Platform Module (vTPM) 実装が含まれる場合があります。ステートフルな vTPM は、仮想マシンの再起動後や移行後も永続的な暗号化状態を維持します。一方、ステートレスな vTPM は、永続性を持たず、仮想マシンセッションごとに新しい暗号化状態を生成します。vTPM は、Virtual Machine Privilege Levels (VMPL) テクノロジーによってゲストから隔離されます。VMPL は、各仮想マシンコンポーネントとハイパーバイザー間のハードウェアによる特権分離を提供します。
  3. vTPM: クラウドサービスプロバイダーによっては、ステートフルな vTPM 実装の場合、UEFI ファームウェアがリモートアテステーションを実行して vTPM の永続的な状態を復号することがあります。また、vTPM は、セキュアブートの状態、ブートアーティファクトの署名に使用される証明書、UEFI バイナリーハッシュなど、ブートプロセスに関するデータを収集します。
  4. Shim: UEFI ファームウェアは、初期化プロセスを完了すると、拡張ファームウェアインターフェイス (EFI) システムパーティションを検索します。その後、UEFI ファームウェアはそのパーティションから第 1 段階のブートローダーを検証して実行します。RHEL の場合、これは shim です。shim プログラムは、Microsoft 以外のオペレーティングシステムが、EFI システムパーティションから第 2 段階のブートローダーを読み込むことを可能にします。

    1. shim は Red Hat の証明書を使用して、第 2 段階のブートローダー (grub) または Red Hat Unified Kernel Image (UKI) を検証します。
    2. grub または UKI は、Linux カーネルと initramfs、およびカーネルコマンドラインを展開、検証、実行します。このプロセスにより、信頼できるセキュアな環境に Linux カーネルが確実にロードされます。
  5. Initramfs: initramfs の処理中、フルディスク暗号化テクノロジーが使用されている場合、暗号化されたルートパーティションのロックが vTPM の情報によって自動的に解除されます。

    1. ルートボリュームが使用可能になると、initramfs は実行フローをルートボリュームへ移行します。
  6. アテステーション: 仮想マシンのテナントは、システムへのアクセス権を得てから、リモートアテステーションを実行することで、アクセスした仮想マシンが改ざんされていない Confidential Virtual Machine (CVM) であることを確認できます。アテステーションは、Intel プロセッサーと vTPM からの情報に基づいて実行されます。このプロセスにより、RHEL インスタンスと Intel プロセッサーの CPU およびメモリー初期状態の真正性と信頼性が確認されます。
  7. TEE: このプロセスでは、仮想マシンが信頼できるセキュアな環境で起動されるように、Trusted Execution Environment (TEE) を構築します。

6.2. Intel TDX を使用した Azure 上の RHEL 仮想マシンの設定

Intel Trusted Domain Extensions (TDX) を使用すると、Trusted Domains (TD) と呼ばれる、ハードウェアの力によって隔離された仮想マシンを作成できます。これにより、仮想マシンのみが自身のリソースにアクセスできるようになる一方で、ハイパーバイザーやホストからはそのリソースにアクセスできない状態が維持されます。

前提条件

  • openssh および openssh-clients パッケージがインストールされている。
  • Azure CLI ユーティリティーがインストールされている。詳細は、Installing the Azure CLI on Linux を参照してください。
  • サポートされている Azure インスタンスタイプから RHEL インスタンスを起動した。詳細は、Azure Confidential VM options を参照してください。

手順

  1. azure cli ユーティリティーを使用して Azure にログインします。

    $ az login
  2. 選択したアベイラビリティーゾーンの Azure リソースグループを作成します。

    $ az group create --name <example_resource_group> --location westeurope
  3. TDX が有効な RHEL インスタンス (Standard_DC2eds_v5 インスタンスタイプなど) をデプロイします。

    $ az vm create --resource-group <example_resource_group> \
    --name <example_rhel_instance> \
    --image <"RedHat:rhel-cvm:9_5_cvm:latest"> \
    --size <Standard_DC2eds_v5> \
    --admin-username <example_azure_user> \
    --generate-ssh-keys \
    --security-type ConfidentialVM \
    --os-disk-security-encryption-type DiskWithVMGuestState
  4. RHEL インスタンスに接続します。

    $ ssh <example_azure_user>@<example_ip_address_of_the_instance>

検証

  • カーネルログを確認して、TDX のステータスを検証します。

    $ sudo dmesg | grep -i tdx
    ...
    [    0.733613] Memory Encryption Features active: Intel TDX
    [    4.320222] systemd[1]: Detected confidential virtualization tdx.
    [    5.977432] systemd[1]: Detected confidential virtualization tdx.
    ...
  • RHEL インスタンス設定のメタデータを確認します。

    $ az vm show --resource-group <example_resource_group> \
    --name <example_rhel_instance> \
    --query "securityProfile.enableTrustedDomainExtensions" \
    --output json

第7章 AMD SEV SNP を使用したパブリッククラウドプラットフォーム上の RHEL の設定

AMD Secure Encrypted Virtualization with Secure Nested Paging (SEV-SNP) は、仮想マシンの整合性を狙った攻撃を防ぎ、メモリー整合性違反の危険性を軽減することを目的としています。AMD のプロセッサーは、セキュアなブートプロセスのために、Secure Encrypted Virtualization (SEV)、SEV Encrypted State (SEV-ES)、および SEV Secure Nested Paging (SEV-SNP) という 3 つのハードウェアベースのセキュリティーメカニズムを提供しています。

  • SEV: SEV メカニズムは、仮想マシン (VM) のメモリーを暗号化して、ハイパーバイザーが仮想マシンのデータにアクセスできないようにします。
  • SEV-ES: SEV with Encrypted State (SEV-ES) は、SEV を拡張したものであり、CPU レジスターの状態を暗号化します。このメカニズムにより、ハイパーバイザーが仮想マシンの CPU レジスターにアクセスしたり変更したりすることが防止されます。ハイパーバイザーと仮想マシン間の隔離を実現しますが、メモリー整合性攻撃に対しては依然として脆弱です。
  • SEV-SNP: SEV-SNP は、SEV-ES の拡張機能であり、仮想マシンの暗号化に加えて、メモリー整合性の保護機能を追加したものです。このメカニズムは、ハイパーバイザーがページテーブルを変更して仮想マシンのメモリーアクセス先をリダイレクトすることを防ぎ、リプレイ攻撃やメモリー改ざんから保護します。

    注記

    パブリッククラウドプラットフォームに Red Hat Enterprise Linux (RHEL) をデプロイする前に、必ず該当するクラウドサービスプロバイダーに問い合わせて、特定の RHEL インスタンスタイプのサポート状況と認定を確認してください。

7.1. SEV-SNP の特性

  • Secure Processor: AMD EPYC プロセッサーには、Secure Processor (SP) サブシステムが統合されています。AMD の SP は、鍵と暗号化の操作を管理するための専用のハードウェアコンポーネントです。
  • メモリー整合性: 仮想化と隔離を管理するために、メモリー管理ユニット (MMU) はページテーブルを使用して仮想アドレスをゲストの物理アドレスに変換します。SEV-SNP は、ゲストの物理アドレスをホストの物理アドレスに変換するために、ネストされたページテーブルを使用します。ネストされたページテーブルが一度定義されると、ハイパーバイザーやホストは、仮想マシンが異なるページにアクセスするようにページテーブルを変更することができなくなります。これにより、メモリーの整合性が保護されます。SEV-SNP はこの方法を使用して、リプレイ攻撃や仮想マシンメモリーへの悪意のある変更に対する保護を提供します。
  • メモリー暗号化: AMD EPYC プロセッサーはメモリー暗号鍵を隠蔽します。この鍵は、ホストと仮想マシンの両方から隠蔽された状態で維持されます。
  • 検証用アテステーションレポート: CPU によって生成されたレポートで、RHEL インスタンスに関する情報が正規の暗号化形式で記述されています。このプロセスにより、RHEL インスタンスと AMD プロセッサーの CPU およびメモリー初期状態の真正性と信頼性が確認されます。

    注記

    ハイパーバイザーが仮想マシンのプライマリーメモリーや CPU レジスターの状態を作成したとしても、その仮想マシンの初期化後は、それらのデータは隠蔽され、ハイパーバイザーからはアクセスできない状態が維持されます。

7.2. AMD SEV SNP セキュアブートプロセスについて

  1. 初期化と測定: SEV-SNP 対応ハイパーバイザーが、仮想マシンの初期状態を設定します。このハイパーバイザーは、ファームウェアバイナリーを仮想マシンメモリーにロードし、初期レジスター状態を設定します。AMD Secure Processor (SP) が仮想マシンの初期状態を測定し、仮想マシンの初期状態を検証するための詳細を提供します。
  2. ファームウェア: 仮想マシンが UEFI ファームウェアを初期化します。ファームウェアには、ステートフルまたはステートレスな Virtual Trusted Platform Module (vTPM) 実装が含まれる場合があります。ステートフルな vTPM は、仮想マシンの再起動後や移行後も永続的な暗号化状態を維持します。一方、ステートレスな vTPM は、永続性を持たず、仮想マシンセッションごとに新しい暗号化状態を生成します。vTPM は、Virtual Machine Privilege Levels (VMPL) テクノロジーによってゲストから隔離されます。VMPL は、各仮想マシンコンポーネントとハイパーバイザー間のハードウェアによる特権分離を提供します。
  3. vTPM: クラウドサービスプロバイダーによっては、ステートフルな vTPM 実装の場合、UEFI ファームウェアがリモートアテステーションを実行して vTPM の永続的な状態を復号することがあります。

    1. また、vTPM は、セキュアブートの状態、ブートアーティファクトの署名に使用される証明書、UEFI バイナリーハッシュなど、ブートプロセスに関する情報を測定します。
  4. Shim: UEFI ファームウェアは、初期化プロセスを完了すると、拡張ファームウェアインターフェイス (EFI) システムパーティションを検索します。その後、UEFI ファームウェアはそのパーティションから第 1 段階のブートローダーを検証して実行します。RHEL の場合、これは shim です。shim プログラムは、Microsoft 以外のオペレーティングシステムが、EFI システムパーティションから第 2 段階のブートローダーを読み込むことを可能にします。

    1. shim は Red Hat の証明書を使用して、第 2 段階のブートローダー (grub) または Red Hat Unified Kernel Image (UKI) を検証します。
    2. grub または UKI は、Linux カーネルと初期 RAM ファイルシステム (initramfs)、およびカーネルコマンドラインを展開、検証、実行します。このプロセスにより、信頼できるセキュアな環境に Linux カーネルが確実にロードされます。
  5. Initramfs: initramfs の処理中、フルディスク暗号化テクノロジーが使用されている場合、暗号化されたルートパーティションのロックが vTPM の情報によって自動的に解除されます。

    1. ルートボリュームが使用可能になると、initramfs は実行フローをルートボリュームへ移行します。
  6. アテステーション: 仮想マシンのテナントは、システムへのアクセス権を得てから、リモートアテステーションを実行することで、アクセスした仮想マシンが改ざんされていない Confidential Virtual Machine (CVM) であることを確認できます。アテステーションは、AMD SP と vTPM からの情報に基づいて実行されます。このプロセスにより、RHEL インスタンスと AMD プロセッサーの CPU およびメモリー初期状態の真正性と信頼性が確認されます。
  7. TEE: このプロセスでは、仮想マシンが信頼できるセキュアな環境で起動されるように、Trusted Execution Environment (TEE) を構築します。

7.3. AMD SEV SNP を使用した Azure 上の RHEL 仮想マシンの設定

AMD Secure Encrypted Virtualization with Secure Nested Paging (SEV-SNP) は、Azure 仮想マシン (VM) 上の Red Hat Enterprise Linux (RHEL) 向け Confidential Virtual Machine (CVM) テクノロジーのセキュリティータイプです。これは AMD EPYC プロセッサーファミリーでのみ使用できます。SEV-SNP は、信頼できるブート環境を実現することで、ハイパーバイザーやクラウドサービスプロバイダーがデータにアクセスできないように、プロセス全体をセキュアにして保護します。

前提条件

  • openssh および openssh-clients パッケージがインストールされている。
  • Azure CLI ユーティリティーがインストールされている。詳細は、Azure CLI のインストール を参照してください。
  • 指定された Azure インスタンスタイプのみを使用してインスタンスを起動した。詳細は、CVM でサポートされる仮想マシンサイズ を参照してください。

手順

  1. Azure CLI ユーティリティーを使用して Azure にログインします。

    $ az login
  2. 選択したアベイラビリティーゾーンの Azure リソースグループを作成します。

    $ az group create --name <example_resource_group> --location eastus
  3. SEV-SNP を使用する RHEL インスタンス (例: Standard_DC4as_V5 インスタンスタイプ) をデプロイします。

    $ az vm create --resource-group <example_resource_group> \
    --name <example-rhel-10-sev-snp-instance> \
    --image <RedHat:rhel:10_x64_Gen2:latest> \
    --size <Standard_DC4as_V5> \
    --admin-username <example_azure_user> \
    --generate-ssh-keys \
    --security-type ConfidentialVM \
    --os-disk-security-encryption-type DiskWithVMGuestState
  4. RHEL インスタンスに接続します。

    $ ssh <example_azure_user>@<example_ip_address_of_VM>

検証

  • カーネルログを確認して、SEV-SNP のステータスを検証します。

    $ sudo dmesg | grep -i sev
    ...
    [    0.547223] Memory Encryption Features active: AMD SEV
    [    4.843171] kvm-guest: setup_efi_kvm_sev_migration : EFI live migration variable not found
    ...

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る