EC2 + SIOS LifeKeeper HA クラスタ ハンズオン

商用 HA クラスタソフト LifeKeeper(評価版)で 2 ノードの仮想 IP フェイルオーバーを構築する

Amazon EC2 SIOS LifeKeeper DataKeeper EC2 Recovery Kit 評価版ライセンス CLI + GUI 操作 上級 所要時間 120〜150 分 v1.0

📋 概要

SIOS LifeKeeper(SIOS Protection Suite for Linux)は、日本のエンタープライズ現場で広く使われる商用 HA クラスタソフトです。GUI と Recovery Kit(保護対象ごとのプラグイン)により、Pacemaker よりも直感的に高可用性構成を組めるのが特徴で、SQL Server・SAP・Oracle・PostgreSQL などの基幹系で多数の実績があります。

本ハンズオンでは、評価版ライセンスを入手して 2 台の EC2 に LifeKeeper を手動インストールし、仮想 IP(Virtual IP)を Recovery Kit でリソース化してフェイルオーバーさせる構成を構築します。インストールからライセンス投入・GUI 操作・通信パス・リソース階層作成・フェイルオーバー検証までを一通り体験します。

⚠️ 商用製品・評価版ライセンスが必要です

LifeKeeper は商用製品です。本ハンズオンの実施には SIOS から無償の評価版ライセンス(期間限定)とインストールイメージの入手が前提となります。パッケージ名・コマンド・GUI の細部は製品バージョンによって異なるため、必ず入手したバージョンの SIOS 公式テクニカルドキュメント(docs.us.sios.com)と併用してください。本ページは全体の流れと AWS 特有のポイントを把握するためのガイドです。

項目内容
対象サービスAmazon EC2、IAM、SIOS LifeKeeper、IP / EC2 Recovery Kit、DataKeeper(任意)
主な学習内容商用 HA ソフトの導入・ライセンス投入・GUI 操作・通信パス・リソース階層・フェイルオーバー
所要時間120〜150 分
難易度★★★★☆(上級者向け)
前提知識Linux の基本操作、EC2 / VPC の基本、(GUI 用に)X 転送 or VNC の知識
OSRHEL 9 / Rocky Linux 9 / AlmaLinux 9(入手した LifeKeeper の対応 OS に合わせる)
費用目安約 1〜2 USD(t3.medium × 2 台 + 追加 EBS を 2〜3 時間)
ℹ️ LifeKeeper の主要コンポーネント
  • LifeKeeper Core — クラスタの中核。リソース階層・通信パス・フェイルオーバー制御
  • LifeKeeper GUI — リソース構成を視覚的に作成/監視する管理コンソール
  • Recovery Kit(ARK) — 保護対象ごとのプラグイン(IP / EC2 / Apache / DB など)
  • DataKeeper — 共有ディスクが使えない環境向けのブロックレベルデータ複製(任意)

🏗️ アーキテクチャ

👤 クライアント → Virtual IP(IP Recovery Kit が管理)
↓ EC2 Recovery Kit が AWS 側の経路を切替
🖥️ node1(Primary)  ⟷ 通信パス(Comm Path)⟷  🖥️ node2(Backup)
LifeKeeper Core + Recovery Kit。DataKeeper で EBS をリアルタイム複製(任意)
↓ node1 障害時
❌ node1 ダウン → LifeKeeper が検知
node2 が Virtual IP とサービスを引き継ぐ(自動フェイルオーバー)

AWS 上での Virtual IP の実現方法

方式Recovery Kit用途
同一サブネット内の VIPIP Recovery Kit + EC2 Recovery Kit単一 AZ。セカンダリ IP / EIP の付け替え
サブネットをまたぐ VIPEC2 Recovery Kit(ルートテーブル更新)マルチ AZ。ルートテーブル経由でルーティング
データ複製DataKeeper共有ディスク不要のミラーリング
ℹ️ EC2 Recovery Kit の役割

AWS では ARP による VIP 切り替えが効かないため、LifeKeeper の EC2 Recovery Kit が IAM 権限を使って EC2 API を呼び、フェイルオーバー時に セカンダリプライベート IP / Elastic IP の付け替え、またはルートテーブルの更新を行います。これが Pacemaker でいう awsvip / aws-vpc-move-ip に相当します。

✅ 前提条件

