SafeKit による KVM 高可用性:フェイルオーバー用の kvm.safe モジュールをインストールする
KVM の高可用性クイックインストールガイド
このガイドでは、SafeKit を使用して KVM 用の mirror クラスターをセットアップし、共有ストレージを必要とせずに自動フェイルオーバーと同期レプリケーションを確実に行う方法について説明します。
ヘルプが必要な場合は、SafeKit AI 🤖をご利用ください。
1. 概要
- アーキテクチャ: 2 ノードシステム (プライマリ/セカンダリ) を使用します。
- データ保護: ゼロデータ損失(RPO = 0)を実現するリアルタイム同期レプリケーションを実装します。
2. インストール
- ソフトウェア: 両方のサーバーに SafeKit エンジンをインストールします。
- モジュール: 事前に設定された
kvm.safeアプリケーションモジュールをダウンロードします。
3. 設定
- **Web コンソール:**KVM ファイルを含む特定のフォルダーを構成します。
- **監視:**KVM アプリケーションの監視と保護を開始します。
SafeKit High Availability の制限事項
| 制限/要件 | 理由と影響 | 推奨される代替案 |
|---|---|---|
| レプリケーションサイズ:数 TB | 障害発生後の再同期時間(ステップ 3): • 1 Gb/s ネットワーク ≈ 3 時間/TB • 10 Gb/s ネットワーク ≈ 1 時間/TB(ディスクの書き込み性能による) | • 外部共有ストレージを使用する(より高価で、より複雑)。 |
| ファイル数:100 万ファイル未満 | •障害発生後の再同期時間性能(ステップ 3)。 • 両方のノード間で各ファイルを比較するのに必要な時間。 | • 複製する多数のファイルを仮想ハードディスク/仮想マシンに配置します。 • この場合、仮想ハードディスク/仮想マシンを表すファイルのみがレプリケートおよび再同期されます。 |
| フェイルオーバー容量:32 台以下の VM | • 各 VM は、独立した mirror モジュール内で実行されます。 • 同じクラスター上で最大 32 個の mirror モジュールを実行できます。 | • 外部共有ストレージと別の VM クラスタリングソリューションを使用する(より高価で、より複雑)。 |
| ネットワークアーキテクチャ:リモートサイト間の LAN/VLAN ネットワーク | • 同じサブネット内の 2 つのノードで仮想 IP アドレスを自動フェイルオーバーします。 • 再同期のための十分な帯域幅(ステップ 3)。 • 同期レプリケーションの低レイテンシ:通常<5 ミリ秒の RTT。より高い値は、アプリケーションの書き込みレートに対して検証する必要があります。 | • 2 つのノードが異なるサブネットにある場合(クラウドで一般的)、ロードバランサー、クラウドプロバイダーの CLI、BGP、または DNS リダイレクションなどの他のルーティングオプションを使用します。 • 高遅延ネットワークには、非同期レプリケーションに対応したバックアップソリューションを使用してください。 |
SafeKit/KVM ソリューションの概要
解決策はこちらで説明されています:💡 共有ストレージなしで実現するシンプルな Linux KVM 高可用性
Linux への SafeKit/KVM ソリューションのインストール (kvm.safe)
前提条件
- 2 台の Linux ノードに KVM をインストールしました。
- 1 つ以上の仮想マシンにインストールされた重要なアプリケーション。
- KVM ホストあたり最大 32 台の仮想マシン。
- レプリケートされるデータの総量は数テラバイトに制限されます。これを超えると、再同期に要する時間が長くなります。
- ノード間の相互接続は最低 1Gb/s(より高速な再同期のためには 10Gb/s を推奨)。
- IP フェイルオーバーには、同じ LAN または拡張 LAN(L2)上の両方のノードが必要です。ルーティングされた L3 ネットワークはサポートされていません(🛠️ クラウドロードバランサーを除く)。
Linux でのパッケージのインストール
- SafeKit の無料版を 2 台の Linux ノードにインストールします。注:無料トライアルには SafeKit のすべての機能が含まれています。トライアル終了後、パッケージをアンインストールせずに永久ライセンスキーを有効化できます。
- safekit_xx.bin パッケージをダウンロードした後、それを実行して rpm と safekitinstall スクリプトを抽出し、safekitinstall スクリプトを実行します
- ファイアウォールの自動設定に 「はい」 と回答します
- Web コンソールとデフォルトユーザー admin のパスワードを設定します。すべてのノードで同じパスワードを設定してください。
Linux でのモジュールのインストール
- kvm.safe モジュールをダウンロードします。
このモジュールは無料です。userconfig.xml ファイルと再起動スクリプトが含まれています。 - kvm.safe を /opt/safekit/Application_Modules/generic/ に配置します。
SafeKit/KVM ソリューションのステップバイステップ設定
⚠️ KVM 構成は、VM1 という名前の仮想マシンで示されており、障害発生時に再起動するアプリケーションが含まれています。
⚠️ この設定は、レプリケートおよび再起動するすべての VM に対して繰り返す必要があります。
1. 前提条件
VM1 仮想マシンイメージは、ファイル /var/lib/libvirt/images/vm1.qcow2 にあります。SafeKit が設定する前に、仮想マシンを SafeKit によって複製される vm1 固有のディレクトリに配置するために、以下の設定を実行する必要があります。
ノード 1 の場合:
vm1 を停止:
virsh shutdown vm1vm1/ディレクトリを作成しますmkdir -p /var/lib/libvirt/images/vm1/vm1 イメージを新しい場所にコピーします
cp -a /var/lib/libvirt/images/vm1.qcow2 /var/lib/libvirt/images/vm1/
新しい場所でのテストが成功したら、元の vm1 イメージは削除できます。
vm1 設定ファイルを編集します
EDITOR=vi virsh edit vm1
そして、次の行を変更します
<source file='/var/lib/libvirt/images/vm1.qcow2'>
作成者:
<source file='/var/lib/libvirt/images/vm1/vm1.qcow2'>
クラッシュ時のデータ整合性のために、同じファイルでキャッシュオプションを「なし」に設定します
<disk type='file' device='disk'> <driver name='qemu' type='qcow2' **cache='none'** />vm1 設定ファイルを閉じます
vm1 の自動起動を無効にする:
virsh autostart vm1 --disablevm1 用の
vm1.xml設定ファイルを作成しますvirsh dumpxml vm1 > vm1.xml
ノード 2 の場合:
ノード 1 から
vm1.xml構成ファイルをコピーします。注:ノード 1 で vm1 構成が変更されるたびに、ノード 2 で新しい構成を再適用する必要があります。vm1 を作成しますが、起動しません
virsh define vm1.xmlvm1 自動起動を無効にする:
virsh autostart vm1 --disableイメージの保存先ディレクトリを作成します
mkdir -p /var/lib/libvirt/images/vm1/
2. SafeKit コンソールを起動します
- いずれかのクラスターノードで、
http://localhost:9010に接続してウェブコンソールをブラウザで起動します。 - ユーザー名に
adminと入力し、インストール時に定義したパスワードを入力します。
コンソールは、クラスター外部のワークステーションのブラウザーで実行することもできます。
⚠️ SafeKit の設定は、単一のブラウザから両方のノードで行います。
ℹ️ Web コンソールを保護するには、ユーザーガイドの 🛠️ 11. SafeKit Web サービスの保護を参照してください。

