Microsoft Azure での RHEL のデプロイと管理
RHEL システムイメージの取得と Azure 上での RHEL インスタンスの作成
概要
- Azure での RHEL イメージの登録、デプロイ、プロビジョニング
- RHEL Azure 仮想マシン (VM) のネットワーク設定の管理
- プラットフォームセキュリティーと信頼できる実行テクノロジーの設定
- RHEL インスタンスの Red Hat High Availability (HA) クラスターの管理
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある 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) は次のとおりです。
- Amazon Web Services (AWS)
- Google Cloud
- 注記
このドキュメントでは、Azure に RHEL をデプロイするプロセスを具体的に説明します。
- 選択したクラウドプラットフォーム上に 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 に依存しています。
手順
Microsoft リポジトリーキーをインポートします。
$ sudo rpm --import https://packages.microsoft.com/keys/microsoft-2025.ascpackages-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.ascMicrosoft Azure CLI をインストールします。ダウンロードした Microsoft Azure CLI パッケージのバージョンは、現在利用可能なバージョンによって異なる場合があります。
$ sudo dnf install azure-cliMicrosoft 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 ページを開き、デバイスコードを入力して認証してください。
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 ストレージアカウントの名前に置き換えます。利用可能なリソースをリスト表示するには、次のコマンドを使用します。
$ az resource list
ストレージコンテナーを作成します。
$ 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出力タイプを使用します。
-
GUI で、
手順
イメージをビルドします。
$ image-builder build <image-type>イメージを Microsoft Azure にプッシュし、そこからインスタンスを作成します。
$ az storage blob upload --account-name account_name --container-name container_name --file image_disk.vhd --name image-disk.vhd --type pageMicrosoft Azure Blob ストレージへのアップロードが完了したら、そこから Microsoft Azure イメージを作成します。RHEL Image Builder で作成したイメージは、
V1 = BIOSとV2 = 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
検証
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-
SSH を使用して秘密鍵を使用し、作成したインスタンスにアクセスします。
azure-userとしてログインします。このユーザー名は前のステップで設定したものです。
2.3. VHD イメージを作成して Microsoft Azure クラウドに自動的にアップロードする リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder を使用すると、Microsoft Azure クラウドサービスプロバイダーの Azure Blob Storage に自動的にアップロードされる .vhd イメージを作成できます。
前提条件
- システムへの root アクセス権があります。
- RHEL Web コンソールの RHEL Image Builder インターフェイスにアクセスできる。
- ブループリントを作成している。Web コンソールインターフェイスでの RHEL Image Builder ブループリントの作成 を参照してください。
- Microsoft ストレージアカウント が作成されました。
- 書き込み可能な Blob Storage が準備されました。
手順
- RHEL Image Builder ダッシュボードで、使用するブループリントを選択します。
- Images タブをクリックします。
Create Image をクリックして、カスタマイズした
.vhdイメージを作成します。Create image ウィザードが開きます。
-
Type ドロップダウンメニューリストから
Microsoft Azure (.vhd)を選択します。 - イメージを Microsoft Azure クラウドにアップロードするには、Upload to Azure チェックボックスをオンします。
- Image Size を入力し、Next をクリックします。
-
Type ドロップダウンメニューリストから
Upload to Azure ページで、次の情報を入力します。
認証ページで、次のように入力します。
- Storage account の名前。Microsoft Azure portal の Storage account ページにあります。
- Storage access key: これは、Access Key ストレージページにあります。
- Next をクリックします。
Authentication ページで、次のように入力します。
- イメージ名
- Storage container。これは、イメージのアップロード先の Blob コンテナーです。Microsoft Azure portal の Blob service セクションにあります。
- Next をクリックします。
Review ページで Create をクリックします。RHEL Image Builder が起動し、アップロードプロセスが開始します。
Microsoft Azure Cloud にプッシュしたイメージにアクセスします。
- Microsoft Azure portal にアクセスします。
- 検索バーに "storage account" と入力し、リストから Storage accounts をクリックします。
- 検索バーに "Images" と入力し、Services の下にある最初のエントリーを選択します。Image dashboard にリダイレクトされます。
- ナビゲーションパネルで、Containers をクリックします。
-
作成したコンテナーを見つけます。コンテナー内には、RHEL Image Builder を使用して作成およびプッシュした
.vhdファイルがあります。
検証
仮想マシンイメージを作成して起動できることを確認します。
- 検索バーに images account と入力し、リストから Images をクリックします。
- +Create をクリックします。
- ドロップダウンリストから、前に使用したリソースグループを選択します。
- イメージの名前を入力します。
- OS type で Linux を選択します。
- VM generation で Gen 2 を選択します。
- Storage Blob で Browse をクリックし、VHD ファイルに到達するまでストレージアカウントとコンテナーをクリックします。
- ページの最後にある Select をクリックします。
- Account Type を選択します (例: Standard SSD)。
- Review + Create をクリックし、Create をクリックします。イメージが作成されるまでしばらく待機します。
仮想マシンを起動するには、次の手順に従います。
- Go to resource をクリックします。
- ヘッダーのメニューバーから + Create VM をクリックします。
- 仮想マシンの名前を入力します。
- Size セクションと Administrator account セクションに入力します。
Review + Create をクリックし、Create をクリックします。デプロイメントの進行状況を確認できます。
デプロイメントが完了したら、仮想マシン名をクリックしてインスタンスのパブリック IP アドレスを取得し、SSH を使用して接続します。
- ターミナルを開いて SSH 接続を作成し、仮想マシンに接続します。
第3章 RHEL イメージを Azure 上のコンピュートインスタンスとしてデプロイする リンクのコピーリンクがクリップボードにコピーされました!
Microsoft Azure) で RHEL イメージを使用するには、イメージを Azure 互換形式に変換し、イメージから仮想マシンをデプロイして Azure コンピュート仮想マシンとして実行します。RHEL 仮想ハードドライブ (VHD) を Azure ディスクイメージ形式として作成、カスタマイズ、およびデプロイするには、次のいずれかの方法を使用できます。
- RHEL Image Builder を使用します。手順は、VHD イメージを準備して Microsoft Azure にアップロードする を参照してください。
- VHD を手動で作成して設定します。これはより複雑なプロセスですが、より詳細なカスタマイズオプションを使用できます。詳細は、次のセクションを参照してください。
始める前に、次の手順を必ず完了してください。
- Red Hat アカウント が作成されている。
- Microsoft Azure アカウント がある。
3.1. パブリッククラウドで利用可能な RHEL イメージタイプ リンクのコピーリンクがクリップボードにコピーされました!
認定クラウドサービスプロバイダー (CCSP) に RHEL 仮想マシンをデプロイするには、いくつかの方法を使用できます。次の表に、使用可能なイメージタイプ、サブスクリプション、留意事項、イメージタイプのサンプルシナリオを示します。
カスタマイズされた ISO イメージをデプロイするには、RHEL Image Builder を使用できます。RHEL Image Builder を使用すると、選択した CCSP に特化したカスタムイメージを作成、アップロード、およびデプロイできます。詳細は、RHEL システムイメージのカスタマイズ を参照してください。
| イメージタイプ | サブスクリプション | 留意事項 | サンプルシナリオ |
|---|---|---|---|
| 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 の基本イメージを作成して設定するには、ホストシステムに次のパッケージがインストールされている必要があります。
| パッケージ | リポジトリー | 説明 |
|---|---|---|
| libvirt |
| プラットフォーム仮想化を管理するためのオープンソース API、デーモン、および管理ツール。 |
| virt-install |
| 仮想マシンを構築するためのコマンドラインユーティリティー |
| libguestfs |
| 仮想マシンファイルシステムにアクセスして変更するためのライブラリー |
| guestfs-tools |
|
仮想マシン用のシステム管理ツール。 |
上記のシステムパッケージのインストールを確認したら、カスタムベースイメージを使用して 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 Settings の Model オプションを virtio に変更し、vCPUs を仮想マシンの容量設定に変更した。
手順
Red Hat Enterprise Linux (RHEL) 仮想マシンを設定します。
- コマンドライン (CLI) からインストールするには、仮想マシンの要件に応じて、デフォルトのメモリー、ネットワークインターフェイス、CPU が設定されていることを確認します。詳細は、コマンドラインを使用した仮想マシンの作成 を参照してください。
- Web コンソールからインストールするには、Web コンソールを使用した仮想マシンの作成 を参照してください。
インストールが開始されたら、以下を実行します。
-
rootのパスワードを作成します。 - 管理者ユーザーアカウントを作成します。
-
-
インストールが完了してから、仮想マシンを再起動して
rootアカウントにログインします。 -
rootとしてログインすると、イメージを設定できます。 仮想マシンを登録し、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 リソースを管理できます。
前提条件
- Azure での RHEL イメージのデプロイメント を完了した。
- Microsoft Azure のアカウントがある。
- Python 3.x をインストールした。
手順
Microsoft リポジトリーキーをインポートします。
$ sudo dnf --import https://packages.microsoft.com/keys/microsoft.ascローカル 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'dnfパッケージインデックスを更新します。$ sudo dnf updateAzure CLI をインストールします。
$ sudo dnf install -y azure-cliAzure CLI を実行します。
$ az login
次のステップ
- Azure 上で仮想マシンを効率的に実行するには、Hyper-V デバイスドライバー をインストールします。
3.5. Hyper-V デバイスドライバーのインストール リンクのコピーリンクがクリップボードにコピーされました!
Microsoft は、Linux Integration Services (LIS) for Hyper-V パッケージの一部として、ネットワークおよびストレージデバイスのドライバーを提供しています。仮想マシンイメージを Azure 仮想マシンとしてプロビジョニングする前に、Hyper-V デバイスドライバーをインストールします。
前提条件
- Azure CLI がインストールされている。
手順
システムに 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ドライバーがリストされない場合は、残りのステップを完了します。/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 ")。initramfsイメージを再生成します。# dracut -f -v --regenerate-all
検証
- マシンを再起動します。
ドライバーのインストールを確認します。
# lsinitrd | grep hv
次のステップ
- Azure クラウド上のデプロイメント 用の仮想マシンを準備します。
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- 仮想マシン上でエフェメラルディスクが使用可能である。
手順
- 仮想マシンにログインします。
/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 スワップパーティションのタイプを示しています。これらのパーセンテージは要件に応じて調整できます。
-
GPT パーティションテーブルを使用して、エフェメラルディスク (
設定ファイルにエラーがないか確認します。
# 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 環境で動作できるようにするには、カスタムベースイメージをデプロイする前に設定を変更します。
前提条件
- Hyper-V デバイスドライバー をインストールした。
手順
ログインして仮想マシンを登録し、Red Hat Enterprise Linux (RHEL) リポジトリーを有効にします。
# subscription-manager register Installed Product Current Status: Product Name: Red Hat Enterprise Linux for x86_64 Status: Subscribedcloud-initおよびhyperv-daemonsパッケージをインストールします。# dnf install cloud-init hyperv-daemons -ycloud-init設定ファイルを作成し、Azure サービスと統合するための編集を行います。Hyper-V Data Exchange Service (KVP) へのログ記録を有効にするには、
/etc/cloud/cloud.cfg.d/10-azure-kvp.cfg設定ファイルを編集し、次の行を追加します。reporting: logging: type: log telemetry: type: hypervAzure データソースを追加するには、
/etc/cloud/cloud.cfg.d/91-azure_datasource.cfgファイルを編集し、次の行を追加します。datasource_list: [ Azure ] datasource: Azure: apply_network_config: Falseエフェメラルディスク上のスワップ領域を設定するには、
/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"]
特定のカーネルモジュールの自動ロードをブロックするには、
/etc/modprobe.d/blocklist.confファイルを編集し、次の行を追加します。blacklist nouveau blacklist lbm-nouveau blacklist floppy blacklist amdgpu blacklist skx_edac blacklist intel_cstateudevネットワークデバイスルールを変更します。存在する場合は、次の永続的なネットワークデバイスルールを削除します。
# 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-rulesAzure で高速ネットワークが確実に機能するためには、
/etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rulesの新しいネットワークデバイスルールを編集し、次の行を追加します。SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
sshdサービスが自動的に起動するように設定します。# systemctl enable sshd # systemctl is-enabled sshdカーネルブートパラメーターを変更します。
/etc/default/grubファイルのGRUB_TIMEOUTパラメーター値を更新します。GRUB_TIMEOUT=10存在する場合は、
GRUB_CMDLINE_LINUX行の末尾から次のオプションを削除します。rhgb quiet次の設定詳細で、
/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): 高性能でレイテンシーが低いため、ワークロードの実行に適しています。
grub.cfgファイルを再生成します。BIOS ベースのマシンの場合:
# grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdlineUEFI ベースのマシンの場合:
# grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline警告grub.cfgを再構築するパスは、BIOS ベースと UEFI ベースの両マシンで同じです。オリジナルのgrub.cfgは BIOS パスにのみ存在します。UEFI パスには、grub2-mkconfigコマンドを使用して変更または再作成してはならないスタブファイルがあります。システムが
grub.cfgにデフォルト以外の場所を使用している場合は、それに応じてコマンドを調整してください。
Windows Azure Linux Agent (
WALinuxAgent) を設定します。WALinuxAgentパッケージをインストールして有効にします。# dnf install WALinuxAgent -y # systemctl enable waagentWALinuxAgent でスワップ設定を無効にするために (cloud-init を使用してスワップを管理する場合に必要)、
/etc/waagent.confファイルで次の行を編集します。Provisioning.DeleteRootPassword=y ResourceDisk.Format=n ResourceDisk.EnableSwap=n ResourceDisk.SwapSizeMB=0注記WALinuxAgent でスワップを無効にすると、
cloud-initがエフェメラルディスク上のスワップ設定を管理できるようになります。
Azure プロビジョニング用に VM を準備します。
Red Hat Subscription Manager から仮想マシンの登録を解除します。
# subscription-manager unregister既存のプロビジョニングの詳細をクリーンアップします。
# waagent -force -deprovision注記このコマンドは、Azure が仮想マシンのプロビジョニングを自動的に処理すると警告を生成します。
シェル履歴をクリーンアップし、仮想マシンをシャットダウンします。
# export HISTSIZE=0 # poweroff
次のステップ
- RHEL イメージを Azure クラウドにアップロードするには、Azure ディスクイメージ形式に変換 します。
3.8. RHEL イメージを Azure ディスクイメージに変換する リンクのコピーリンクがクリップボードにコピーされました!
Microsoft Azure は、Azure ディスクイメージ (.vhd) 形式をサポートしています。イメージを変換するには、イメージファイルが 1 MB の倍数の位置から始まることを確認してから、RHEL イメージを qcow2 から固定 VHD 形式に変換します。
次のコマンドは qemu-img バージョン 2.12.0 を使用します。
前提条件
- Azure デプロイメント用の仮想マシンを準備する の手順を完了した。
手順
イメージを
qcow2形式からraw形式に変換します。$ qemu-img convert -f qcow2 -O raw <image_example_name>.qcow2 <image_name>.rawalign.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スクリプトを実行します。
$ sh align.sh <image_example_name>.rawYour image is already aligned. You do not need to resize. というメッセージが表示された場合、以下を実行します。
ファイルを固定
VHD形式に変換します。$ qemu-img convert -f raw -o subformat=fixed,force_size -O vpc <image_example_name>.raw <image_example_name>.vhd変換されると、
VHDファイルは Azure にアップロードする準備が整います。
値が表示される場合は、
rawイメージが調整されていないことを意味します。上記のように丸められた値を使用して、
rawファイルのサイズを変更します。$ qemu-img resize -f raw <image_example_name>.raw +1GrawイメージファイルをVHD形式に変換します。$ qemu-img convert -f raw -o subformat=fixed,force_size -O vpc <image_example_name>.raw <image_example_name>.vhd変換されると、
VHDファイルは Azure にアップロードする準備が整います。
次のステップ
- RHEL イメージ用に Azure リソースを設定 できるようになりました。
3.9. RHEL イメージ用の Azure リソースを設定する リンクのコピーリンクがクリップボードにコピーされました!
Azure リソースは、コンピュート、ネットワーク、ストレージなどのクラウドベースのリソース管理の基本サービスです。VHD ファイルをアップロードして Azure イメージを作成する前に、Azure リソースの設定を完了する必要があります。
前提条件
- Azure CLI がインストールされている。詳細は、Azure CLI のインストール を参照してください。
- RHEL イメージを Azure ディスクイメージに変換する ためのプロセスを完了した。
手順
Azure 認証情報を使用してホストを認証し、ログインします。
$ az loginブラウザーからログインするには、CLI からブラウザーで Azure サインインページを開きます。詳細は、Sign in with a browser を参照してください。
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 }有効な 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" }ストレージアカウントの詳細を表示します。
$ 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...==" }既存の接続文字列をエクスポートして環境変数を設定し、システムをストレージアカウントに接続します。
$ export AZURE_STORAGE_CONNECTION_STRING="<storage_connection_string>"以下に例を示します。
$ export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=azrhelclistact;AccountKey=NreGk...=="ストレージコンテナーを作成します。
$ az storage container create -n <container_name>以下に例を示します。
$ az storage container create -n azrhelclistcont { "created": true }仮想ネットワークを作成します。
$ 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 リソースを設定する を参照してください。
前提条件
- Azure リソースが設定済み である。
手順
ストレージコンテナーに
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%ストレージコンテナーをリスト表示します。
表形式で表示するには、次のように入力します。
$ az storage container list --output tableYAML 形式で表示するには、次のように入力します。
$ az storage container list --output yaml
最初のステップでアップロードした
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"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
次のステップ
- Azure 仮想マシンを起動して接続 できます。
3.11. Azure で RHEL 仮想マシンを起動して接続する リンクのコピーリンクがクリップボードにコピーされました!
イメージからマネージドディスク 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> \ --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をメモしておきます。
-
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 インスタンスに割り当てることができます。
前提条件
- アクティブな Red Hat アカウント がある。
手順
システムを登録します。
# subscription-manager registerサブスクリプションを割り当てます。
- アクティベーションキーを使用して、サブスクリプションを割り当てることができます。詳細は、カスタマーポータルのアクティベーションキーを作成する を参照してください。
- または、サブスクリプションプール (Pool ID) の ID を使用してサブスクリプションを手動で割り当てることができます。ホストベースのサブスクリプションのハイパーバイザーへの割り当て を参照してください。
オプション: 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 設定とターゲット を参照してください。
手順
kdumpおよび必要なパッケージをインストールします。# dnf install kexec-tools kdump-utils makedumpfileクラッシュダンプファイルのデフォルトの場所が
kdump設定ファイルで設定されており、/var/crashファイルが使用可能であることを確認します。# grep -v "#" /etc/kdump.conf path /var/crash core_collector makedumpfile -l --message-level 7 -d 31RHEL 仮想マシンのサイズとバージョンに基づき、より多くの空き領域を持つ
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がデフォルトのメモリーで期待どおりに動作することを示します。ただし、より多くの空き領域を持つターゲットを割り当てる必要がある場合があります。
-
Default は、デフォルトのメモリーとデフォルトの
/mnt/crashなどの空き領域のあるターゲットを割り当てるには、/etc/kdump.confファイルを編集してデフォルトのパスを置き換えます。$ sed s/"path /var/crash"/"path /mnt/crash"オプションパス
/mnt/crashは、kdumpがクラッシュダンプファイルを保存するファイルシステムへのパスを表します。クラッシュダンプファイルを別のパーティションに書き込む、デバイスに直接書き込む、リモートマシンに保存するなどの詳細は、kdump ターゲットの設定 を参照してください。
インスタンスで必要な場合は、適切なブートパラメーターを追加して、クラッシュカーネルのサイズを、
kdumpがvmcoreをキャプチャーするのに十分なサイズまで増やします。たとえば、Standard M416-208s v2 仮想マシンの場合、十分なサイズは 512 MB なので、ブートパラメーターは
crashkernel=512Mになります。GRUB 設定ファイルを開き、ブートパラメーター行に
crashkernel=512Mを追加します。# vi /etc/default/grub GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300 crashkernel=512M"GRUB 設定ファイルを更新します。
# grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline
- 仮想マシンを再起動して、仮想マシンに個別のカーネルクラッシュメモリーを割り当てます。
検証
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 クラスターを作成および管理するための
CorosyncとKronosnet - カスタムアプリケーションを設定および管理するためのリソースエージェント
- ベアメタルサーバーや仮想マシンなどのプラットフォームでクラスターを使用するためのフェンシングエージェント
Red Hat HA アドオンは、ノード障害、負荷分散、ノードのヘルスチェックなどの重要なタスクを処理して、フォールトトレランスとシステムの信頼性を確保します。
4.2. Azure の高可用性パッケージおよびエージェントのインストール リンクのコピーリンクがクリップボードにコピーされました!
Azure 上で Red Hat High Availability クラスターを設定できるようにするには、各ノードに高可用性パッケージとエージェントをインストールする必要があります。
主な目的はフォールトトレラントで可用性の高いシステムを構築することですが、これらの特定のパッケージをインストールすることで、次のことが可能になります。
- 自動フェイルオーバー機能 - 1 つのノードに障害が発生した場合、サービスが自動的に健全なノードに移動します。
- リソース管理 - クラスターは、サービス、データベース、アプリケーションなどを管理および監視できます。
- サービス継続性 - ハードウェアまたはソフトウェアの障害時でもサービスの可用性を確保することで、ダウンタイムを最小限に抑えます。
- Azure 固有の統合 - fence-agents-azure-arm パッケージは、Azure 固有のフェンシング機能を提供します。この機能を使用すると、クラスターは Azure 環境の仮想マシンを停止したり、ネットワークアクセスを管理したりすることで、障害が発生したノードを安全に分離できます。
前提条件
手順
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仮想マシンを Red Hat に登録します。
$ sudo -i # subscription-manager registerすべてのリポジトリーを無効にします。
# subscription-manager repos --disable= *RHEL サーバーの HA リポジトリーを有効にします。
# subscription-manager repos --enable=rhel-10-for-x86_64-highavailability-rpmsすべてのパッケージを更新します。
# dnf update -yRed Hat HA アドオンパッケージを Azure フェンシングエージェントと共にインストールします。
# dnf install pcs pacemaker fence-agents-azure-arm直のステップで
pcsおよびpacemakerをインストールすると、haclusterユーザーが作成されます。ここで、haclusterのパスワードを作成し、それをすべてのクラスターノードに使用します。# passwd haclusterシステムに
firewalld.serviceがある場合は、RHEL ファイアウォールにhigh availabilityサービスを追加します。# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reloadpcsサービスを起動し、システムの起動時に開始できるようにします。# 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) 操作へのアクセスを許可および自動化します。
前提条件
- Azure コマンドラインインターフェイス (CLI) がシステムにインストールされている。
- Microsoft Azure サブスクリプションの管理者または所有者であり、Azure AD アプリケーションを作成できる。
手順
HA クラスター内の任意のノードで、Azure アカウントにログインします。
$ az loginAzure フェンスエージェントのカスタムロールの
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": [] }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" }- Azure Web コンソールインターフェイスで、Virtual Machine を選択し、左側のメニューで Identity をクリックします。
- On を選択→ Save をクリック→ Yes をクリックして確認します。
- Azure role assignments → Add role assignment をクリックします。
-
ロールに必要な Scope (例:
Resource Group) を選択します。 - 必要な Resource Group を選択します。
- オプション: 必要に応じて Subscription を変更します。
- Linux Fence Agent Role ロールを選択します。
- 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 オプションを使用します。
手順
pcsを実行するノードでクラスター内の各ノードのpcsユーザーhaclusterを認証します。次のコマンドは、
z1.example.comとz2.example.comで構成される 2 ノードクラスターの両ノードに対して、z1.example.comのhaclusterユーザーを認証します。[root@z1 ~]# pcs host auth z1.example.com z2.example.com Username: hacluster Password: z1.example.com: Authorized z2.example.com: Authorizedz1.example.comで以下のコマンドを実行し、2 つのノードz1.example.comとz2.example.comで構成される 2 ノードクラスターmy_clusterを作成します。これにより、クラスター設定ファイルが、クラスターの両ノードに伝搬されます。このコマンドには--startオプションが含まれます。このオプションを使用すると、クラスターの両ノードでクラスターサービスが起動します。[root@z1 ~]# pcs cluster setup my_cluster --start z1.example.com z2.example.comクラスターサービスを有効にし、ノードの起動時にクラスターの各ノードでクラスターサービスが実行するようにします。
注記使用している環境でクラスターサービスを無効のままにしておきたい場合などは、この手順を省略できます。この手順を行うことで、ノードがダウンした場合にクラスターやリソース関連の問題をすべて解決してから、そのノードをクラスターに戻すことができます。クラスターサービスを無効にしている場合には、ノードを再起動する時に
pcs cluster startコマンドを使用して手作業でサービスを起動しなければならないので注意してください。[root@z1 ~]# pcs cluster enable --allpcs 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 Clusters の Cluster 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 ではクラスターがサポートされないことに注意してください。
以下の表は、フェンシングデバイスに設定できる一般的なプロパティーを説明します。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
|
| 文字列 |
ホスト名を、ホスト名に対応していないデバイスのポート番号へマッピングします。たとえば、 | |
|
| 文字列 |
このデバイスで制御するマシンのリストです ( | |
|
| 文字列 |
*
* それが設定されておらず、フェンスデバイスが
* それ以外で、フェンスデバイスが
* それ以外は、 |
デバイスで制御するマシンを指定します。使用できる値は、 |
以下の表では、フェンシングデバイスに設定できるその他のプロパティーをまとめています。これらのオプションは高度な設定を行う場合にのみ使用されます。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
|
| 文字列 | port |
port の代替パラメーターです。デバイスによっては、標準の port パラメーターに対応していない場合や、そのデバイス固有のパラメーターも提供している場合があります。このパラメーターを使用して、デバイス固有の代替パラメーターを指定します。これは、フェンシングするマシンを示します。クラスターが追加パラメーターを提供しないようにする場合は、 |
|
| 文字列 | reboot |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 |
タイムアウト期間内に、 |
|
| 文字列 | off |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 | タイムアウト期間内に、off コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker によるオフ動作の再試行回数を変更する場合に使用します。 |
|
| 文字列 | list |
|
|
| 時間 | 60s | list 操作にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、list 操作にデバイス固有のタイムアウトを指定します。 |
|
| 整数 | 2 |
タイムアウト期間内に、 |
|
| 文字列 | monitor |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 |
タイムアウト期間内に、 |
|
| 文字列 | status |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 | タイムアウト期間内に、status コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による status 動作の再試行回数を変更する場合に使用します。 |
|
| 文字列 | 0s |
フェンシング操作のベース遅延を有効にし、ベース遅延の値を指定します。 |
|
| 時間 | 0s |
フェンシング操作のランダム遅延を有効にし、ベース遅延とランダム遅延を組み合わせた最大値である最大遅延を指定します。たとえば、ベース遅延が 3 で、 |
|
| 整数 | 1 |
このデバイスで並行して実行できる操作の上限です。最初に、クラスタープロパティーの |
|
| 文字列 | on |
高度な使用のみ - |
|
| 時間 | 60s |
高度な使用のみ - |
|
| 整数 | 2 |
高度な使用のみ - タイムアウト期間内に、 |
個々のフェンスデバイスに設定できるプロパティーのほかにも、以下の表で説明しているように、フェンス動作を判断するクラスタープロパティーも設定できます。
| オプション | デフォルト | 説明 |
|---|---|---|
|
| true |
障害が発生したノードと、停止できないリソースが含まれるノードをフェンスする必要があることを示します。データを保護するには、
Red Hat は、この値が |
|
| reboot |
フェンシングデバイスに送信するアクション。使用できる値は |
|
| 60s | STONITH アクションが完了するのを待つ時間。 |
|
| 10 | クラスターがすぐに再起動できなくなるまで、ターゲットでフェンシングが失敗する回数。 |
|
| ノードがハードウェアウォッチドッグによって強制終了すまで待機する最大時間。この値は、ハードウェアウォッチドッグのタイムアウト値の倍に設定することが推奨されます。このオプションは、ウォッチドッグのみの SBD 設定がフェンシングに使用される場合にのみ必要です。 | |
|
| true | フェンシング操作を並行して実行できるようにします。 |
|
| stop |
独自のフェンシングの通知を受信した場合は、クラスターノードがどのように反応するかを決定します。クラスターノードは、フェンシングの設定が間違っている場合に独自のフェンシングの通知を受信するか、ファブリックフェンシングがクラスター通信を遮断しない状態である可能性があります。許可される値は、Pacemaker をすぐに停止し、停止したままにする
このプロパティーのデフォルト値は |
|
| 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=1 と pcs property set priority-fencing-delay=15s を設定し、他の優先度が設定されていない場合には、最も多くのリソースを実行するノード以外はフェンシングを開始するまで 15 秒間待機するため、最も多くのリソースを実行するノードが稼働状態を維持する可能性が高くなります。特定のリソースが他のリソースよりも重要である場合は、優先度を高く設定できます。
昇格可能なクローンに優先度が設定されている場合、そのクローンのプロモートロールを実行しているノードの優先度が 1 ポイント追加されます。
フェンシング遅延の相互作用
複数のタイプのフェンシング遅延を設定すると、以下のようになります。
-
priority-fencing-delayプロパティーで遅延を設定すると、その遅延はpcmk_delay_baseとpcmk_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 の無効化 を参照してください。
以下の手順で、フェンスデバイスをテストします。
手順
デバイスへの接続に使用する SSH、Telnet、HTTP などのリモートプロトコルを使用して、手動でログインしてフェンスデバイスをテストしたり、出力される内容を確認します。たとえば、IPMI 対応デバイスのフェンシングを設定する場合は、
ipmitoolを使用してリモートでのログインを試行します。手動でログインする際に使用するオプションに注意してください。これらのオプションは、フェンスエージェントを使用する際に必要になる場合があります。フェンシングデバイスにログインできない場合は、そのデバイスが ping 可能であること、ファイアウォール設定がフェンシングデバイスへのアクセスを妨げていないこと、フェンシングデバイスでリモートアクセスが有効になっていること、認証情報が正しいことなどを確認します。
フェンスエージェントスクリプトを使用して、フェンスエージェントを手動で実行します。フェンスエージェントを実行するのに、クラスターサービスが実行している必要はないため、デバイスをクラスターに設定する前にこのステップを完了できます。これにより、先に進む前に、フェンスデバイスが適切に応答することを確認できます。
注記これらの例では、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だけに対応しています。フェンスデバイスを、手動で機能したオプションと同じオプションでクラスターに設定し、クラスターを起動したら、以下の例にあるように、任意のノードから
pcs stonith fenceコマンドを実行してフェンシングをテストします (または複数のノードから複数回実行します)。pcs stonith fenceコマンドは、CIB からクラスター設定を読み取り、フェンス動作を実行するように設定されたフェンスエージェントを呼び出します。これにより、クラスター設定が正確であることが確認できます。# pcs stonith fence node_namepcs stonith fenceコマンドが正常に動作する場合は、フェンスイベントが発生したときにクラスターのフェンシング設定が機能することを意味します。このコマンドが失敗すると、クラスター管理が取得した設定でフェンスデバイスを起動することができません。以下の問題を確認し、必要に応じてクラスター設定を更新します。- フェンス設定を確認します。たとえば、ホストマップを使用したことがある場合は、指定したホスト名を使用して、システムがノードを見つけられるようにする必要があります。
- デバイスのパスワードおよびユーザー名に、bash シェルが誤って解釈する可能性がある特殊文字が含まれるかどうかを確認します。パスワードとユーザー名を引用符で囲んで入力すると、この問題に対処できます。
-
pcs stonithコマンドで指定したものとまったく同じ IP アドレスまたはホスト名を使用してデバイスに接続できるか確認します。たとえば、stonith コマンドでホスト名を指定し、IP アドレスを使用して行ったテストは有効ではありません。 フェンスデバイスが使用するプロトコルにアクセスできる場合は、そのプロトコルを使用してデバイスへの接続を試行します。たとえば、多くのエージェントが ssh または telnet を使用します。デバイスへの接続は、デバイスの設定時に指定した認証情報を使用して試行する必要があります。これにより、有効なプロンプトを取得し、そのデバイスにログインできるかどうかを確認できます。
すべてのパラメーターが適切であることが確認できたものの、フェンスデバイスには接続できない時に、フェンスデバイスでログ機能が使用できる場合は、ログを確認できます。これにより、ユーザーが接続したかどうかと、ユーザーが実行したコマンドが表示されます。
/var/log/messagesファイルで stonith やエラーを確認すれば、発生している問題のヒントが得られる可能性もあります。また、エージェントによっては、より詳細な情報が得られる場合があります。
フェンスデバイステストに成功し、クラスターが稼働したら、実際の障害をテストします。このテストでは、クラスターで、トークンの損失を生じさせる動作を実行します。
ネットワークを停止します。ネットワークの利用方法は、設定により異なります。ただし、多くの場合は、ネットワークケーブルまたは電源ケーブルをホストから物理的に抜くことができます。ネットワーク障害のシミュレーションの詳細は、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" dropsysrq-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-2にmy_iloという ilo フェンスデバイスを設定した。 -
ノード
rh7-2にmy_apcという apc フェンスデバイスを設定した。
手順
ノード
rh7-2のフェンスデバイスmy_iloにフェンシングレベル 1 を追加します。# pcs stonith level add 1 rh7-2 my_iloノード
rh7-2のフェンスデバイスmy_apcにフェンシングレベル 2 を追加します。# pcs stonith level add 2 rh7-2 my_apc現在設定されているフェンシングレベルをリスト表示します。
# 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. フェンシングトポロジーにおけるノードの指定 リンクのコピーリンクがクリップボードにコピーされました!
フェンストポロジーのノードは、ノード名に適用する正規表現と、ノードの属性 (およびその値) で指定できます。
手順
次のコマンドでは、ノード
node1、node2、およびnode3がフェンスデバイスapc1およびapc2を使用するように設定し、ノードnode4、node5、および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. 冗長電源のフェンシング設定 リンクのコピーリンクがクリップボードにコピーされました!
冗長電源にフェンシングを設定する場合は、ホストを再起動するときに、クラスターが、最初に両方の電源をオフにしてから、いずれかの電源をオンにするようにする必要があります。
ノードの電源が完全にオフにならないと、ノードがリソースを解放しない場合があります。このとき、解放できなかったリソースに複数のノードが同時にアクセスして、リソースが破損する可能性があります。
各デバイスを一度だけ定義し、両方のデバイスがノードのフェンスに必要であると指定する必要があります。
手順
最初のフェンスデバイスを作成します。
# 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 つ目のフェンスデバイスを作成します。
# 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"ノードをフェンスするには両方のデバイスが必要であることを指定します。
# 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 config と pcs 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 を無効にする手順は、サーバーシステムにより異なる場合があります。この手順は、お使いのハードウェアのドキュメントで確認する必要があります。
手順
-
ノードを再起動して
BIOS CMOS Setup Utilityプログラムを起動します。 - 電源メニュー (または同等の電源管理メニュー) に移動します。
電源メニューで、
Soft-Off by PWR-BTTN機能 (または同等) をInstant-Off(または、遅延なく電源ボタンでノードをオフにする同等の設定) に設定します。以下のBIOS CMOS Setup Utiliyの例は、ACPI FunctionがEnabledに設定され、Soft-Off by PWR-BTTNがInstant-Offに設定されている Power メニューを示しています。注記ACPI Function、Soft-Off by PWR-BTTN、およびInstant-Offに相当するものは、コンピューターによって異なります。ただし、この手順の目的は、電源ボタンを使用して遅延なしにコンピューターをオフにするように BIOS を設定することです。-
BIOS CMOS Setup Utilityプラグラムを終了します。BIOS 設定が保存されます。 - ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
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 Function が Enabled に設定され、Soft-Off by PWR-BTTN が Instant-Off に設定されていることを示しています。
4.5.13.2. logind.conf ファイルで ACPI Soft-Off の無効化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/systemd/logind.conf ファイルで電源キーの処理を無効にする場合は、以下の手順を行います。
手順
/etc/systemd/logind.confファイルに、以下の設定を定義します。HandlePowerKey=ignoresystemd-logindサービスを再起動します。# systemctl restart systemd-logind.service
検証
- ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
4.5.13.3. GRUB 2 ファイルでの ACPI の完全な無効化 リンクのコピーリンクがクリップボードにコピーされました!
ACPI Soft-Off は、カーネルの GRUB メニューエントリーに acpi=off を追加して無効にできます。
この方法は、ACPI を完全に無効にします。コンピューターの中には、ACPI が完全が無効になってるとシステムが正しく起動しないものもあります。お使いのクラスターに適した方法が他にない場合に 限り、この方法を使用してください。
手順
以下のように、
grubbyツールで、--argsオプションと--update-kernelオプションを使用して、各クラスターノードのgrub.cfgファイルを変更します。# grubby --args=acpi=off --update-kernel=ALL- ノードを再起動します。
検証
- ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は、フェンスデバイスのテスト を参照してください。
4.6. Azure 内部ロードバランサーの作成 リンクのコピーリンクがクリップボードにコピーされました!
Azure 内部ロードバランサーは、ヘルスプローブ要求に応答しないクラスターノードを削除します。次の手順には、特定の Microsoft 手順を参照する各ステップがあり、HA 用にロードバランサーをカスタマイズするための設定が含まれています。
前提条件
- Azure control panel にログインしている。
手順
- 基本ロードバランサーを作成 します。IP アドレスの割り当てタイプの場合は、内部ロードバランサー、基本 SKU、および 動的 を選択します。
- バックエンドのアドレスプールを作成します。バックエンドプールを HA に Azure リソースを作成した時に作成された可用性セットに関連付けます。ターゲットネットワーク IP 設定は設定しないでください。
- ヘルスプローブを作成します。ヘルスプローブの場合は TCP を選択し、ポート 61000 を入力します。別のサービスに干渉しない TCP ポート番号を使用できます。特定の HA 製品アプリケーション (SAP HANA や SQL Server など) には、Microsoft と連携して使用する正しいポートを指定する必要がある場合があります。
- ロードバランサールールを作成します。ロードバランシングルールを作成する場合は、デフォルト値が事前に設定されます。フローティング IP (ダイレクトサーバーを返す) を 有効 に設定してください。
次のステップ
4.7. ロードバランサーリソースエージェントの設定 リンクのコピーリンクがクリップボードにコピーされました!
ヘルスプローブを作成した後、load balancer リソースエージェントを設定する必要があります。このリソースエージェントは、Azure ロードバランサーからヘルスプローブ要求に応答し、要求に応答しないクラスターノードを削除するサービスを実行します。
前提条件
- Azure ロードバランサーの作成 プロセスを完了した。
手順
すべてのノードに
nmap-ncatリソースエージェントをインストールします。# dnf install nmap-ncat resource-agents-cloud1 つのノードで以下のステップを実行します。
IPaddr2アドレスのFrontendIPロードバランサーを使用して、pcsリソースとグループを作成します。# pcs resource create resource-name IPaddr2 ip="10.0.0.7" --group <cluster_resources_group>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
第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 インスタンスは次の順序でクラウドサービスインフラストラクチャーとやり取りします。
- 初期化: RHEL インスタンスが起動すると、クラウドでホストされているファームウェアが最初に起動し、セキュアブートメカニズムを実装します。
- 変数ストアの初期化: ファームウェアは、変数ストアから UEFI 変数を初期化します。このストアは、ブートプロセスと実行時の操作のためにファームウェアが管理する必要がある情報専用のストレージ領域です。RHEL インスタンスが初めて起動すると、ストアは仮想マシンイメージに関連付けられたデフォルト値によって初期化されます。
ブートローダー: ブート時に、ファームウェアは第 1 段階のブートローダーをロードします。x86 UEFI 環境の RHEL インスタンスの場合、第 1 段階のブートローダーは shim です。shim ブートローダーは、ブートプロセスの次の段階を認証して読み込み、UEFI と GRUB 間の橋渡し役として機能します。
-
RHEL の shim x86 バイナリーは、現在
Microsoft Corporation UEFI CA 2011Microsoft 証明書によって署名されています。これは、Allowed Signature データベース (db) にデフォルトの Microsoft 証明書が含まれているさまざまなハードウェアおよび仮想化プラットフォーム上で、RHEL インスタンスをセキュアブート対応モードで起動できるようにするためです。 -
shim バイナリーは、Red Hat Secure Boot CA と、必要に応じて Machine Owner Key (
MOK) を使用して、信頼済み証明書のリストを拡張します。
-
RHEL の shim x86 バイナリーは、現在
-
UKI: shim バイナリーは、RHEL UKI (
kernel-uki-virtパッケージ) をロードします。対応する証明書 (x86_64 アーキテクチャーではRed Hat Secure Boot Signing 504) が UKI に署名します。この証明書はredhat-sb-certsパッケージにあります。この証明書は Red Hat Secure Boot CA によって署名されているため、チェックは成功します。 -
UKI アドオン: UKI
cmdline拡張機能を使用する場合、RHEL カーネルが、拡張機能の署名をdb、MOK、および shim に同梱されている証明書と照合して積極的にチェックします。このプロセスにより、その拡張機能が、オペレーティングシステムベンダーである RHEL か、ユーザーのどちらかによって署名されていることが保証されます。
RHEL カーネルがセキュアブートモードで起動すると、カーネルは lockdown モードになります。lockdown に入ると、RHEL カーネルは db の鍵を .platform キーリングに追加し、MOK の鍵を .machine キーリングに追加します。カーネルビルドプロセス中、ビルドシステムは、秘密鍵と公開鍵で構成される一時的な鍵を使用して動作します。ビルドシステムは、kernel-modules-core、kernel-modules、kernel-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 設定の下にあります。
前提条件
パッケージをインストールしている。
-
python3 -
openssl -
efivar -
keyutils -
python3-virt-firmware
-
-
azure-cliユーティリティーがインストールされている。詳細は、Installing the Azure CLI on Linux を参照してください。
手順
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証明書を
base64エンコード形式に変換します。$ echo base64 -w0 custom_db.cer MIIFIjCCAwqgAwIBAgITNf23J4k0d8c0NR ....新しい Azure Compute Gallery イメージバージョンを登録するための
azure-example-template.jsonAzure 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>" ] } ] } } } } } ] }azure-cliユーティリティーを使用して、イメージバージョンを登録します。$ az deployment group create --name <example_deployment> \ --resource-group <example_resource_group> \ --template-file <example_template.json>- Azure Portal からインスタンスを再起動します。
検証
新しく作成された RHEL インスタンスでセキュアブートが有効になっているか確認します。
$ mokutil --sb-state SecureBoot enabledkeyctlユーティリティーを使用して、カスタム証明書のカーネルキーリングを確認します。$ 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 セキュアブートプロセスについて リンクのコピーリンクがクリップボードにコピーされました!
- 初期化と測定: TDX 対応ハイパーバイザーが、仮想マシンの初期状態を設定します。このハイパーバイザーは、ファームウェアバイナリーファイルを仮想マシンメモリーにロードし、初期レジスター状態を設定します。Intel プロセッサーが仮想マシンの初期状態を測定し、仮想マシンの初期状態を検証するための詳細を提供します。
- ファームウェア: 仮想マシンが UEFI ファームウェアを初期化します。ファームウェアには、ステートフルまたはステートレスな Virtual Trusted Platform Module (vTPM) 実装が含まれる場合があります。ステートフルな vTPM は、仮想マシンの再起動後や移行後も永続的な暗号化状態を維持します。一方、ステートレスな vTPM は、永続性を持たず、仮想マシンセッションごとに新しい暗号化状態を生成します。vTPM は、Virtual Machine Privilege Levels (VMPL) テクノロジーによってゲストから隔離されます。VMPL は、各仮想マシンコンポーネントとハイパーバイザー間のハードウェアによる特権分離を提供します。
- vTPM: クラウドサービスプロバイダーによっては、ステートフルな vTPM 実装の場合、UEFI ファームウェアがリモートアテステーションを実行して vTPM の永続的な状態を復号することがあります。また、vTPM は、セキュアブートの状態、ブートアーティファクトの署名に使用される証明書、UEFI バイナリーハッシュなど、ブートプロセスに関するデータを収集します。
Shim: UEFI ファームウェアは、初期化プロセスを完了すると、拡張ファームウェアインターフェイス (EFI) システムパーティションを検索します。その後、UEFI ファームウェアはそのパーティションから第 1 段階のブートローダーを検証して実行します。RHEL の場合、これは
shimです。shimプログラムは、Microsoft 以外のオペレーティングシステムが、EFI システムパーティションから第 2 段階のブートローダーを読み込むことを可能にします。-
shimは Red Hat の証明書を使用して、第 2 段階のブートローダー (grub) または Red Hat Unified Kernel Image (UKI) を検証します。 -
grubまたはUKIは、Linux カーネルと initramfs、およびカーネルコマンドラインを展開、検証、実行します。このプロセスにより、信頼できるセキュアな環境に Linux カーネルが確実にロードされます。
-
Initramfs: initramfs の処理中、フルディスク暗号化テクノロジーが使用されている場合、暗号化されたルートパーティションのロックが vTPM の情報によって自動的に解除されます。
-
ルートボリュームが使用可能になると、
initramfsは実行フローをルートボリュームへ移行します。
-
ルートボリュームが使用可能になると、
- アテステーション: 仮想マシンのテナントは、システムへのアクセス権を得てから、リモートアテステーションを実行することで、アクセスした仮想マシンが改ざんされていない Confidential Virtual Machine (CVM) であることを確認できます。アテステーションは、Intel プロセッサーと vTPM からの情報に基づいて実行されます。このプロセスにより、RHEL インスタンスと Intel プロセッサーの CPU およびメモリー初期状態の真正性と信頼性が確認されます。
- 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 を参照してください。
手順
azure cliユーティリティーを使用して Azure にログインします。$ az login選択したアベイラビリティーゾーンの Azure リソースグループを作成します。
$ az group create --name <example_resource_group> --location westeuropeTDX が有効な 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 DiskWithVMGuestStateRHEL インスタンスに接続します。
$ 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 セキュアブートプロセスについて リンクのコピーリンクがクリップボードにコピーされました!
- 初期化と測定: SEV-SNP 対応ハイパーバイザーが、仮想マシンの初期状態を設定します。このハイパーバイザーは、ファームウェアバイナリーを仮想マシンメモリーにロードし、初期レジスター状態を設定します。AMD Secure Processor (SP) が仮想マシンの初期状態を測定し、仮想マシンの初期状態を検証するための詳細を提供します。
- ファームウェア: 仮想マシンが UEFI ファームウェアを初期化します。ファームウェアには、ステートフルまたはステートレスな Virtual Trusted Platform Module (vTPM) 実装が含まれる場合があります。ステートフルな vTPM は、仮想マシンの再起動後や移行後も永続的な暗号化状態を維持します。一方、ステートレスな vTPM は、永続性を持たず、仮想マシンセッションごとに新しい暗号化状態を生成します。vTPM は、Virtual Machine Privilege Levels (VMPL) テクノロジーによってゲストから隔離されます。VMPL は、各仮想マシンコンポーネントとハイパーバイザー間のハードウェアによる特権分離を提供します。
vTPM: クラウドサービスプロバイダーによっては、ステートフルな vTPM 実装の場合、UEFI ファームウェアがリモートアテステーションを実行して vTPM の永続的な状態を復号することがあります。
- また、vTPM は、セキュアブートの状態、ブートアーティファクトの署名に使用される証明書、UEFI バイナリーハッシュなど、ブートプロセスに関する情報を測定します。
Shim: UEFI ファームウェアは、初期化プロセスを完了すると、拡張ファームウェアインターフェイス (EFI) システムパーティションを検索します。その後、UEFI ファームウェアはそのパーティションから第 1 段階のブートローダーを検証して実行します。RHEL の場合、これは
shimです。shimプログラムは、Microsoft 以外のオペレーティングシステムが、EFI システムパーティションから第 2 段階のブートローダーを読み込むことを可能にします。-
shimは Red Hat の証明書を使用して、第 2 段階のブートローダー (grub) または Red Hat Unified Kernel Image (UKI) を検証します。 -
grubまたはUKIは、Linux カーネルと初期 RAM ファイルシステム (initramfs)、およびカーネルコマンドラインを展開、検証、実行します。このプロセスにより、信頼できるセキュアな環境に Linux カーネルが確実にロードされます。
-
Initramfs:
initramfsの処理中、フルディスク暗号化テクノロジーが使用されている場合、暗号化されたルートパーティションのロックが vTPM の情報によって自動的に解除されます。-
ルートボリュームが使用可能になると、
initramfsは実行フローをルートボリュームへ移行します。
-
ルートボリュームが使用可能になると、
- アテステーション: 仮想マシンのテナントは、システムへのアクセス権を得てから、リモートアテステーションを実行することで、アクセスした仮想マシンが改ざんされていない Confidential Virtual Machine (CVM) であることを確認できます。アテステーションは、AMD SP と vTPM からの情報に基づいて実行されます。このプロセスにより、RHEL インスタンスと AMD プロセッサーの CPU およびメモリー初期状態の真正性と信頼性が確認されます。
- 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 でサポートされる仮想マシンサイズ を参照してください。
手順
Azure CLI ユーティリティーを使用して Azure にログインします。
$ az login選択したアベイラビリティーゾーンの Azure リソースグループを作成します。
$ az group create --name <example_resource_group> --location eastusSEV-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 DiskWithVMGuestStateRHEL インスタンスに接続します。
$ 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 ...