評価版ライセンス・インストールイメージの入手
  1. SIOS の評価版申請ページ(https://us.sios.com / 日本は https://sios.jp)から評価版を申請
  2. ダウンロードリンクから インストールイメージ(sps.imgを取得
  3. ホスト ID(後述)を登録して 評価版ライセンスファイル(.licを発行してもらう
⚠️ ライセンスはホスト ID に紐づく

LifeKeeper のライセンスはノードのホスト IDに紐づきます。EC2 ではインストール後に /opt/LifeKeeper/bin/lmhostid で確認できるホスト ID を SIOS に登録してライセンスを発行します。インスタンスを作り直すとホスト ID が変わる点に注意してください。

⚠️ リージョンとコストについて

本手順は ap-northeast-1(東京) を使用します。t3.medium × 2 台 + 追加 EBS で 2〜3 時間あたり約 1〜2 USD です。終了後は必ずクリーンアップしてください。

🖥️ ステップ 1 ― EC2 を 2 台起動する

1-1. EC2 インスタンスを 2 台作成
AMIRHEL 9 / Rocky Linux 9(入手した LifeKeeper の対応 OS)
インスタンスタイプt3.medium
サブネット両ノードとも同一サブネット(同一 AZ)
プライベート IPnode1: 10.0.1.11 / node2: 10.0.1.12
追加 EBS各ノードに 8GB(DataKeeper の複製領域。VIP のみ検証なら不要)
1-2. セキュリティグループ
用途プロトコル/ポートソース
SSHTCP 22管理元 IP
HTTP(動作確認)TCP 80管理元 IP
LifeKeeper GUITCP 81, 82管理元 IP
LifeKeeper Comm / 内部通信TCP 1500 ほか同一 SG(自己参照)
DataKeeper(使う場合)TCP 10001 付近同一 SG(自己参照)
ℹ️ 正確なポートはバージョン依存

LifeKeeper / DataKeeper が使用するポートは製品バージョンで異なります。入手したバージョンの「ファイアウォール / ポート要件」ドキュメントを確認してください。学習環境では同一 SG 内を全許可(自己参照)にすると簡単です。

1-3. ホスト名 / hosts / ソース・宛先チェック
# 各ノードでホスト名設定
sudo hostnamectl set-hostname node1   # node2 では node2

# 両ノードの /etc/hosts
sudo tee -a /etc/hosts <<'EOF'
10.0.1.11  node1
10.0.1.12  node2
EOF

EC2 コンソールで各インスタンスの「ソース/宛先チェック」を停止します(VIP のため)。

✅ 確認ポイント

両ノード相互に ping が通り、追加 EBS が lsblk で見えれば次へ。

🔑 ステップ 2 ― IAM ロール(EC2 Recovery Kit 用)

EC2 Recovery Kit がフェイルオーバー時に VIP を付け替えるため、両ノードに IAM ロールを付与します。

2-1. IAM ポリシーを作成
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DescribeRouteTables",
        "ec2:DescribeAddresses",
        "ec2:AssignPrivateIpAddresses",
        "ec2:UnassignPrivateIpAddresses",
        "ec2:AssociateAddress",
        "ec2:DisassociateAddress",
        "ec2:ReplaceRoute",
        "ec2:CreateRoute",
        "ec2:DeleteRoute"
      ],
      "Resource": "*"
    }
  ]
}
ℹ️ 構成に応じて権限を取捨選択

セカンダリ IP 方式なら Assign/UnassignPrivateIpAddresses、EIP 方式なら Associate/DisassociateAddress、ルートテーブル方式なら ReplaceRoute 系が必要です。本番では Resource を絞ってください。

2-2. ロールを作成し両ノードにアタッチ

EC2 信頼ポリシーでロール lk-ec2-role を作成し、上記ポリシーをアタッチ。node1 / node2 に割り当てます。

# 確認
aws sts get-caller-identity
✅ 確認ポイント

aws sts get-caller-identityassumed-role/lk-ec2-role/... を返せば OK です。

🧰 ステップ 3 ― OS 事前準備(両ノード)

3-1. 依存パッケージのインストール

LifeKeeper はインストール時に依存パッケージを要求します。代表例(バージョンの要件に従う)。

sudo dnf install -y \
  java-11-openjdk \
  perl \
  patch \
  redhat-lsb-core \
  net-tools \
  awscli
ℹ️ Java は GUI に必要

LifeKeeper GUI(lkGUIapp)は Java で動作します。GUI を別端末のブラウザ/アプリで使う場合でも、サーバー側コンポーネントが Java を要求することがあります。

3-2. SELinux / ファイアウォールの調整

学習環境では一時的に緩める運用が簡単です(本番はドキュメントに従い適切に設定)。

# SELinux を permissive に(検証用)
sudo setenforce 0

# 必要ポートを firewalld で開放、または検証では停止
sudo systemctl stop firewalld
3-3. root で操作できるようにする

LifeKeeper の導入・設定は root 権限で行います。以降のコマンドは sudo -i で root シェルに入って実行すると進めやすいです。

sudo -i
✅ 確認ポイント

