SafeKit による K3S 高可用性:フェイルオーバー用の k3s.safe モジュールをインストールする
Kubernetes の高可用性クイックインストールガイド
このガイドでは、SafeKit を使用して Kubernetes 用の mirror クラスターをセットアップし、共有ストレージを必要とせずに自動フェイルオーバーと同期レプリケーションを確実に行う方法について説明します。
ヘルプが必要な場合は、SafeKit AI 🤖をご利用ください。
1. 概要
- アーキテクチャ: 2 ノードシステム (プライマリ/セカンダリ) を使用します。
- データ保護: ゼロデータ損失(RPO = 0)を実現するリアルタイム同期レプリケーションを実装します。
2. インストール
- ソフトウェア: 両方のサーバーに SafeKit エンジンをインストールします。
- モジュール: 事前に設定された
k3s.safeアプリケーションモジュールをダウンロードします。
3. 設定
- **Web コンソール:**Kubernetes ファイルを含む特定のフォルダーを構成します。
- **監視:**Kubernetes アプリケーションの監視と保護を開始します。
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/Kubernetes ソリューションの概要
解決策はこちらで説明されています:💡 Kubernetes K3s 高可用性:2 ノード同期レプリケーションとフェイルオーバー
Linux (k3s.safe) への SafeKit/Kubernetes ソリューションのインストールと設定
1. パッケージをダウンロードする
- SafeKit 8.2 の無料版を Linux にダウンロード(safekitlinux_xx.bin)
- k3s.safe Linux モジュールをダウンロードする
- k3sconfig.sh スクリプトをダウンロードします
- ドキュメント (pptx)
注:k3sconfig.sh スクリプトは、2 つの Linux Ubuntu 24.04 ノードに K3S、MariaDB、NFS、SafeKit をインストールします。
2. 両方のノードで最初に
2 台の Linux Ubuntu 24.04 ノードで、root として次の操作を実行します
- ノードがインターネットにアクセスできることを確認してください(プロキシ経由でも可)
- k3sconfig.sh、k3s.safe、および safekit_xx.bin パッケージをディレクトリにコピーし、そのディレクトリに cd します
- .bin ファイルを「safekit.bin」に名前変更します
- k3sconfig.sh と safekit.bin が実行可能であることを確認してください。
- k3sconfig.sh スクリプトを編集し、環境に合わせて環境変数 (仮想 IP を含む) をカスタマイズします
- 両方のノードで以下を実行します:
./k3sconfig.sh prereq
このスクリプトは、以下の処理を行います
- 必要な Debian パッケージをインストールします:alien, nfs-kernel-server, nfs-common, mariadb-server
- MariaDB の安全なインストール
- ファイルレプリケーション用のディレクトリを作成する
- レプリケートされたディレクトリを共有するための NFS サーバーを準備する
- SafeKit をインストールする
3. 最初のノードで
最初のノードで実行します:./k3sconfig.sh first
このスクリプトは、以下の処理を行います
- K3S 構成データベースと k3s ユーザーを作成する
- レプリケートされたストレージボリュームファイル(スパースファイル)を作成し、xfs ファイルシステムとしてフォーマットします
- safekit クラスターの構成を作成して適用します
- k3s.safe モジュールをクラスターにインストールして設定する
- 最初のノードで k3s モジュールを “prim” として起動します
- k3s をダウンロード、インストール、起動する
- nfs-subdir-external-provisioner Helm チャートをダウンロードしてインストールします
- K3S トークンを表示(2 番目のノードのインストールフェーズで使用)
4. 2 番目のノードで
2 番目のノードで実行します:./k3sconfig.sh second <token>
は、最初のノードで「k3sconfig.sh first」を実行した最後に表示される文字列です
このスクリプトは、以下の処理を行います
- 最初のノードで k3s モジュールが prim として起動していることを確認してください
- 2 番目のノードに k3s をインストールします
- k3s モジュールを起動します
5. 両方のノードで k3s SafeKit モジュールが実行されていることを確認します
両方のノードでこのコマンドで確認します:/opt/safekit/safekit –H "*" state
返信は画像に似せてください。
/opt/safekit/safekit –H "*" state
---------------- サーバー = http://10.0.0.20:9010 ----------------
admin アクション=実行
--------------------- k3s の状態 ---------------------
ローカル (127.0.0.1) : PRIM (サービス : 利用可能)(色 : 緑)
成功
---------------- サーバー = http://10.0.0.21:9010 ----------------
admin アクション=実行
--------------------- k3s の状態 ---------------------
ローカル (127.0.0.1) : SECOND (サービス : 利用可能) (色 : 緑)
成功
6. SafeKit ウェブコンソールを起動して、クラスターを管理します
- ブラウザを SafeKit ウェブコンソールの URL
http://server0-IP:9010に接続します。 - 画像のようなページが表示されます。
- Linux コマンドラインで、両方のノードで K3S が起動していること(
start_primとstart_secondで起動)、およびプライマリノードで MariaDB 起動していること(start_primで起動)を確認します。

