IJServerクラスタはサーバーインスタンスが互いに起動状態を監視するためにグループ管理サービスを使用します。このサービスを利用する機能については「Java EE運用ガイド」-「グループ管理サービス」を参照してください。
このサービスを使用すると、クラスタに設定されているハートビートアドレスとハートビートポートに各サーバーインスタンスが定期的にハートビートの信号を送信し、その信号を別のサーバーインスタンスが受信することでサーバーインスタンスが正常に運用されていることを認識します。ハートビート信号が送信されなかったサーバーインスタンスについては、停止しているか異常が発生していると判断して、グループから除外されます。
定期的に信号が送受信されるため、以下のような場合には各種定義をチューニングすることができます。また、このグループ管理サービスを使用する必要がない場合にはハートビートを無効にすることで、信号の送受信を行わないように変更できます。
ネットワーク負荷が高いため、定期的な信号の送受信間隔を大きくしてサーバ負荷を軽減したい。
頻繁にアクセスがなく、システムでリアルタイムに異常を検知する必要がないため、異常を検知するまでの時間は若干遅くても良いので、サーバの負荷を軽減したい。
以下に各種定義項目のチューニング観点を説明します。各信号を送信する時にはマルチキャストポートに対して約3300バイトのデータを送信します。プロトコル最大試行/検証済みタイムアウト/pingタイムアウトは、値を小さくすると異常を検知するまでの時間を短くすることができますが、一時的な高負荷状態をサーバーインスタンスが停止しているか異常が発生していると判断する場合がありますので、特に理由がなければデフォルト値を使用することをお勧めします。
定義項目 | チューニング観点 |
---|---|
プロトコルタイムアウト | 指定した間隔で約3300バイトのデータが定期的に送信されます。この値を大きく設定することでネットワーク負荷を軽減することができますが、サーバーインスタンスの停止や異常を検知するタイミングが遅延します。 |
プロトコル最大試行 | [プロトコルタイムアウト]×[プロトコル最大試行]の時間にグループに属する他のサーバーインスタンスからハートビート信号が送信されなかった場合に、信号が送信されないサーバーインスタンスに異常(または停止)が発生している可能性があると判断します。 |
検証済みタイムアウト | [プロトコルタイムアウト]×[プロトコル最大試行]の時間にハートビート信号が送信されなかった場合、更に検証済みタイムアウトの時間超過してもハートビート信号が送信されなければ、ping要求を送信します。 |
pingタイムアウト | 最終的にサーバーインスタンスに異常(または停止)が発生しているかを確認するping要求を送信して、サーバーインスタンスからの応答を待機する時間です。 |
上記より、サーバーインスタンスが異常もしくは停止した場合に、そのサーバーインスタンスを除外するまでの時間の目安は以下となりますので、異常を検知する時間のシステム要件と、ネットワーク負荷を照らし合わせてチューニングを行ってください。
サーバーインスタンスをグループから除外するまでの時間の目安
[プロトコルタイムアウト]×[プロトコル最大試行]+[検証済みタイムアウト]+[pingタイムアウト]