1.はじめに
御免仕る!LifeKeeper初心者侍だ。同志殿、此度も共に参ろうぞ!
……さて、こんにちは。前回はLifeKeeper for Linux(以後LifeKeeperと呼称)を入れるためのOSの設定について解説しました。
今回は其の弐ということで、侍の血が騒ぎ始めている今日この頃です。
【この記事で分かること】
・LifeKeeperのセットアップ方法
・コミュニケーションパスの作成方法
・NFSサーバーの設定
・Quorum/Witness機能の設定
この4点です。
ではいざ!推して参る!!!
2. LifeKeeperのセットアップ
まずはLifeKeeperのimgファイルをマウントします。マウントポイントは任意です。今回は/mnt/imgにマウントしていきます。
# mkdir /mnt/img
# mount -t iso9660 -o loop <imgファイルパス> /mnt/img
# /mnt/img/setup
この/mnt/img/setupでLifeKeeperのインストールが走ります。うまくいくと、こうなります。

今回はQuorum/Witness機能を使用するので、Use Quorum/Witness Functionsにチェックを入れます。
LifeKeeperのsetup画面の操作方法
↑↓:選択項目の移動
←→:Selectなどの最下行の選択肢移動
Enter:サブメニューを選ぶ、チェックをつける
次に諸設定を行うため、Ricovery Kit Selection Menuに遷移します。
設定項目はDataBase→LifeKeeper PostgreSQL RDBMS Recovery KitとStorage→DataKeeper for Linuxです。
設定が済んだらDoneを選択します。次の画面で、現在の設定でLifeKeeperのインストールしていい?って聞いてくるので、Yesを選択します。

このとき、コマンドプロンプト画面を眺めていると、
Install lifeKeeper and dependent packages.
の文字の横で|が暴れ始めます。(この|が出てこないときは必ずエラーになってインストールが強制終了します。分かりやすいですね。)
うまくいけば、
setup complete
が出ます。次にライセンスファイルの登録を行います。
# /opt/LifeKeeper/bin/lkkeyins <ライセンスファイルのパス>/<filename>.lic
LifeKeeperを起動します。
# /opt/LifeKeeper/bin/lkstart
LifeKeeperがちゃんと起動しているかを確認します。
# /opt/LifeKeeper/bin/lktest
このようなものがコマンドプロンプト上に出たら正常にLifeKeeperが起動している証拠です。ただ、毎回コマンドの絶対パスを入力するのは面倒なので、/root/.bash_profileに以下を書き込み、環境変数設定を行います。
PATH=$PATH:/opt/LifeKeeper/bin
MANPATH=$MANPATH:/opt/LifeKeeper/man
export PATH MANPATH
# source /root/.bash_profile
これで準備万端です。LKWMC(LifeKeeper Web Management Console)にログインしましょう。自PCのブラウザバーに以下のURLを入力します。
https://{LifeKeeperをインストールしたVMのIPアドレスまたはホスト名}:5110/lkgui/#/
そうするとログイン画面が出てくるので、ユーザー:root、パスワード:自身が設定したrootのパスワードを入力します。
このときログイン画面が正しく表示されない場合は、Webブラウザの設定を確認してね。(または保護されていない通信とブロックされる場合がある)もしくはwebブラウザのシークレットモードを使用するのもありだよ◎

この画面に遷移したら成功です。
これでLifeKeeperのインストール及びセットアップは完了です。
3.コミュニケーションパスの設定
LKWMC上でコミュニケーションパスを設定していきます。左ペインの一番上にあるコミュニケーションパスを選択し、オペレーションからコミュケーションパスの作成を押します。

ローカルサーバーにNODE1、ローカルIPアドレスはeth0に設定したIPアドレスを設定します。次に新しいサーバーの追加を押して、NODE2を入力し確認を押します。そうするとNODE2へのログインを促す画面が出るので、NODE1と同様にユーザーとパスワードを入力し、リモートサーバーに追加します。

追加出来たら、リモートIPアドレスにローカルIPアドレスと同じセグメントのIPアドレスを登録します。プライオリティは自動で入力されます。ここまで入力したら、確認を押します。
同様に、もう一つのIPアドレスの方(eth1)でもコミュニケーションパスを作成します。
コミュニケーションパスを作成した直後、2本目のコミュニケーションパスがDEADになっていることがあるよ。そういうときは、右上にある更新ボタン(↻みたいなもの)を何回か押してあげてね。焦りは禁物。数刻のうちに解決するよ。
両方のステータスがALIVEになれば完了です。
4. Quorum/Witnessの設定
Quorum/Witness の設定を行います。Quorum/Witness は LifeKeeper のI/Oフェンシング機能であり、スプリットブレイン対策として重要です。今回は Quorum/Witness のStorage モードを使用します。Storageモードには block、file、aws_s3の3種類あります。今回はfileを選択し、Quorum/Witnessの共有ストレージとしてNFSサーバーを使用していきます。
他のモードについても知りたい方は以下のURLを参考にしてください。
4.1 NFSサーバーの設定
NFS(Netwok File System)はクライアント・サーバー型のモデルで機能するシステムであり、主にLinuxやUnix系のシステムで使用されています。
・サーバー(Witness)
⇒実際のハードディスクを持ち、特定のディレクトリをネットワーク上にエクスポートする。
・クライアント(NODE1・NODE2)
⇒サーバーが公開したディレクトリを自分のファイルシステムの一部としてマウントする。
まずはNFSサーバー用のVMを用意します。OSはNODE1,2と同様のAlmaLinux v10.0を使用します。IPアドレスの設定(NODE1,2のeth0と同じセグメント内)、ファイアウォールの無効化、ホスト名の変更(Witness)、/etc/hostsへの書き込み、ローカルリポジトリの登録を行ってください。(其の壱参照)
ここまで設定出来たら、ローカルリポジトリからNFSパッケージをインストールします。
# dnf install nfs-utils