3. ノードアドレスの設定
- ノードの IP アドレスを入力し、
Tab keyを押して接続性を確認し、ノード名を入力します。node1 または node2 のいずれかが赤色の場合、両方のノードへのブラウザの接続性を確認し、両方のノードのファイアウォールを 🛠️ トラブルシューティングのために確認します。 - 次に、
Save and applyをクリックして設定を保存します。 - 両方のノードで
Success✅ メッセージを確認します。 - あるノードで構成の
Failure❌ が発生した場合は、そのノードの▼アコーディオンを開いてメッセージを確認してください。AI 🤖 SafeKit を使用して支援を受けることができます。
ℹ️ 必要に応じて、新しい LAN and nodes(最初の ➕)を追加して、2 番目のハートビートと専用のレプリケーションネットワークを作成できます。
ℹ️ Advanced configuration をクリックすると、cluster.xml ファイルが表示されます。このファイルはコンソールによって自動的に作成され、ノードにデプロイされます。

4. モジュールを選択します
New moduleで、kvm.safeモジュールをクリックします。
ℹ️ 上部の青いバナーで、🛜 node1 コンソール接続ノードを表します。このノードは、必要に応じて node2 にリクエストを中継します。
ℹ️ インストール時にモジュールを配置した場合、コンソールは接続ノード (node1) の Application_Modules/generic/ ディレクトリで xxx.safe を検索します。

