【現象】
分散環境で複数のサーバを同時起動しようとすると、起動に失敗する場合があります。
【発生条件】
以下の条件にすべてあてはまる場合に発生することがあります。
・2台以上の分散構成である
・複数のサーバを同時刻に起動する
【原因】
intra-mart Accel Platform の起動処理の中で、分散環境のサーバ間で通信を行って、サービスの選出が行われます。
サービスの選出処理は、分散環境にサーバが起動や停止する度に動作します。
複数のサーバを同時刻に起動すると、処理の進行状況によって、それぞれのサーバでサービス選出処理が複数回動作してしまう場合があります。
同時刻に、サービスの選出処理が複数回実行されるような状況では、サーバ間の通信が一時的に増加します。
サーバ間通信は、バックエンドでスレッドを生成して行われますが、通信が増加するとバックエンドのスレッド数が不足することがあり、通信が行えない場合があります。
通信が行えない状況に陥った場合には、サービスが正常に起動できず、結果的にサーバの起動に失敗します。
【回避策】
サーバの起動時刻をずらすことで回避できます。
【補足】
サーバの起動時刻をずらすという回避策の他に、以下の設定値を増やすことで回避できる可能性があります。
・ネットワーク設定(network-agent-config.xml)の最大通信スレッド数(max-threads)
・ネットワーク設定(network-agent-config.xml)の到達確認/再送用最大通信スレッド数(max-oob-threads)
参考: https://document.intra-mart.jp/library/iap/public/configuration/im_configuration_reference/texts/im_core/network-agent-config/index.html
ただし、複数のサーバを同時刻に起動するような運用の場合には、アプリケーションの構成やサーバ数、処理の進捗状況により、以下のドキュメントに記載されている目安(サーバ台数の2倍)では足りなくなる可能性が考えられます。
・ https://document.intra-mart.jp/library/iap/public/im_core/im_service_specification/texts/clustering/index.html#label-overview-max-thread-setting
最適なスレッド数を得るには、事象が発生する度に少しずつ増やして様子を見るといった試行錯誤が必要となります。
-- 対象 -------------------------------------------------------------------------
iAP/Accel Platform/全アップデート
--------------------------------------------------------------------------------
FAQID:1281