(※作業当時のスクショを取り忘れていたので、別のVMで再現しています)
画像のように確認してくるので、yを入力し、完了しました!と出たら成功です。
4.2 共有ディレクトリとSELinuxについて
まず共有ディレクトリを作成して、NODE1、NODE2からも見られるように権限を変更します。
# mkdir -p /var/nfs/LifeKeeper_witness
# chmod 777 /var/nfs/LifeKeeper_witness
次にSELinuxコンテキストの付与を行います。
# chcon -t public_content_rw_t /var/nfs/LifeKeeper_witness
何をしているかよく分からなかったので、軍師Gemini殿に聞いてみました。
「SELinuxコンテキストの付与って何?」
⇒ファイルやディレクトリに「これは何のためのデータか」という「ラベル」を貼り付ける作業
・chcon: Labelを変更するコマンド(Change Context)
・-t: タイプ(Type)を指定するオプション
・public_content_rw_t:外部に公開(Public)し、かつ読み書き(Read/Write)を許可するコンテンツ
という特定の意味を持つラベル
なるほど。NFSを使用する場合はこの設定をしないと外部からアクセスできない、という認識ですかね?しかし軍師殿の言うことだけを聞いていては、侍の風上にも置けない思慮の浅さなので、公式文書も確認しておきましょう。
ラベルを付けることで、サーバーとクライアントでやり取りができるようになり、アクセスするドメインを制限できるため更にセキュアであるという理解でしょうか。
あ、これは不信ではありませんよ?「啓蒙」です。
話を戻します。以下のコマンドで、NFSの書き込みを許可するスイッチをONにします。
# setsebool -P nfs_export_all_rw 1
次に/etc/exportsを編集して、NODE1、NODE2からのアクセスを許可します。
/var/nfs/LifeKeeper_witness NODE1(rw,no_root_squash,sync,no_wdelay) NODE2(rw,no_root_squash,sync,no_wdelay)
そうしたらNFSサーバーの自動起動と即時起動、及び設定の反映を行います。
# systemctl enable --now rpcbind nfs-server
# exportfs -a
これでNFSサーバーはNODE1,2からの接続をいつでも受け入れられる状態となりました。
一応、NFSサーバーの起動確認を行っておきます。
# systemctl status nfs-server
ここでactive(exited)と表示されていれば成功です。exitedと出ているとなんか不安になる気がしますよね。runningじゃないのかい!!
4.3 Quorum/Witness Storageモードの設定
ではさっそく設定していきましょう。クラスターのNODE1、NODE2の両方からexportディレクトリをマウントします。
# mount 10.172.0.100:/var/nfs/LifeKeeper_witness /mnt/qwkmnt -o soft,timeo=20,retrans=1,intr,noac
このマウントが次回OS起動時に外れているととても悲しい気持ちになるので、/etc/fstabに追記します。
Witness://var/nfs/LifeKeeper_witness /mnt/qwkmnt nfs soft,timeo=20,retrans=1,intr,noac 0 0
もし、Witnessと記載してエラーになってしまったらWitnessノードのIPアドレスを記載してあげると解決するよ。
次に/etc/default/LifeKeeperを編集して、Quorumの設定を行います。
QUORUM_MODE=storage
:
:
WITNESS=storage
QuorumでStorageを選択した場合、Witnessも必ずstorageである必要があるよ。
続いて同じ/etc/default/LifeKeeperの一番下に、storageモードに必要なパラメータを追記します。
QWK_STORAGE_TYPE=file
QWK_STORAGE_HBEATTIME=6
QWK_STORAGE_NUMHBEATS=4
QWK_STORAGE_OBJECT_NODE1=/mnt/qwkmnt/NODE1
QWK_STORAGE_OBJECT_NODE2=/mnt/qwkmnt/NODE2
Quorumの初期化を行えば設定は完了ですが、初期化の前にLKWMCかlcdstatusコマンドでコミュニケーションパスが2本ともALIVEになっているか確認してください。
確認したら、次のコマンドをNODE1,2の両方で実行します。
# qwk_storage_init
クラスターの全ノードで初期化が完了するまでの間、このコマンドは待機状態になります。待ち状態の間は、QWK object of XXX is not yet vailと出力されます。
Successful.と出力されたら完了です。
4.4 QWKオブジェクトの内容を確認する
fileでは初期化に伴い、/mnt/qwkmnt下にQWKオブジェクトファイルが作成されるため、各ノードで確認します。
# cat /mnt/qwkmnt/NODE1
[root@NODE1 ~]# cat /mnt/qwkmnt/NODE1
signature=lifekeeper_qwk_object
local_node=NODE1
time=Wed Feb 4 09:09:51 2026
sequence=8597
node=NODE2
commstat=UP
checksum=14617132329906147228
このように実行結果が出ればOKです。何回かこのコマンドを実行して、時間が更新されていることを確認するとより確実です。
5. 終わりに
其の弐では、LifeKeeperのインストール、Quorum/Witness機能にまつわる事をしたためた。
検使の証をもって主の座を違えぬは、二重政権を防ぐ城の掟のようでござるな。
其の参では、LifeKeeperのリソース作成、PostgreSQLの設定に挑む。
それでは、これにて御免!