5. モジュールの設定
- 起動時にモジュールを遅延なく
Automatic起動するように選択します。 - 通常、レプリケーションは単一の
Heartbeatネットワーク上で行われます。ただし、必要に応じてプライベートネットワークを定義できます(ステップ 3 で LAN 追加します)。 VM_PATHに、レプリケートされたディレクトリのルートパス (/var/lib/libvirt/images) を入力します。VM_NAMEに仮想マシン名 (vm1) を入力します。
VM1 ファイルは /var/lib/libvirt/images/vm1/ にあると仮定します(前提条件を参照)。このディレクトリは SafeKit によってリアルタイムで複製されます。
ℹ️ 仮想 IP アドレスを設定する必要はありません。VM1 は、セカンダリ KVM で物理 IP アドレスを使用して再起動され、この IP アドレスは再ルーティングされます。

6. VM の誤動作を検出するカスタムチェッカー
カスタムチェッカーは、VM が実行中であるかどうかをチェックします(‘virsh domstate’コマンドを使用)。VM が実行されていない場合、カスタムチェッカーは同じ KVM ノードまたは別のノードで VM を自動的に再起動します。
Checkers / Customをクリックします(画像参照)。Resource nameSafeKit のリソース名custom.VM_NAME_checkで仮想マシンを識別します。Actionでrestartと、VM は同じ KVM ノードで再起動されます。24 時間以内に 3 回再起動に失敗すると、SafeKit kvm モジュールはプライマリノードで停止し、セカンダリノードで VM のフェイルオーバーが発生します。Actionでstopstartを設定すると、VM が実行されていない場合に、もう一方の KVM ノードに直接フェイルオーバーされます。
ℹ️ メンテナンスのために仮想マシンを停止したい場合、カスタムチェッカーが自動的に再起動します。これを避けるには、チェッカーを一時的に一時停止してください 🖼️。または、コンソールで設定行を削除して削除することもできます。

7. スクリプトを編集する(任意)
- スクリプトを編集しないでください。
8. 通信の暗号化(オプション)
- ノード間の通信の暗号化を維持します。

9. 保存して適用
- 両方のノードで設定とスクリプト
Save and apply。

10. 設定が正常に完了したことを確認する
- 両方のノードで
Success✅ メッセージを確認し、Monitor modulesをクリックします。 - あるノードで構成の
Failure❌ が発生した場合は、そのノードの▼アコーディオンを開いてメッセージを確認してください。AI 🤖 SafeKit を使用して支援を受けることができます。

11. 最新のデータでノードを起動する
- ノード 1 に
vm1/の最新のレプリケートされたディレクトリがある場合は、それを選択して⋯Force start▶As primary。選択します。
ノード 2 が起動すると、すべてのデータがノード 1 からノード 2 にコピーされます。
⚠️ 間違った選択をすると、両方のノードで古いデータを同期させてしまう危険性があります。
⚠️ また、SafeKit はレプリケーションメカニズムをインストールし、その後 start_prim スクリプトで VM1 起動できるように、VM1 はノード 1 で停止していると想定されます。
⚠️ 2 回目以降の起動には Start 使用してください。SafeKit は最新のサーバーを保持します。「Starting As primary は、初回起動時または例外的な操作時に使用する特別な起動方法です。

12. ALONE(緑)に切り替わるまで待ちます
- ノード 1 は ALONE(緑)状態に達する必要があります。これは、
start_primスクリプトがノード 1 で実行されたことを意味します。
⚠️ ALONE(緑)に到達しない場合、または VM1 が起動しない場合は、ノード 1 のモジュールログ 🖼️で原因を分析してください。
node1の 🔍ログアイコンをクリックしてモジュールログを開き、チェッカーがエラーを検出してモジュールを停止するなどのエラーメッセージを探します。- ログの
start_primをクリックします。スクリプトの出力メッセージが右側に表示され、VM1 正しく起動していないなどのエラーを検出できます。 - ログメッセージについては、SafeKit AI 🤖 をご利用ください。
⚠️ クラスターが WAIT (red) not uptodate, STOP (red) not uptodate 状態の場合は、WAIT ノードを停止し、プライマリとして強制的に起動してください 🖼️。

