こんにちは、サイオステクノロジー 宇野です。
皆さんはQuick Service Protection(QSP)をご存じでしょうか。LifeKeeper for Linux 9.1のリリース(2016年)で機能追加されてから6年ばかり経過しましたが、最近LifeKeeperを知った方などまだQSPについてご存じじゃない方もいらっしゃると思いますので、改めて紹介します。
HAクラスター化に必要なスタートアップスクリプト
LifeKeeperや多くのクラスターソフトウェアでは、アプリケーションをクラスターリソースとして登録(HAクラスター構成化)するためには、スタートアップスクリプト(start, stop, status, recover)を必要とします。LifeKeeperではApplication Recovery Kits(ARK)として、これらのスクリプトをよく利用されるアプリケーション向けに提供しています。つまりARKを利用すればスクリプト開発せずにHAクラスター構成を作成することができます。
ARKやスクリプトを提供するアプリケーションについては以下で公開しています。
対応ソフトウェア
https://bccs.sios.jp/lifekeeper/sw.html
ただし、ARKはすべてのただしARKは全てのアプリケーションに対応しているものではありません。上記のURLのARKやスクリプト提供欄にないアプリケーションについては、専用のスクリプトを作成するか、以下で紹介するQSPを利用する必要があります。
Quick Service Protection(QSP)の特徴
QSPはARKが無くてもLinuxのinfit(Serviceコマンド)やsystemd(systemctlコマンド)で行われるスタートアップ処理(start, stop, status)をそのままLifeKeeperのリソース起動、停止、監視に割り当ててリソース登録します。そのため、クラスターリソースとして登録するために必要なスクリプトを作成せずに簡単にアプリケーションを保護することが可能です。
Linuxの機能を利用することからQSPにはメリットとしては以下があります。
- 導入コストを抑えることができる
- 導入スケジュールを短縮できる
- 信頼性の高いOS機能(init, systemd)による起動、停止、監視が可能
- GUIからの操作のみでリソースとして登録可能
一方デメリットとしては以下があります。
- アプリケーションがinitやsystemdに対応していない場合は利用できない
- SIOS Application Recovery Kit(ARK)として提供するアプリケーションは利用できない
- 監視処理はstatus オプションによる応答の成功/失敗での判断となるため、細かな監視は行えない
- ARKにあるようなサポートオプションはなし(サポート対象外)。OSのサポート(起動処理など)に従う必要がある
上記のようなメリットやデメリットはありますが、ARKのないアプリケーション保護が容易となるため利用いただく事をお勧めしています。
QSPの利用手順
今回は以下の動作環境で確認した手順を元に紹介します。
OS | Rocky Linux 8.4 |
保護アプリケーション | Postfix |
クラスターソフトウェア | LifeKeeper for Linux 9.6.2 |
レプリケーションソフトウェア | DataKeeper for Linux 9.6.2 |
アクティブノード | rocky1 |
スタンバイノード | rocky2 |
それでは、QSPの利用手順をご案内します。
- 今回は2022/12/31で販売終了となるPostfix ARKが保護するMTA“postfix”サービスをQSPで保護してみます。他のサービスを保護する場合は、postfixの項目を置き換えてください。
事前に、以下のようにIPリソース(仮想IPアドレス)とファイルシステムリソース(DataKeeper)を作成しておきます。クラスターは2ノードクラスター構成です。
各リソースは以下に詳細を記載します。ファイルシステムリソースとDataKeeper リソースはDataKeeper リソース作成時に一緒に作成されます。
リソース・タグ | リソースの種類 | 役割 |
/var/spol/postfix | ファイルシステムリソース | Postfixのキュー・ディレクトリにDataKeeperリソースをマウントする |
Datarep-postfix | DataKeeperリソース | データレプリケーションによる共有ディスクと同等の機能を実現 |
Ip-192.168.64.100 | IPリソース | 仮想IPアドレス”192.168.64.100”をセカンダリーIPアドレスとして付与 |
2. postfixをインストールします。postfixはOSバンドルパッケージを利用します。
[root@rocky1 ~]# rpm -q postfix
postfix-3.5.8-1.el8.x86_64
3. postfixの設定を行います。両ノードで実施してください。
/etc/postfix/main.cf | queue_directory = /var/spool/postfix |
inet_interfaces = 192.168.64.100 | |
mail_spool_directory = /var/spool/postfix/mail |
- 動作検証目的なので最低限の設定しかしていません。実際に利用する際には要件に合わせて設定変更を行ってください。
- queue_directoryを変更した場合、“/usr/lib/systemd/system/postfix.service”で定義されたPIDfileの項目も変更が必要なようだったので初期値を採用しています。
- mail_spool_directoryをqueue_directoryの中に設定するのは違和感がありますが、検証なのでこの構成としています。
- inet_interfacesは検証なので仮想IPアドレスのみを設定しています。
4. 初期設定のmail_spool_directory用ディレクトリを/var/spool/postfixに移動します。両ノードで行ってください。
[root@rocky1 ~]# mv /var/spool/mail /var/spool/postfix/
[root@rocky1 ~]#
5. アクティブノードでpostfixが起動することを確認しみます。正常に起動しない場合は設定を見直す必要があります。
[root@rocky1 postfix]# systemctl start postfix
[root@rocky1 postfix]#
6. postfixの正常稼働を確認したことを、以下のコマンドで確認します。
[root@rocky1 postfix]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2022-11-10 16:00:56 JST; 1min 22s ago
Process: 31594 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 31592 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 31590 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 31664 (master)
Tasks: 3 (limit: 11091)
Memory: 4.3M
CGroup: /system.slice/postfix.service
tq31664 /usr/libexec/postfix/master -w
tq31665 pickup -l -t unix -u
mq31666 qmgr -l -t unix -u
11月 10 16:00:56 rocky1 systemd[1]: Starting Postfix Mail Transport Agent...
11月 10 16:00:56 rocky1 postfix/master[31664]: daemon started -- version 3.5.8, configuration /etc/postfix
11月 10 16:00:56 rocky1 systemd[1]: Started Postfix Mail Transport Agent.
[root@rocky1 postfix]#
7. postfixの自動起動を無効化します。LifeKeeperではリソースの起動、停止を管理するため、OSの起動処理は無効化する必要があります。
[root@rocky1 postfix]# systemctl disable postfix
Removed /etc/systemd/system/multi-user.target.wants/postfix.service.
[root@rocky1 postfix]#
8. QSPを利用してpostfixをリソース保護します。LifeKeeper GUIから以下の“Create Resource Hierarchy”クリックします。
9. Create resource Wizardが起動します。Quick Service Protectionを選択して“Next”をクリックして進めます。
10. Switchback Type は”intelligent”を選択して進めます。
11. リソースを作成するServerを選択します。アクティブノードを選択します。
12. Service Nameを選択します。”postfix”を選択します。
13. 監視処理の有無を選択します。“enable”を選択して進めます。
14. Resource Tag 名を設定します。任意の値を入力可能です。ここでは初期値を利用します。“Create Instance“をクリックするとリソース作成が開始されます。
15. リソース作成が成功した場合は以下のようにメッセージが表示されます。“Next”をクリックしてリソースをスタンバイノードに拡張します。
16. スタンバイノードを選択します。”rocky2”を選択します。またスタンバイノードは全てデフォルト値で作成するため“Accept Defaults”を選択して進めます。自動的に設定値を選択して進められます。
17. スタンバイノードへの拡張が完了です。2ノード構成の場合は“Finish”をクリックします。
18. Doneを選択します。
19. QSP-postfixリソースが作成されました。
20. 現在の状況としては、postfixリソースとファイルシステムリソース(DataKeeper),IPリソースがバラバラで作成されています。この3つのリソースは連動する必要がありますので、リソース間の依存関係を作成します。依存関係は以下のように作成します。
依存関係を作成することで、サービスの起動順序、停止順序をコントロールできます。起動は子リソースから順番に行い、停止は親リソースから行います。postfixの起動に必要な仮想IPアドレスやqueueを保存したファイルシステムは先に起動する必要があるため、postfixリソースの子リソースとして登録します。
21. QSP-postfixリソースを選択して右クリックし、メニューから“Create Dependency”を選択します。
22. Create Dependency Wizardが表示されます。Child Resource Tagに”/var/spool/postfix”(ファイルシステムリソース)を選択してNextをクリックします。
23. 以下の構成で依存関係の作成を行います。問題なければ”Create Dependency”をクリックします。
24. The dependency creation was successfulが出力しましたら正常に完了です。Doneをクリックします。
25. QSP-postfixリソースの子リソースとしてファイルシステムリソースが紐づけられます。
26. 同様に、”ip-192.168.64.100”(IPリソース)もQSP-postfixリソースに紐づけます。以下のような構成なれば依存関係の作成が完了です。
27. 最後に、作成したリソースのスイッチオーバーをして、スタンバイノードでも正常にpostfixが起動するか確認してください。スタンバイノードの最上位のリソース(QSP-postfix)を選択して右クリックするとメニューが開きます。”In Service”を選択することで、スタンバイノードにリソースを切り替えることが出来ます。
28. In Serviceウィザードが起動しますので、“In Service”をクリックします。
29.正常にスイッチオーバーが完了しますと “Done”を選択することが出来ます。Doneが選択できない場合はスイッチオーバーに失敗していますので、出力メッセージを確認してスタンバイノードの設定など確認してください。
30. スタンバイノードに正常にスイッチオーバーが完了しました。
31. postfixがスタンバイノードで正常に稼働しているかどうか確認してください。
[root@rocky2 ~]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2022-11-11 11:31:15 JST; 4min 44s ago
Process: 28155 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 28153 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 28151 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 28253 (master)
Tasks: 3 (limit: 11079)
Memory: 4.4M
CGroup: /system.slice/postfix.service
tq28253 /usr/libexec/postfix/master -w
tq28254 pickup -l -t unix -u
mq28255 qmgr -l -t unix -u
11月 11 11:31:14 rocky2 systemd[1]: Starting Postfix Mail Transport Agent...
11月 11 11:31:15 rocky2 postfix/master[28253]: daemon started -- version 3.5.8, configuration /etc/postfix
11月 11 11:31:15 rocky2 systemd[1]: Started Postfix Mail Transport Agent.
[root@rocky2 ~]#
今回は以上になりますが、疑問点やほかのARKが提供されていないアプリケーションのHAクラスター化についてもお気軽にお問い合わせください。
参考資料(外部資料リンク)
[Linux]任意のアプリケーションを保護する方法
https://lkdkuserportal.sios.jp/hc/ja/articles/360039809392
Quick Service Protection (QSP) Recovery Kit
https://docs.us.sios.com/spslinux/9.6.2/ja/topic/quick-service-protection-qsp-recovery-kit
LifeKeeper for Linux テクニカルドキュメンテーション
https://docs.us.sios.com/spslinux/9.6.2/ja/topic/sios-protection-suite-for-linux-technical-documentation
IP Recovery Kit 管理ガイド
https://docs.us.sios.com/spslinux/9.6.2/ja/topic/ip-recovery-kit-administration-guide
ファイルシステムリソース階層の作成
https://docs.us.sios.com/spslinux/9.6.2/ja/topic/creating-a-file-system-resource-hierarchy
SIOS DataKeeper for Linux
https://docs.us.sios.com/spslinux/9.6.2/ja/topic/datakeeper