両ノードで java -version が表示され、依存パッケージが揃っていればインストールへ進めます。

💿 ステップ 4 ― LifeKeeper のインストールとライセンス投入(両ノード)

4-1. インストールイメージをマウント

入手した sps.img を各ノードに転送し、ループバックマウントします。

# sps.img を /tmp に置いた前提
mkdir -p /mnt/sps
mount -o loop /tmp/sps.img /mnt/sps
cd /mnt/sps
4-2. セットアップを実行

インストーラ setup を実行し、対話メニューで LifeKeeper Core と必要な Recovery Kit(IP Recovery Kit、Amazon EC2 Recovery Kit、必要なら DataKeeper)を選択します。

./setup
  • 「LifeKeeper Core」を選択(必須)
  • 「IP Recovery Kit」を選択(Virtual IP 用)
  • 「Amazon EC2 Recovery Kit」を選択(AWS の VIP 付け替え用)
  • 必要に応じて「DataKeeper」「Apache Recovery Kit」等を選択
ℹ️ メニュー構成はバージョンで異なる

セットアップ画面の項目名・選択方法はバージョンによって変わります。画面の指示に従ってください。

4-3. ホスト ID を確認しライセンスを投入

インストール後、ホスト ID を確認して SIOS に登録 → 発行された .lic ファイルを投入します。

# ホスト ID 確認
/opt/LifeKeeper/bin/lmhostid

# ライセンスファイルを投入(各ノードでそのノードのライセンスを)
/opt/LifeKeeper/bin/lkkeyins /tmp/eval-license.lic

# ライセンス状態の確認
/opt/LifeKeeper/bin/lklicense -L
4-4. LifeKeeper を起動
/opt/LifeKeeper/bin/lkstart

# 状態確認
/opt/LifeKeeper/bin/lcdstatus -q   # まだリソースは無い状態
✅ 確認ポイント

両ノードで lkstart が成功し、lklicense -L で評価版ライセンスが有効と表示されれば導入完了です。

🖼️ ステップ 5 ― LifeKeeper GUI に接続する

LifeKeeper のリソース構成は GUI で行うのが基本です。GUI への接続方法は環境により以下のいずれかを選びます。

5-1. GUI ユーザーの準備

GUI は OS のユーザー認証を使います。root(または lkadmin 権限を付与したユーザー)でログインします。root のパスワードを設定しておきます。

passwd root
5-2. 接続方法 A: サーバー上で GUI アプリを起動(X11 転送)

SSH の X11 転送(ssh -X)でサーバーに接続し、GUI アプリを起動します。

/opt/LifeKeeper/bin/lkGUIapp &
5-3. 接続方法 B: ブラウザ / Java Web 経由

管理端末から、LifeKeeper GUI サーバー(ポート 81 など)へアクセスします。セキュリティグループで GUI ポートを管理元 IP に開放しておきます。表示された画面で接続先サーバー(node1 のプライベート/パブリック IP)と root 認証情報を入力します。

⚠️ アクセス経路に注意

GUI ポートをインターネットに広く開けないでください。管理元 IP に限定するか、踏み台 / VPN / SSH ポートフォワード経由でアクセスします。

✅ 確認ポイント

GUI が開き、左側に node1 が「ONLINE(緑)」で表示されれば接続成功です。

🔌 ステップ 6 ― 通信パス(Communication Path)の作成

2 ノード間のハートビート経路です。スプリットブレイン対策として必ず 2 経路以上作るのが推奨です(AWS では異なる経路を用意しづらいため、最低 1 経路 + 設定上の冗長を検討)。

6-1. GUI から通信パスを作成
  1. GUI ツールバーの 「Create Comm Path」 をクリック
  2. ローカルサーバー(node1)とリモートサーバー(node2)を選択
  3. 各ノードのローカル/リモート IP(10.0.1.11 ⟷ 10.0.1.12)を指定
  4. タイプは TCP を選択して作成
6-2. CLI で確認
/opt/LifeKeeper/bin/lcdstatus -q

node1 ⟷ node2 の通信パスが ALIVE と表示されることを確認します。

✅ 確認ポイント

GUI 上で node1 と node2 が線で結ばれ、通信パスが ALIVE(緑)になれば両ノードがクラスタとして連携できています。

🌐 ステップ 7 ― Virtual IP リソース階層の作成

IP Recovery Kit で Virtual IP を作り、EC2 Recovery Kit と組み合わせて AWS 上で付け替えられるようにします。

7-1. Virtual IP を決める
Virtual IP10.0.1.100(サブネット内の未使用 IP)

このアドレスはルーティング先として LifeKeeper が node 間で付け替えます。

