2021/03/13

リソースの予約をクラスタ内のどれで処理している?

Notes で会議室や備品の予約の重複を防いだりするために Room and Resource Manager (RnRMgr) タスクを Domino に常駐させています。

この RnRMgr を Domino クラスタ環境で常駐する場合、予約情報を基本的にはリソース予約データベースでシステム管理サーバーとして指定されたサーバーがプライマリサーバーとなって予約処理を行います。

RnRMgr は 1分おきに別サーバーを監視しています。別サーバーがダウンすると、デフォルトでは30分後にフェイルオーバーして、ダウンしたサーバーの役割を引き継ぎます。

クラスタ内の3台以上の Domino で RnRMgr タスクが稼働していた場合、プライマリーの RnRMgr タスクが稼働している Domino がダウンしたとき、別のどの Domino へフェイルオーバーするかを決める優先順位を持っていないために複数の Domino の RnRMgr が処理を引き受けようとしてしまいます。そのため RnRMgr はクラスタメイトで2台まで実行することができます。

プライマリサーバーがダウンし、別サーバーへフェイルオーバーした後、プライマリサーバーが復旧しても、自動でプライマリサーバーへのフェイルバックは行われません。プライマリサーバーへ役割を戻すには、RnRMgr の処理を引き受けたサーバーの(RnRMgrタスクではなく)Domino を停止します。このとき Domino をデフォルトでは少なくとも30分は停止しなくてはなりません。

この30分という時間は、notes.ini に RNRMGR_CLUSTER_FAIL_INTERVAL=n (nの単位は分)で変更できます。この設定を追加したり値を変更した後、Domino を再起動すると反映されます。

RNRMGR_CLUSTER_FAIL_INTERVAL=10 と設定しておくと、相手がダウンして10分すると役割を引き継ぎます。

RNRMGR_CLUSTER_FAIL_INTERVAL=の値を1に設定すると、相手がダウンして本当に1分で役割を引き継ぐことが可能かをHCLサポートへ確認してみたところ、実際にテストして得られた結果をフィードバックしてくださいました。1と指定しても5分後に役割が引き継がれ、5や8を指定すると指定通りになったとのこと。ダウンしたら早く切り替わってほしいところですが、設定値と実際の挙動を合わせておくほうが分かりやすいと思いますので(もし設定するなら)5以上の値が適当ということでしょうか。

さて、 RnRMgr はクラスタメイトのうち2台で常に起動できますが、現状どちらで役割を担っているかを知るには、次のコマンドを投入します。

tell rnrmgr whoowns resrc.nsf

resrc.nsf はリソース予約データベースのファイル名に読み替えます。

コマンドのレスポンスに、サーバー名が表示されます。

[0E0C:0002-1284] 2021/01/30 23:43:29   Database resrc.nsf is currently under the control of server testV12/v12 (0)

上の結果は、その時点で役割を担っているサーバーが  testv12/v12 であることを示しています。


【参考】

(参考)会議室予約データベースのクラスタ化について

Domino クラスタ環境下でフェールオーバーした RnRMGR タスクの処理がフェールバックされない

【おまけ】

3台以上のクラスタでのフェイルオーバー先についてHCLサポートから教えてもらったことがあります。

クラスタ内に3台以上の Domino がある場合、cldbdir.nsf のビュー上でリソース予約データベースの並び順と、そのデータベースサービスの有効/無効の設定がフェイルオーバーに関係するとのこと。

クラスタメイトに A, B, C の3台があり、3 台すべてにリソース予約DBのレプリカを設置したとします。cldbdir.nsf 上で リソース予約DBのビューでの並びは A, B, C の順とします。

RnRMgr を A, C の 2 台で稼働させ、A がダウンした場合、cldbdir.nsf の並びで A の次にあるサーバーにフェイルオーバーしようとします。A の次にあるのは B ですが、このとき C にフェイルオーバーさせるには B の文書でデータベースサービスを無効(Database out of service: Yes)にしておく必要があります。

また RnRMgr を A, B の 2 台で稼働させ、A がダウンした場合、Cの文書の状態に関わらず B にフェイルオーバーします。ただし B を停止して A にフェイルオーバーさせるには C の文書でデータベースサービスを無効にしておく必要があります。


0 件のコメント:

コメントを投稿