13. ノード 2 を起動する
- ⋯コンテキストメニューからノード 2
Start。 - SECOND(緑色)の状態になるまで待ちます。
ℹ️
- ノード 2 は、レプリケートされたディレクトリを再同期している間(ノード 1 からノード 2 にコピー)、SECOND(オレンジ)の状態を維持します。
- レプリケートされたディレクトリで再同期するファイルのサイズやネットワーク帯域幅によっては、これに時間がかかる場合があります。
- コピーの進捗状況を確認するには、ノード 2 のモジュールログ 🖼️とレプリケーションリソース 🖼️を参照してください。ログメッセージのサポートには SafeKit AI 🤖 を使用してください。

14. クラスターが動作していることを確認します
- PRIM ノードで
VM1が稼働しており、SECOND ノードでは稼働していない状態で、クラスターが緑/緑であることを確認します。
この状態では、ファイル内の変更のみがリアルタイムで複製されます。

15. テスト
- PRIM ノードのコンテキストメニューを下にスクロールして、
Stopをクリックして停止します。 - SECOND ノードでフェイルオーバーが発生し、ALONE(緑色)になっていることを確認します。
- KVM tools で、
VM1ノード 2 で実行されていることを確認します。
⚠️ node2 で ALONE(緑)に到達しない場合、または VM1 が起動しない場合は、ノード 2 のモジュールログ 🖼️で原因を分析してください。
node2の 🔍ログアイコンをクリックしてモジュールログを開き、チェッカーがエラーを検出してモジュールを停止するなどのエラーメッセージを探します。- ログの
start_primをクリックします。スクリプトの出力メッセージが右側に表示され、VM1 正しく起動していないなどのエラーを検出できます。 - ログメッセージについては、SafeKit AI 🤖 をご利用ください。
⚠️
- すべて問題なければ、node1 で開始すると、node2 からレプリケートされたディレクトリが再同期されます。
- 問題が発生した場合は、node2 を停止し、node1 をプライマリとして強制的に起動します 🖼️。これにより、停止時のローカルに正常なデータで再起動します。
ℹ️ クラスターで何が起こっているかを理解するのに役立つ 🕒タイムライン 🖼️ があることに注意してください。

16. 必要に応じて、スプリットブレインチェッカーを設定します
- スプリットブレインチェッカーを設定する必要があるかどうかについては、「クラスターでネットワークが分離された場合のさまざまなシナリオ」を参照してください。
- モジュールの設定に移動し、
Checkers / Splitbrain] (画像参照) をクリックして、スプリットブレインのパラメータを編集します。 - 新しい設定
Save and apply両方のノードに再デプロイします(保存して適用するには、両方のノードでモジュールを停止する必要があります)。
パラメータ:
Resource nameリソース名splitbrain.witnessでウィットネスを識別します。この値を変更して、ウィットネスを識別することもできます。Witness addressは、ノードが PRIM から ALONE、または SECOND から ALONE に移行する際の ping の引数です。この値をウィットネスの IP(通常はルーターなどの堅牢な要素)に変更します。- 注:複数の IP アドレスをスペースで区切って設定できます。ネットワークが分離されている場合、IP アドレスは 1 つのノードからはアクセス可能で、もう一方のノードからはアクセスできないようにしてください。