7-2. GUI で IP リソース階層を作成
  1. ツールバーの 「Create Resource Hierarchy」 をクリック
  2. Recovery Kit に 「IP」 を選択
  3. Virtual IP(10.0.1.100)、ネットマスク、ネットワークインターフェイス(eth0)を指定
  4. リソースタグ名(例: ip-10-0-1-100)を確認して作成
  5. Primary を node1 として作成後、「Extend」 で node2 にも拡張する
ℹ️ EC2 Recovery Kit との連携

Amazon EC2 Recovery Kit をインストールしてある場合、IP リソースの作成・拡張時に EC2 環境が検出され、フェイルオーバー時に セカンダリ IP / EIP の付け替え・ルートテーブル更新が自動で行われるよう構成されます。構成方式(セカンダリ IP / EIP / ルートテーブル)はバージョンのドキュメントに従って選択します。

7-3. (任意)アプリ・データ複製リソースを積み上げる

より実践的にするには、IP リソースの上に Apache や DataKeeper(データ複製)のリソースを階層化し、依存関係(IP がある場所でアプリが動く)を持たせます。DataKeeper を使う場合は追加 EBS をミラー領域として登録します。

7-4. 状態確認
/opt/LifeKeeper/bin/lcdstatus -q

# node1 に VIP が付いているか
ip addr show eth0 | grep 10.0.1.100
✅ 確認ポイント

GUI で IP リソースが node1 で ISP/ACTIVE(緑)、node2 で OSU/STANDBY と表示され、curl http://10.0.1.100/(アプリも作った場合)が応答すれば成功です。

🔁 ステップ 8 ― フェイルオーバーの検証

8-1. 継続監視を開始
while true; do curl -s --max-time 2 http://10.0.1.100/ ; echo; sleep 1; done
8-2. 方法 A: GUI から手動スイッチオーバー

GUI で node2 上のリソースを右クリック →「In Service...」を実行すると、リソースが node2 へ計画的に移動します(スイッチオーバー)。VIP が node2 に付け替わることを確認します。

8-3. 方法 B: 障害シミュレーション
# アクティブ機(node1)で LifeKeeper を停止、または OS を停止
/opt/LifeKeeper/bin/lkstop
# もしくは EC2 コンソールから node1 を停止

LifeKeeper が node1 の喪失を検知し、node2 が VIP とサービスを自動的に引き継ぎます。監視中の curl 応答が継続(または短時間で復帰)することを確認します。

8-4. 切り替わりの確認
# node2 で
/opt/LifeKeeper/bin/lcdstatus -q
ip addr show eth0 | grep 10.0.1.100
✅ 確認ポイント

VIP リソースが node2 で ACTIVE になり、クライアントからの curl 応答が継続すれば、LifeKeeper による自動フェイルオーバーが成功しています。node1 を復帰させると STANDBY として戻ります。

💡 学習ポイント

主要な LifeKeeper コマンド

コマンド用途
lkstart / lkstopLifeKeeper の起動 / 停止
lcdstatus -qリソース・通信パスの状態確認
lkGUIappGUI 管理コンソールの起動
lkkeyins <file>ライセンスファイルの投入
lklicense -Lライセンス状態の確認
lmhostidライセンス紐付け用ホスト ID 確認

LifeKeeper の重要概念

Pacemaker との比較(使い分け)

観点LifeKeeperPacemaker
ライセンス商用(サポート付き)OSS(無償)
構築GUI + Recovery Kit で直感的CLI 中心で柔軟だが難度高
AWS VIPEC2 Recovery Kit が標準提供awsvip / aws-vpc-move-ip を手組み
データ複製DataKeeper 同梱DRBD 等を別途
日本での実績基幹系で多数

🧹 クリーンアップ

⚠️ EC2 / EBS は起動中ずっと課金されます

検証が終わったら必ず削除してください。

1. リソース階層を削除し LifeKeeper を停止
# GUI でリソース階層を Delete してから
/opt/LifeKeeper/bin/lkstop   # 両ノード
2. (任意)LifeKeeper をアンインストール

インスタンスごと削除するなら不要ですが、残す場合は付属のアンインストーラ(/opt/LifeKeeper/bin/uninstall など、バージョンの手順に従う)で削除します。

3. EC2 / EBS / IAM を削除
  • EC2 コンソールで node1 / node2 を終了(追加 EBS も削除)
  • 不要なら IAM ロール lk-ec2-role とポリシーを削除
  • セキュリティグループ・Elastic IP(使った場合)を削除
✅ クリーンアップ完了チェックリスト
  • ☐ リソース階層を削除した
  • ☐ 両ノードで LifeKeeper を停止した
  • ☐ node1 / node2 と追加 EBS を削除した
  • ☐ IAM ロール / ポリシー / EIP / SG を整理した