7. テスト
- PRIM ノードのコンテキストメニューを下にスクロールして、
Stopをクリックして停止します。 - SECOND ノードでフェイルオーバーが発生し、ALONE(緑色)になっていることを確認します。
- そして、Linux のコマンドラインで、サービスのフェイルオーバーを確認します (
stop_primスクリプトでノード 1 で停止し、start_primスクリプトでノード 2 で開始します)。と K3S MariaDB node2 で実行される必要があります。
![]()
node2 で ALONE(緑)に到達しない場合は、ノード 2 のモジュールログで原因を分析してください。
node2をクリックして、モジュールログを表示します。start_primのサービス名が無効なSQL Server モジュールログの例ですsqlserver.exe プロセスは監視されますが、起動されていないため、最終的にモジュールは停止します。
![]()
すべて問題なければ、node1 で開始すると、node2 からレプリケートされたディレクトリが再同期されます。
問題が発生した場合は、node2 停止し、node1 をプライマリとして強制的に起動します。これにより、停止時のローカルに正常なデータで再起動されます。
![]()

8. WordPress などの Kubernetes アプリケーションでクラスターを試す
画像には WordPress のインストール例が示されています。これは、ポッドによって実装されたバックエンドデータベースを持つウェブポータルです。
同様に、ご自身のアプリケーションもデプロイできます。
WordPress は自動的に高可用性を備えています
- SafeKit によってリアルタイムでレプリケートされる永続ボリューム内のデータ(PHP + データベース)
- ユーザーが WordPress サイトにアクセスするための仮想 IP アドレス
- 自動フェイルオーバーと自動フェイルバック付き
備考:
WordPress チャートは、ポート <service.port> と <service.httpsport> でリッスンするロードバランシングされたサービスを定義します。
WordPress は、URL
http://<virtual-ip>:<service.port>.仮想 IP は SafeKit によって管理され、フェイルオーバー時には自動的に切り替わります。
デフォルトでは、K3S Klipper でロードバランサーを実装します。
Klipper は
: <service.port> でリッスンし、TCP/IP パケットを選択した WordPress ポッドの IP アドレスとポートにルーティングします。 $ export KUBECONFIG= /etc/rancher/k3s/k3s.yaml $ helm repo add bitnami https://charts.bitnami.com/bitnami $ helm install my-release bitnami/wordpress –set global.storageClass=nfs-client –set service.ports.http=8099,service.ports.https=4439
前の helm コマンドは、registry-1.docker.io。から WordPress イメージをダウンロードします。registry registry-1.docker.io で認証の問題が発生する場合があります。この場合、次の手順を実行します
両方のノードに
/etc/rancher/k3s/registries.yamlを作成し、以下を記述しますconfigs: "registry-1.docker.io": auth: username: your_user_name password: your_password tls: insecure_skip_verify: truek3sを停止して開始し、systemctl stop k3sとsystemctl start k3sで変更を反映させます。helm registry login -u your_user_name docker.io実行し、パスワードを入力します
9. サポート
- サポートを受けるには、ノードごとに 1 つずつ、合計 2 つの SafeKit
Snapshots(2 つの .zip ファイル)を取得してください。
![]()

10. 必要に応じて、スプリットブレインチェッカー
スプリットブレインチェッカーブレインチェッカーを設定する必要があるかどうかについては、以下の「クラスターでネットワークが分離された場合のさまざまなシナリオ」を参照してください。
モジュール構成で、
Advanced Configuration(画像参照) をクリックしてuserconfig.xml。編集します。userconfig.xmlの<check>セクションにを追加して、スプリットブレインチェッカーチェッカーを宣言します <service> ... <check> ... <splitbrain ident="witness" exec="ping" arg="witness IP"/> </check>新しい構成
Save and apply変更された userconfig.xml ファイルを両方のノードに再デプロイします(保存して適用するには、両方のノードでモジュールを停止する必要があります)。
パラメータ:
ident="witness"リソース名splitbrain.witnessでウィットネスを識別します。この値を変更してウィットネスを識別することもできます。exec="ping"は、実行する ping コードを参照します。この値を変更しないでください。arg="witness IP"は、ping の引数です。この値を、ウィットネス (通常はルーターなどの堅牢な要素) の IP に変更します。

