商用 HA クラスタソフト LifeKeeper(評価版)で 2 ノードの仮想 IP フェイルオーバーを構築する
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 の知識 |
| OS | RHEL 9 / Rocky Linux 9 / AlmaLinux 9(入手した LifeKeeper の対応 OS に合わせる) |
| 費用目安 | 約 1〜2 USD(t3.medium × 2 台 + 追加 EBS を 2〜3 時間) |
| 方式 | Recovery Kit | 用途 |
|---|---|---|
| 同一サブネット内の VIP | IP Recovery Kit + EC2 Recovery Kit | 単一 AZ。セカンダリ IP / EIP の付け替え |
| サブネットをまたぐ VIP | EC2 Recovery Kit(ルートテーブル更新) | マルチ AZ。ルートテーブル経由でルーティング |
| データ複製 | DataKeeper | 共有ディスク不要のミラーリング |
AWS では ARP による VIP 切り替えが効かないため、LifeKeeper の EC2 Recovery Kit が IAM 権限を使って EC2 API を呼び、フェイルオーバー時に セカンダリプライベート IP / Elastic IP の付け替え、またはルートテーブルの更新を行います。これが Pacemaker でいう awsvip / aws-vpc-move-ip に相当します。
https://us.sios.com / 日本は https://sios.jp)から評価版を申請sps.img)を取得.lic)を発行してもらうLifeKeeper のライセンスはノードのホスト IDに紐づきます。EC2 ではインストール後に /opt/LifeKeeper/bin/lmhostid で確認できるホスト ID を SIOS に登録してライセンスを発行します。インスタンスを作り直すとホスト ID が変わる点に注意してください。
本手順は ap-northeast-1(東京) を使用します。t3.medium × 2 台 + 追加 EBS で 2〜3 時間あたり約 1〜2 USD です。終了後は必ずクリーンアップしてください。
| 用途 | プロトコル/ポート | ソース |
|---|---|---|
| SSH | TCP 22 | 管理元 IP |
| HTTP(動作確認) | TCP 80 | 管理元 IP |
| LifeKeeper GUI | TCP 81, 82 | 管理元 IP |
| LifeKeeper Comm / 内部通信 | TCP 1500 ほか | 同一 SG(自己参照) |
| DataKeeper(使う場合) | TCP 10001 付近 | 同一 SG(自己参照) |
LifeKeeper / DataKeeper が使用するポートは製品バージョンで異なります。入手したバージョンの「ファイアウォール / ポート要件」ドキュメントを確認してください。学習環境では同一 SG 内を全許可(自己参照)にすると簡単です。
# 各ノードでホスト名設定 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 で見えれば次へ。
EC2 Recovery Kit がフェイルオーバー時に VIP を付け替えるため、両ノードに 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 を絞ってください。
EC2 信頼ポリシーでロール lk-ec2-role を作成し、上記ポリシーをアタッチ。node1 / node2 に割り当てます。
# 確認 aws sts get-caller-identity
aws sts get-caller-identity が assumed-role/lk-ec2-role/... を返せば OK です。
LifeKeeper はインストール時に依存パッケージを要求します。代表例(バージョンの要件に従う)。
sudo dnf install -y \ java-11-openjdk \ perl \ patch \ redhat-lsb-core \ net-tools \ awscli
LifeKeeper GUI(lkGUIapp)は Java で動作します。GUI を別端末のブラウザ/アプリで使う場合でも、サーバー側コンポーネントが Java を要求することがあります。
学習環境では一時的に緩める運用が簡単です(本番はドキュメントに従い適切に設定)。
# SELinux を permissive に(検証用) sudo setenforce 0 # 必要ポートを firewalld で開放、または検証では停止 sudo systemctl stop firewalld
LifeKeeper の導入・設定は root 権限で行います。以降のコマンドは sudo -i で root シェルに入って実行すると進めやすいです。
sudo -i
両ノードで java -version が表示され、依存パッケージが揃っていればインストールへ進めます。
入手した sps.img を各ノードに転送し、ループバックマウントします。
# sps.img を /tmp に置いた前提 mkdir -p /mnt/sps mount -o loop /tmp/sps.img /mnt/sps cd /mnt/sps
インストーラ setup を実行し、対話メニューで LifeKeeper Core と必要な Recovery Kit(IP Recovery Kit、Amazon EC2 Recovery Kit、必要なら DataKeeper)を選択します。
./setup
セットアップ画面の項目名・選択方法はバージョンによって変わります。画面の指示に従ってください。
インストール後、ホスト ID を確認して SIOS に登録 → 発行された .lic ファイルを投入します。
# ホスト ID 確認 /opt/LifeKeeper/bin/lmhostid # ライセンスファイルを投入(各ノードでそのノードのライセンスを) /opt/LifeKeeper/bin/lkkeyins /tmp/eval-license.lic # ライセンス状態の確認 /opt/LifeKeeper/bin/lklicense -L
/opt/LifeKeeper/bin/lkstart # 状態確認 /opt/LifeKeeper/bin/lcdstatus -q # まだリソースは無い状態
両ノードで lkstart が成功し、lklicense -L で評価版ライセンスが有効と表示されれば導入完了です。
LifeKeeper のリソース構成は GUI で行うのが基本です。GUI への接続方法は環境により以下のいずれかを選びます。
GUI は OS のユーザー認証を使います。root(または lkadmin 権限を付与したユーザー)でログインします。root のパスワードを設定しておきます。
passwd root
SSH の X11 転送(ssh -X)でサーバーに接続し、GUI アプリを起動します。
/opt/LifeKeeper/bin/lkGUIapp &
管理端末から、LifeKeeper GUI サーバー(ポート 81 など)へアクセスします。セキュリティグループで GUI ポートを管理元 IP に開放しておきます。表示された画面で接続先サーバー(node1 のプライベート/パブリック IP)と root 認証情報を入力します。
GUI ポートをインターネットに広く開けないでください。管理元 IP に限定するか、踏み台 / VPN / SSH ポートフォワード経由でアクセスします。
GUI が開き、左側に node1 が「ONLINE(緑)」で表示されれば接続成功です。
2 ノード間のハートビート経路です。スプリットブレイン対策として必ず 2 経路以上作るのが推奨です(AWS では異なる経路を用意しづらいため、最低 1 経路 + 設定上の冗長を検討)。
/opt/LifeKeeper/bin/lcdstatus -q
node1 ⟷ node2 の通信パスが ALIVE と表示されることを確認します。
GUI 上で node1 と node2 が線で結ばれ、通信パスが ALIVE(緑)になれば両ノードがクラスタとして連携できています。
IP Recovery Kit で Virtual IP を作り、EC2 Recovery Kit と組み合わせて AWS 上で付け替えられるようにします。
このアドレスはルーティング先として LifeKeeper が node 間で付け替えます。
ip-10-0-1-100)を確認して作成Amazon EC2 Recovery Kit をインストールしてある場合、IP リソースの作成・拡張時に EC2 環境が検出され、フェイルオーバー時に セカンダリ IP / EIP の付け替え・ルートテーブル更新が自動で行われるよう構成されます。構成方式(セカンダリ IP / EIP / ルートテーブル)はバージョンのドキュメントに従って選択します。
より実践的にするには、IP リソースの上に Apache や DataKeeper(データ複製)のリソースを階層化し、依存関係(IP がある場所でアプリが動く)を持たせます。DataKeeper を使う場合は追加 EBS をミラー領域として登録します。
/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/(アプリも作った場合)が応答すれば成功です。
while true; do curl -s --max-time 2 http://10.0.1.100/ ; echo; sleep 1; done
GUI で node2 上のリソースを右クリック →「In Service...」を実行すると、リソースが node2 へ計画的に移動します(スイッチオーバー)。VIP が node2 に付け替わることを確認します。
# アクティブ機(node1)で LifeKeeper を停止、または OS を停止 /opt/LifeKeeper/bin/lkstop # もしくは EC2 コンソールから node1 を停止
LifeKeeper が node1 の喪失を検知し、node2 が VIP とサービスを自動的に引き継ぎます。監視中の curl 応答が継続(または短時間で復帰)することを確認します。
# node2 で /opt/LifeKeeper/bin/lcdstatus -q ip addr show eth0 | grep 10.0.1.100
VIP リソースが node2 で ACTIVE になり、クライアントからの curl 応答が継続すれば、LifeKeeper による自動フェイルオーバーが成功しています。node1 を復帰させると STANDBY として戻ります。
| コマンド | 用途 |
|---|---|
lkstart / lkstop | LifeKeeper の起動 / 停止 |
lcdstatus -q | リソース・通信パスの状態確認 |
lkGUIapp | GUI 管理コンソールの起動 |
lkkeyins <file> | ライセンスファイルの投入 |
lklicense -L | ライセンス状態の確認 |
lmhostid | ライセンス紐付け用ホスト ID 確認 |
| 観点 | LifeKeeper | Pacemaker |
|---|---|---|
| ライセンス | 商用(サポート付き) | OSS(無償) |
| 構築 | GUI + Recovery Kit で直感的 | CLI 中心で柔軟だが難度高 |
| AWS VIP | EC2 Recovery Kit が標準提供 | awsvip / aws-vpc-move-ip を手組み |
| データ複製 | DataKeeper 同梱 | DRBD 等を別途 |
| 日本での実績 | 基幹系で多数 | 中 |
検証が終わったら必ず削除してください。
# GUI でリソース階層を Delete してから /opt/LifeKeeper/bin/lkstop # 両ノード
インスタンスごと削除するなら不要ですが、残す場合は付属のアンインストーラ(/opt/LifeKeeper/bin/uninstall など、バージョンの手順に従う)で削除します。
lk-ec2-role とポリシーを削除