17. スナップショットの複製
スナップショットの XML ファイルが格納されているディレクトリは、次のとおりです
/var/lib/libvirt/qemu/snapshot/%VM_NAME%
VM_NAME は仮想マシンの名前 (vm1) です。
注:スナップショットが作成されていない場合は、ディレクトリを生成するためにスナップショットを作成してください(作成しないと SafeKit 設定が失敗します)。
再現方法:
モジュール構成で、
Advanced Configuration(画像参照) をクリックしてuserconfig.xml。編集します。userconfig.xml の
<rfs>セクションに以下の行を挿入します<replicated dir="/var/lib/libvirt/qemu/snapshot/%VM_NAME%" mode="read_only"> </replicated>新しい構成
Save and apply変更された userconfig.xml ファイルを両方のノードに再デプロイします(保存して適用するには、両方のノードでモジュールを停止する必要があります)。virt-manager またはコマンドラインを使用して、PRIM ノードにスナップショットを作成します
virsh snapshot-create-as vm1 snapshot-name
注:コマンドラインでスナップショットを作成する場合、スナップショットビューを virt-manager で更新する必要があります。
PRIM ノードで作成されたスナップショットは、フェイルオーバー後にノード 2 で動作しますが、ノード 2 にはリストされません。
ノード 2 にスナップショットをインポートするには、次のコマンドを実行します
virsh snapshot-create --redefine vm1 /var/lib/libvirt/qemu/snapshot/vm1/snapshot-namevm1 のすべてのスナップショットを一覧表示するコマンドラインは次のとおりです
virsh snapshot-list vm1

18. サポート
- サポートを受けるには、ノードごとに 1 つずつ、合計 2 つの SafeKit
Snapshots(2 つの .zip ファイル)を取得してください。
ℹ️ サポートに関する詳細はこちら。

VM レベルの高可用性ソリューションのデモンストレーション
SafeKit ビデオ:Hyper-V による仮想マシンレベルのクラスタリング (5:15)
このビデオでは、SafeKit が SAN の複雑さなしに Hyper-V の高可用性をどのように実現するかを説明します。2 つのノード間で仮想マシンのレプリケーションを構成し、重要な仮想化ワークロードのシームレスなフェイルオーバーを保証する方法を学びます。このデモンストレーションでは Windows 上の Hyper-V を使用していますが、このソリューションは Linux 上の KVM でも同様に機能します。
章
- 🎬 アーキテクチャ概要:Hyper-V ノード 2 台と仮想マシン 2 台 (0:49)
- 🎬 クラスターと hyperv.safe モジュールの設定 (1:59)
- 🎬 ライブテスト:VM レプリケーション、移行、クラッシュ時の自動フェイルオーバー (2:26)
ステップバイステップの実装
- 🛠️ Windows で Hyper-V mirror クラスターをセットアップするためのガイドをお読みください。
- 🛠️ Linux で KVM mirror クラスターをセットアップするためのガイドをお読みください。
🔍 SafeKit を探索する
SafeKit の機能、アーキテクチャ、ビデオ、ドキュメント、無料トライアルに関する情報をご覧ください。
| リソース | 説明 | リンク |
|---|---|---|
| 主な機能 | SafeKit がシンプルで費用対効果の高い高可用性ソリューションである理由をご覧ください。 | 主な機能 |
| ユースケース | SafeKit が重要なアプリケーションとインフラストラクチャの可用性を維持する方法をご覧ください。 | ユースケースを探索する |
| デプロイメントモデル | SafeKit は、SAN や共有ストレージなしで高可用性を提供します。 | デプロイモデルを探索する |
| 高可用性戦略 | 仮想マシンの高可用性とアプリケーションの高可用性を比較します。 | 2 つの戦略を比較する |
| 技術仕様 | SafeKit クラスターの技術要件と制限事項を確認してください。 | 技術仕様書を読む |
| 動画 | SafeKit の構成と自動フェイルオーバーのデモンストレーションをご覧ください。 | テクニカルビデオを見る |
| アーキテクチャ | SafeKit mirror クラスターファイルをリアルタイムでレプリケートし、フェイルオーバーを処理する方法について説明します。 | Mirror アーキテクチャを探索する |
| アーキテクチャ | SafeKit farm クラスターネットワークトラフィックを分散し、フェイルオーバーを処理する方法について説明します。 | Farm アーキテクチャを探索する |
| 製品比較 | SafeKit と従来の高可用性クラスターを比較します。 | ソリューションを比較する |
| 技術リソース | 技術ドキュメントの検索、SafeKit のダウンロード、無料トライアルへのアクセスはこちらから。 | ドキュメントと無料トライアルにアクセス |
| アプリケーションモジュール | 事前に設定された SafeKit モジュールを使用して、アプリケーションの高可用性を設定します。 | アプリケーションモジュールを探索する |