クラスターでネットワークが分離された場合、どのようなシナリオが考えられますか?
単一のネットワーク
ネットワークが分離されている場合、デフォルトの動作は次のとおりです
- 各ノードのハートビートが失われると、各ノードは ALONE 状態になり、仮想 IP アドレスでアプリケーションを実行します(ローカルデータを変更するアプリケーションの二重実行)
- アイソレーションが修復されると、1 つの ALONE ノードが強制的に停止し、もう一方のノードからデータを再同期します
- 最終的に、クラスターは PRIM-SECOND(または Windows による重複仮想 IP アドレス検出に応じて SECOND-PRIM)になります。
専用のレプリケーションネットワークを備えた 2 つのネットワーク
ネットワークが分離されている場合、専用のレプリケーションネットワークでの動作は次のようになります
- 専用のレプリケーションネットワークはプライベートネットワーク上に実装されます
- 本番ネットワークのハートビートが失われました(ネットワークが孤立しています)
- レプリケーションネットワーク上のハートビートは機能しています(アイソレーションネットワークではありません)
- クラスターは PRIM/SECOND 状態のままです。
単一ネットワークとスプリットブレインチェッカー
ネットワークが分離されている場合、スプリットブレインチェッカーの動作は次のようになります
- スプリットブレインチェッカーは、ウィットネス(通常はルーター)の IP アドレスで設定されています
- スプリットブレインチェッカーは、サーバーが PRIM から ALONE、または SECOND から ALONE に移行したときに動作します
- ネットワークが分離されている場合、ALONE に移行する前に、両方のノードが IP アドレスをテストします
- IP アドレスにアクセスできるノードは ALONE に、もう一方のノードは WAIT になります
- アイソレーションが修復されると、WAIT ノードはデータを再同期し、SECOND になります。
注:ウィットネスがダウンまたは切断されると、両方のノードが WAIT 状態になり、アプリケーションは実行されなくなります。そのため、ルーターのような堅牢なウィットネスを選択する必要があります。
SafeKit mirror ソリューションのデモンストレーション
SafeKit ビデオ:アプリケーションレベルのクラスタリング (8:47)
このビデオでは、SafeKit SAN の複雑さなしに mirror HA クラスターを実装する方法をご紹介します。このデモンストレーションでは Microsoft SQL Server を使用していますが、このソリューションは他のデータベースやアプリケーションでも同様に機能します。
章
- 🎬 SQL Server を使用する 2 つのノード (0:32)
- 🎬 クラスターと mirror.safe モジュールを構成する (3:58)
- 🎬 SQL レプリケーション、移行、クラッシュ時のフェイルオーバーを開始してテストする (4:17)
ステップバイステップの実装
- 🛠️ Windows で mirror クラスターをセットアップする方法については、ガイドをお読みください
- 🛠️ Linux で mirror クラスターをセットアップする方法については、ガイドをお読みください
🔍 SafeKit を探索する
SafeKit の機能、アーキテクチャ、ビデオ、ドキュメント、無料トライアルに関する情報をご覧ください。
| リソース | 説明 | リンク |
|---|---|---|
| 主な機能 | SafeKit がシンプルで費用対効果の高い高可用性ソリューションである理由をご覧ください。 | 主な機能 |
| ユースケース | SafeKit が重要なアプリケーションとインフラストラクチャの可用性を維持する方法をご覧ください。 | ユースケースを探索する |
| デプロイメントモデル | SafeKit は、SAN や共有ストレージなしで高可用性を提供します。 | デプロイモデルを探索する |
| 高可用性戦略 | 仮想マシンの高可用性とアプリケーションの高可用性を比較します。 | 2 つの戦略を比較する |
| 技術仕様 | SafeKit クラスターの技術要件と制限事項を確認してください。 | 技術仕様書を読む |
| 動画 | SafeKit の構成と自動フェイルオーバーのデモンストレーションをご覧ください。 | テクニカルビデオを見る |
| アーキテクチャ | SafeKit mirror クラスターファイルをリアルタイムでレプリケートし、フェイルオーバーを処理する方法について説明します。 | Mirror アーキテクチャを探索する |
| アーキテクチャ | SafeKit farm クラスターネットワークトラフィックを分散し、フェイルオーバーを処理する方法について説明します。 | Farm アーキテクチャを探索する |
| 製品比較 | SafeKit と従来の高可用性クラスターを比較します。 | ソリューションを比較する |
| 技術リソース | 技術ドキュメントの検索、SafeKit のダウンロード、無料トライアルへのアクセスはこちらから。 | ドキュメントと無料トライアルにアクセス |
| アプリケーションモジュール | 事前に設定された SafeKit モジュールを使用して、アプリケーションの高可用性を設定します。 | アプリケーションモジュールを探索する |