以下に、本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムが限定されるものではない。
図1は、情報処理システムの概略構成図である。情報処理システム100は、冗長化されている。情報処理システム100は、サーバ1、サーバ2及びクライアント31〜33を有する。サーバ1及びクライアント31〜33は、互いにネットワークで接続されている。また、サーバ2及びクライアント31〜33は、互いにネットワークで接続されている。さらに、サーバ1及びサーバ2もネットワークで接続されている。以下では、クライアント31〜33を区別しない場合、「クライアント30」という。このクライアント30が、「通信先装置」の一例にあたる。
サーバ2は、運用系情報処理装置(運用系サーバ)である。サーバ2は、故障が発生していない状態であれば、クライアント30と通信を行いサービスを提供する。サーバ2とクライアント30との間には、様々なサービスを提供するための通信に用いるコネクションが張られる。例えば、サーバ2は、クライアント31との間で特定のサービスで用いる通信のためのコネクションを張り、そのコネクションを用いてクライアント31と通信を行うことで、特定のサービスを提供する。各クライアント30に張られるコネクションの数は提供するサービスの数や内容に応じて決定され、各クライアント30に対して1又は複数のコネクションが張られる。このコネクションとして、以下では、TCPコネクションを例に説明する。
サーバ1は、待機系情報処理装置(待機系サーバ)である。サーバ2が故障した場合、フェイルセーフが実行され、サーバ2が実行していた処理がサーバ1に移行され、サーバ1は、サーバ2が実行していた処理をサーバ2に代わって実行する。
さらに、フェイルセーフ時には、サーバ2と各クライアント30との間のコネクションもサーバ2に移行させる。そして、サーバ1は、移行された各コネクションが使用可能か否かを判定する。その後、サーバ1は、使用可能と判定したTCPコネクションを継続して通信に使用する。また、使用不能なコネクションについては、サーバ1は、コネクションを解放し、そのコネクションの再確立を行い通信を再開する。
次に、図2を参照してサーバ1における、コネクションの使用可能判定について詳細に説明する。図2は、運用系サーバ及び待機系サーバのブロック図である。
運用系サーバであるサーバ2は、図2に示すように、冗長化制御部21、プロトコル制御部22及び通信処理部23を有する。
通信処理部23は、クライアント30との間でコネクションを確立する。そして、通信処理部23は、確立したコネクションを用いてクライアント30と通信を行う。また、通信処理部23は、あるコネクションを通信に用いなくなった場合、そのコネクションの解放を行う。
プロトコル制御部22は、通信処理部23によるコネクション確立後、確立したコネクションに関するクライアント30との通信速度に関する情報であるRTT(Round Trip Time)値及びコネクション確立時刻をOS(Operating System)から取得する。ここで、あるコネクションについてRTT値を取得し損ねた場合、プロトコル制御部22は、そのコネクションのRTT値を「0」とする。
そして、プロトコル制御部22は、取得したRTT値及びコネクション確立時刻を含むコネクション情報を冗長化制御部21へ出力し、コネクション情報のサーバ1への引き継ぎを冗長化制御部21に依頼する。このコネクション情報には、他にも、例えば、コネクション識別子、自装置IPアドレス、自装置ポート番号、相手装置IPアドレス、相手装置ポート番号及び相手装置ポート番号が含まれる。
さらに、プロトコル制御部22は、通信処理部23によりあるコネクションを用いてデータの送受信が行われた場合、そのデータの送受信においてOSで生成された送信シーケンス番号及び受信シーケンス番号を取得する。以下では、送信シーケンス番号及び受信シーケンス番号をまとめて、「送受信シーケンス番号」という。プロトコル制御部22は、データの送受信に用いられたコネクションの識別子及び送受信シーケンス番号を冗長化制御部21へ出力し、それらの情報のサーバ1への引き継ぎを冗長化制御部21に依頼する。
さらに、プロトコル制御部22は、通信処理部23によりあるコネクションが解放された場合、そのコネクションの識別子を冗長化制御部21へ出力し、そのコネクションの解放のサーバ1への引き継ぎを冗長化制御部21に依頼する。
冗長化制御部21は、サーバ2に障害が発生していない状態で、確立されたコネクションの識別情報とともに、そのコネクションのRTT値及びコネクション確立時刻をプロトコル制御部22から受信する。次に、冗長化制御部21は、コネクションの追加を表す要求識別子、すなわち「ADD」という値を有する要求識別子を生成する。その後、冗長化制御部21は、コネクションの追加を表す要求識別子をコネクション情報に付加して、図3に示すフォーマットを有する確立時引継データ131を生成する。図3は、確立時引継データのフォーマットを表す図である。そして、冗長化制御部21は、確立時引継データ131を冗長化制御部11へ送信する。
また、冗長化制御部21は、データの送受信に用いられたコネクションの識別子及び送受信シーケンス番号をサーバ2への引き継ぎ依頼とともにプロトコル制御部22から受信する。次に、冗長化制御部21は、データの更新を表す要求識別子、すなわち「MOD(Modify)」という値を有する要求識別子を生成する。その後、冗長化制御部21は、データの更新を表す要求識別子をコネクション情報及び送受信シーケンス番号に付加して、図4に示すフォーマットを有する更新時引継データ132を生成する。図4は、更新時引継データのフォーマットを表す図である。そして、冗長化制御部21は、更新時引継データ132を冗長化制御部11へ送信する。
また、冗長化制御部21は、解放されたコネクションの識別子をサーバ2への引き継ぎ依頼とともにプロトコル制御部22から受信する。次に、冗長化制御部21は、コネクションの解放を表す要求識別子、すなわち「DEL(Delete)」という値を有する要求識別子を生成する。その後、冗長化制御部21は、コネクションの解放を表す要求識別子をコネクション識別子に付加して、図5に示すフォーマットを有する解放時引継データ133を生成する。図5は、解放時引継データのフォーマットを表す図である。そして、冗長化制御部21は、解放時引継データ133を冗長化制御部11へ送信する。
また、サーバ2に障害が発生すると、冗長化制御部21は、装置の切り替え指示をサーバ1の冗長化制御部11に通知する。そして、冗長化制御部21は、自装置で実行中の各処理で使用中のデータをサーバ1へ移行する。
待機系サーバであるサーバ1は、図2に示すように、冗長化制御部11、プロトコル制御部12及び通信処理部13を有する。
冗長化制御部11は、サーバ2に障害が発生していない状態で、サーバ2とクライアント30との間でコネクションが確立されると、確立時引継データ131をサーバ2の冗長化制御部21から受信する。そして、冗長化制御部11は、確立時引継データ131をプロトコル制御部12へ出力する。
また、冗長化制御部11は、サーバ2に障害が発生していない状態で、サーバ2とクライアント30との間でデータの送受信が行われると、更新時引継データ132をサーバ2の冗長化制御部21から受信する。そして、冗長化制御部11は、更新時引継データ132をプロトコル制御部12へ出力する。
また、冗長化制御部11は、サーバ2に障害が発生していない状態で、サーバ2とクライアント30との間のコネクションが解放されると、解放時引継データ133をサーバ2の冗長化制御部21から受信する。そして、冗長化制御部11は、解放時引継データ133をプロトコル制御部12へ出力する。
さらに、サーバ2に障害が発生すると、冗長化制御部11は、装置の切り替え指示の通知をサーバ2の冗長化制御部21から受信する。そして、冗長化制御部11は、各処理をアクティブ化する。また、各処理のアクティブ化後、冗長化制御部11は、フェイルオーバ発生をプロトコル制御部12のダミーパケット送信制御部113へ通知する。さらに、冗長化制御部11は、サーバ2で実行されていた各処理で使用されていたデータを受信し、各処理の実行を開始する。
プロトコル制御部12は、コネクション管理部111、送信順序決定部112、ダミーパケット送信制御部113及びダミーパケット受信制御部114を有する。
コネクション管理部111は、サーバ2に障害が発生していない状態で、サーバ2とクライアント30との間でコネクションが確立された場合、確立時引継データ131の入力を冗長化制御部11から受ける。次に、コネクション管理部111は、取得した確立時引継データ131からコネクション情報を取得する。そして、コネクション管理部111は、コネクション単位で図6に示すコネクション管理テーブル130を生成する。図6は、コネクション管理テーブルの一例の図である。
図6に示すように、コネクション管理テーブル130は、コネクション識別子、自装置IPアドレス、自装置ポート番号、相手装置IPアドレス、相手装置ポート番号、送信シーケンス番号及び受信シーケンス番号が登録される。さらに、コネクション管理テーブル130は、コネクション確立時刻及びRTT値が登録される。
また、コネクション管理部111は、サーバ2に障害が発生していない状態で、サーバ2とクライアント30との間でデータの送受信が行われると、更新時引継データ132の入力を冗長化制御部11から受ける。そして、コネクション管理部111は、データの送受信に用いられたコネクションのコネクション識別子及び送受信シーケンス番号を更新時引継データ132から取得する。そして、コネクション管理部111は、コネクション識別子を用いてコネクション管理テーブル130を検索し、送信シーケンス番号及び受信シーケンス番号を更新する。
また、コネクション管理部111は、サーバ2に障害が発生していない状態で、サーバ2とクライアント30との間のコネクションの解放が行われると、解放時引継データ133の入力を冗長化制御部11から受ける。そして、コネクション管理部111は、解放されたコネクションのコネクション識別子を解放時引継データ133から取得する。そして、コネクション管理部111は、コネクション識別子を用いてコネクション管理テーブル130を検索し、そのコネクション管理テーブル130を削除する。
送信順序決定部112は、常時接続判断時間を予め有する。本実施例では、送信順序決定部112は、10分の常時接続判断時間を有する。そして、送信順序決定部112は、コネクション管理テーブル130から、各コネクションのコネクション確立時刻を取得する。次に、送信順序決定部112は、コネクション確立時刻から現在時刻までの時間が常時接続判断時間以上であるコネクションを常時接続コネクションとして特定する。そして、送信順序決定部112は、全てのコネクションについてコネクション確立時刻の早いもの順になるように仮の送信順序を決定する。
図7は、コネクション確立時刻を用いた送信順序の決定について説明するための図である。例えば、図7に示すコネクションC1〜C4が存在する場合について説明する。図7におけるコネクションC1〜C4のそれぞれの端部に記載された日時は、それぞれのコネクション確立時刻を表す。送信順序決定部112は、コネクションC1〜C4のコネクション確立時刻から、コネクション確立時刻が早い順にコネクションC1〜C4の送信順序を決定する。すなわち、図7の場合、コネクションC1,C2、C3,C4の順となるように送信順序を決定する。このように送信順序を決定することで、サーバ1は、より長い時間継続して確立されているコネクションに対して優先的にダミーパケットを送信することができる。コネクションは、接続時間が長いほど使用頻度が高いと考えられ、重要度が高いといえる。そのため、接続時間が長いコネクションに対して早期にコネクションの継続の判定を行うことで、サーバ1は、重要度の高いコネクションを迅速に再開することができる。コネクション確立時刻による送信順序の決定が、「接続時間」による優先度の決定の一例にあたる。
さらに、送信順序決定部112は、決定した仮の送信順序のなかで、常時接続コネクション以外の各コネクションについて隣合うコネクションに対してRTT値が小さい順になるように順位を移動することを繰り返す。ただし、RTT値が「0」のコネクションについては、仮の送信順以上に送信順序が早くなるようには動かさない。送信順序決定部112は、常時接続コネクション以外の各コネクションの順位が決定した状態を送信順序として決定する。このコネクションの送信順序が、「優先度」の一例にあたる。また、この送信順序決定部112が、「優先度決定部」の一例にあたる。
図8は、RTT値を用いた送信順序の決定について説明するための図である。例えば、図8に示すクライアント31〜36とサーバ1との間でコネクションC11〜C13及びC21〜C23が存在する場合について説明する。送信順序決定部112は、コネクションC11〜C13のRTT値が短い順にダミーパケットが送信されるように送信順序を決定する。RTT値の長短は、ネットワーク経路の長短に対応する。例えば、図8の場合、コネクションC11〜C13は、ネットワーク41を介してクライアント31〜33とサーバ1とを接続する。これに対して、コネクションC21〜C23は、ネットワーク41に加えてネットワーク42を介してクライアント31〜33とサーバ1とを接続する。すなわち、コネクションC11〜C13の距離は、コネクションC21〜C23の距離より短い。そのため、コネクションC11〜C13のRTT値は、コネクションC21〜C23のRTT値より短くなる。そこで、図8のような場合、送信順序決定部112は、コネクションC11〜C13に対して、コネクションC21〜C23よりも優先的にダミーパケットが送信されるように送信順序を決定する。
このように送信順序を決定することで、サーバ1は、よりネットワーク経路が短いコネクションに対して優先的にダミーパケットを送信することができる。コネクションの経路長が短いほどRTT値が短く、より短時間でダミーパケットに対する応答が返ってくる。そのため、サーバ1は、より早く通信を再開できるコネクションから迅速に通信を再開することができる。ここで、本実施例では、RTT値を用いて各コネクションのネットワーク経路の長さを判定し、その判定結果を用いて送信順序を決定したが、他の方法でネットワークの長さの判定を行ってもよい。例えば、送信順序決定部112は、各コネクションが接続するクライアント30の位置情報を用いて、それぞれのコネクションの長さを判定してもよい。RTT値による送信順序の決定が、「通信経路」による優先度の決定の一例にあたる。
ダミーパケット送信制御部113は、1回のダミーパケットの連続送信数及びダミーパケット送信の待機時間を含むダミーパケット送信量定義情報を予め有する。本実施例では、ダミーパケット送信制御部113は、1回のダミーパケットの連続送信数を10個と記憶する。また、ダミーパケット送信制御部113は、ダミーパケット送信の待機時間を10msと記憶する。このダミーパケットの連続送信数が、「所定数」の一例にあたる。また、ダミーパケット送信の待機時間が、「送信間隔」の一例にあたる。
ダミーパケット送信制御部113は、フェイルオーバ発生の通知を冗長化制御部11から受ける。次に、ダミーパケット送信制御部113は、ダミーパケットを送信するコネクションの送信順序を送信順序決定部112から取得する。そして、ダミーパケット送信制御部113は、取得した送信順序にしたがって、1回のダミーパケットの連続送信数である10個のコネクションを選択し、選択したコネクションを介してクライアント30へダミーパケットを10個送信する。ここで、図2では、クライアント30を一台記載したが、実際には複数台あり、ダミーパケット送信制御部113は、選択したコネクションの接続先が異なるクライアント30の場合、異なるクライアント30へダミーパケットを送信する。
ダミーパケット送信制御部113は、ダミーパケットに対する応答が返ってきたか否かを管理するための応答待ちテーブルを予め有する。そして、ダミーパケット送信制御部113は、ダミーパケットを送信したコネクションのエントリを応答待ちテーブルに作成する。
10個のダミーパケットを送信した後、ダミーパケット送信制御部113は、ダミーパケットの送信を待機する。そして、ダミーパケット送信制御部113は、ダミーパケット送信の待機開始後、自己が有する送信間隔タイマを用いて、ダミーパケット送信の待機時間である10msが経過したか否かを判定する。
ダミーパケット送信の待機時間が経過していない場合、ダミーパケット送信制御部113は、待機解除の通知をダミーパケット受信制御部114から受信したか否かを判定する。待機解除の通知をダミーパケット受信制御部114から受信した場合、ダミーパケット送信制御部113は、ダミーパケット送信の待機を解除し、ダミーパケット送信を再開する。その後、ダミーパケット送信制御部113は、10個のダミーパケットの送信と待機とを繰り返す。
また、待機解除の通知を受信する前にダミーパケット送信の待機時間が経過した場合、ダミーパケット送信制御部113は、ダミーパケットの送信を再開する。その後、ダミーパケット送信制御部113は、10個のダミーパケットの送信と待機とを繰り返す。このダミーパケット送信制御部113が、「送信部」の一例にあたる。
ダミーパケット受信制御部114は、ダミーパケット送信制御部113により送信されたダミーパケットに対する応答であるダミーパケット応答をクライアント30から受信する。そして、ダミーパケット受信制御部114は、ダミーパケット送信制御部113が連続して送信した10個のダミーパケットに対するダミーパケット応答を受信すると、待機解除をダミーパケット送信制御部113へ通知する。
ここで、本実施例では、ダミーパケット受信制御部114は、ダミーパケット応答を受信すると、ダミーパケット送信制御部113が作成した応答待ちテーブルの中のそのダミーパケット応答に対応するエントリに、応答受信のフラグを設定する。そして、ダミーパケット受信制御部114は、連続して送信された10個のダミーパケットに対応するダミーパケット応答を受信した場合、待機解除の通知をダミーパケット送信制御部113へ送信する。
また、ダミーパケット受信制御部114は、ダミーパケット応答を受信したコネクションの情報を通信処理部13へ送信する。さらに、ダミーパケット受信制御部114は、ダミーパケット送信制御部113がダミーパケットを送信してから、そのダミーパケットに対するダミーパケット応答を受信するまでタイムアウト時間が経過したか否かを判定する。タイムアウト時間が経過した場合、ダミーパケット受信制御部114は、コネクション使用不可の通知を通信処理部13へ送信する。このダミーパケット受信制御部114が、「受信部」の一例にあたる。
ここで、図9を用いてダミーパケットの送受信についてまとめて説明する。図9は、ダミーパケットの送受信を説明するための図である。ダミーパケット送信制御部113は、送信順序にしたがい10個のダミーパケットをクライアント30へ送信する(ステップS1)。次に、ダミーパケット送信制御部113は、10msのダミーパケット送信の待機に入る(ステップS2)。
これに対して、ダミーパケット受信制御部114は、ステップS1で送信されたダミーパケットに対するダミーパケット応答を受信する(ステップS3)。そして、ダミーパケット受信制御部114は、ステップS1で送信されたダミーパケットに対応する10個のダミーパケット応答を受信すると、待機解除をダミーパケット送信制御部113へ通知する(ステップS4)。
ダミーパケット送信制御部113は、待機時間の10msが経過する前に待機解除の通知を受けた場合、又は、待機時間の10msが経過した場合、ダミーパケットの送信を再開する(ステップS5)。ダミーパケット送信制御部113及びダミーパケット受信制御部114は、全てのコネクションの使用の可否の判定が終了するまで、ステップS1〜S5の処理を繰り返す。
通信処理部13は、サーバ2における障害発生後、サーバ2がクライアント30との間で張っていたコネクションに対するダミーパケット応答を受信したか、又は、そのコネクションが使用不可かの通知をダミーパケット受信制御部114から受信する。コネクションが使用不可の場合、通信処理部13は、ソケットを解放してコネクションを解放し、その後クライアント30との間でコネクションの再確立を行う。その後、通信処理部13は、再確立したコネクションを用いてクライアント30と通信を行う。
これに対して、ダミーパケット応答を受信した場合、通信処理部13は、そのコネクションを用いたデータの送受信処理をクライアント30との間で再開する。
次に、図10を参照して、サーバ2によるコネクション情報の引継処理の流れについて説明する。図10は、運用系サーバによるコネクション情報の引継処理のフローチャートである。
プロトコル制御部22は、通信処理部23によるコネクションの確立が行われたか否かを判定する(ステップS11)。コネクション確立が行われた場合(ステップS11:肯定)、プロトコル制御部22は、確立されたコネクションのRTT値の取得を実行する(ステップS12)。
そして、プロトコル制御部22は、RTT値が取得できたか否かを判定する(ステップS13)。RTT値が取得できた場合(ステップS13:肯定)、プロトコル制御部22は、ステップS15へ進む。
これに対して、RTT値が取得できていない場合(ステップS13:否定)、プロトコル制御部22は、確立されたコネクションのRTT値を0とする(ステップS14)。
次に、プロトコル制御部22は、コネクション確立時刻を取得する(ステップS15)。
次に、プロトコル制御部22は、IPアドレスやポート番号といったコネクション情報を収集する(ステップS16)。
そして、プロトコル制御部22は、コネクション情報の引き継ぎを冗長化制御部21へ依頼する。冗長化制御部21は、コネクションの追加を表す要求識別子、すなわちADDという値を有する要求識別子を生成する。次に、冗長化制御部21は、生成した要求識別子をコネクション情報に付加して確立時引継データ131を生成する。そして、冗長化制御部21は、確立時引継データ131をサーバ1の冗長化制御部11へ送信し、コネクション情報の引き継ぎを行う(ステップS17)。
一方、コネクションの確立が行われていない場合(ステップS11:否定)、プロトコル制御部22は、データが通過したか否かを判定する(ステップS18)。データが通過した場合(ステップS18:肯定)、プロトコル制御部22は、コネクション識別情報及び送受信シーケンス番号の引き継ぎを冗長化制御部21へ依頼する。冗長化制御部21は、コネクションの変更を表す要求識別子、すなわちMODという値を有する要求識別子を生成する。次に、冗長化制御部21は、生成した要求識別子をコネクション識別情報及び送受信シーケンス番号に付加して更新時引継データ132を生成する。そして、冗長化制御部21は、更新時引継データ132をサーバ1の冗長化制御部11へ送信し、コネクション識別情報及び送受信シーケンス番号の引き継ぎを行う(ステップS19)。
一方、データが通過していない場合(ステップS18:否定)、プロトコル制御部22は、コネクションが解放された否かを判定する(ステップS20)。コネクションが解放された場合(ステップS20:肯定)、プロトコル制御部22は、コネクション識別情報の引き継ぎを冗長化制御部21へ依頼する。冗長化制御部21は、コネクションの解放を表す要求識別子、すなわちDELという値を有する要求識別子を生成する。次に、冗長化制御部21は、生成した要求識別子をコネクション識別情報に付加して解放時引継データ133を生成する。そして、冗長化制御部21は、解放時引継データ133をサーバ1の冗長化制御部11へ送信し、コネクション識別情報の引き継ぎを行う(ステップS21)。
これに対して、コネクションが解放されていない場合(ステップS20:否定)、プロトコル制御部22は、コネクション情報の引継処理を終了する。
次に、図11を参照して、コネクション管理テーブル130の作成処理の流れを説明する。図11は、コネクション管理テーブルの作成処理のフローチャートである。
コネクション管理部111は、確立時引継データ131、更新時引継データ132又は解放時引継データ133の何れかのパケットを取得する。そして、コネクション管理部111は、取得したパケットに含まれる要求識別子がコネクションの追加を表す要求識別子であるADDか否かを判定する(ステップS101)。要求識別子がADDの場合(ステップS101:肯定)、コネクション管理部111は、パケットに含まれるコネクション情報を用いて新たにコネクション管理テーブル130を作成する(ステップS102)。
次に、コネクション管理部111は、コネクション確立を通信処理部13に通知する(ステップS103)。
これに対して、要求識別子がADDでない場合(ステップS101:否定)、コネクション管理部111は、要求識別子がコネクションの変更を表す要求識別子であるMODか否かを判定する(ステップS104)。要求識別子がMODの場合(ステップS104:肯定)、コネクション管理部111は、コネクション管理テーブル130の送信シーケンス番号及び受信シーケンス番号を更新する(ステップS105)。
これに対して、要求識別子がMODでない場合(ステップS104:否定)、コネクション管理部111は、要求識別子がコネクションの解放を表す要求識別子であるDELであることを確認する(ステップS106)。
要求識別子がDELであることを確認すると、コネクション管理部111は、パケットの含まれるコネクション識別子を用いてコネクション管理テーブル130を検索し、特定したコネクション管理テーブル130を削除する(ステップS107)。
次に、図12を参照して、送信順序の決定処理の流れについて説明する。図12は、送信順序の決定処理のフローチャートである。
送信順序決定部112は、コネクション管理テーブル130を適当順番に並べて、コネクションの順位をつける。次に、送信順序決定部112は、1つコネクションを選択し、順位が1つ上のコネクションよりコネクション確立時刻が早いか否かを判定する(ステップS201)。
順位が1つ上のコネクションよりコネクション確立時刻が早い場合(ステップS201:肯定)、送信順序決定部112は、コネクションの順序を入れ替える(ステップS202)。その後、送信順序決定部112は、ステップS201へ戻る。
これに対して、順位が1つ上のコネクションよりコネクション確立時刻が遅い又は同じ場合(ステップS201:否定)、送信順序決定部112は、コネクション確立時刻から現在時刻まで10分以上経過しているか否かを判定する(ステップS203)。
コネクション確立時刻から現在時刻まで10分未満の場合(ステップS203:否定)、送信順序決定部112は、ステップS205へ進む。
これに対して、コネクション確立時刻から現在時刻まで10分以上経過した場合(ステップS203:肯定)、送信順序決定部112は、選択したコネクションの順序を決定する(ステップS204)。
次に、送信順序決定部112は、全てのコネクション管理テーブル130について判定が終了したか否かを判定する(ステップS205)。判定が終了していないコネクション管理テーブル130が残っている場合(ステップS205:否定)、送信順序決定部112は、ステップS201へ戻る。
これに対して、全てのコネクション管理テーブル130について判定が終了した場合(ステップS205:肯定)、送信順序決定部112は、全てのコネクションの順序が決定済みか否かを判定する(ステップS206)。全てのコネクションの順序が決定された場合(ステップS206:肯定)、送信順序決定部112は、コネクションの送信順序決定処理を終了する。
これに対して、順序が決定されていないコネクションが残っている場合(ステップS206:否定)、送信順序決定部112は、順序が決定されていないコネクションを1つ選択する。そして、送信順序決定部112は、選択したコネクションのRTT値が0か否かを判定する(ステップS207)。RTT値が0の場合(ステップS207:肯定)、送信順序決定部112は、ステップS211へ進む。
これに対して、RTT値が0でない場合(ステップS207:否定)、送信順序決定部112は、順位が1つ上のコネクションのRTT値より選択したコネクションのRTT値が小さいか否かを判定する(ステップS208)。
選択したコネクションのRTT値が、順位が1つ上のコネクションのRTT値以上の場合(ステップS208:否定)、送信順序決定部112は、順位が1つ上のコネクションのRTT値が0か否かを判定する(ステップS209)。
順位が1つ上のコネクションのRTT値より選択したコネクションのRTT値が小さい場合(ステップS208:肯定)又は順位が1つ上のコネクションのRTT値が0の場合(ステップS209:肯定)、送信順序決定部112は、以下の処理を行う。すなわち、送信順序決定部112は、選択したコネクションと順位が1つ上のコネクションの順序を入れ替える(ステップS210)。その後、送信順序決定部112は、ステップS207へ戻る。
これに対して、順位が1つ上のコネクションのRTT値が0でない場合(ステップS209:否定)、送信順序決定部112は、順序が決定されていないコネクションの中で選択していないコネクションが存在するか否かを判定する(ステップS211)。選択していないコネクションが存在する場合(ステップS211:肯定)、送信順序決定部112は、ステップS207へ戻る。
これに対して、全てのコネクションの選択が完了した場合(ステップS211:否定)、送信順序決定部112は、コネクションの送信順序の決定処理を終了する。
次に、図13を参照して、障害発生時のフェイルオーバ処理の全体的な流れについて説明する。図13は、障害発生時のフェイルオーバ処理のフローチャートである。
冗長化制御部21は、サーバ2における故障の発生を検出する(ステップS301)。
次に、冗長化制御部21は、切替指示をサーバ1の冗長化制御部11へ送信する(ステップS302)。
冗長化制御部11は、待機系サーバであるサーバ1を運用系サーバへ変更する(ステップS303)。
次に、冗長化制御部11は、TCPコネクションのリカバリ開始をプロトコル制御部12に指示する。プロトコル制御部12は、TCPコネクションのリカバリを開始する(ステップS304)。
そして、プロトコル制御部12は、ダミーパケットの送信処理を実行する(ステップS305)。
その後、プロトコル制御部12は、ダミーパケット応答を受信する(ステップS306)。
次に、プロトコル制御部12は、ダミーパケット応答を受信したコネクションの中から1つのコネクションを選択する(ステップS307)。
次に、プロトコル制御部12は、送受信シーケンス番号が一致した、すなわち、送信シーケンス番号と受信シーケンス番号とが一致したか否かを判定する(ステップS308)。送受信シーケンス番号が一致した場合(ステップS308:肯定)、プロトコル制御部12は、コネクション継続可能通知を通信処理部13へ通知する(ステップS309)。通信処理部13は、継続可能とされたコネクションを用いたデータの送受信を再開する(ステップS310)。
一方、送受信シーケンス番号が一致しない場合(ステップS308:否定)、プロトコル制御部12は、コネクションを切断する(ステップS311)。
その後、プロトコル制御部12は、コネクション継続不能を通信処理部13に通知する(ステップS312)。
通信処理部13は、コネクション管理テーブル130を削除し、ソケットを解放した後に、コネクションを再確立する(ステップS313)。
その後、プロトコル制御部12は、全てのコネクションの継続可否についての確認が終了したか否かを判定する(ステップS314)。継続可否についての確認が終わっていないコネクションがある場合(ステップS314:否定)、プロトコル制御部12は、ステップS307へ戻る。
これに対して、全てのコネクションについて継続可否についての確認が終わった場合(ステップS314:肯定)、プロトコル制御部12は、コネクションの継続可否の判定処理を終了する。
次に、図14を参照して、ダミーパケットの送受信処理の流れについて説明する。図14は、ダミーパケットの送受信処理のフローチャートである。
ダミーパケット送信制御部113は、ダミーパケット送信量定義情報を読み込む。本実施例では、ダミーパケット送信制御部113は、ダミーパケット送信量定義情報を読み込む(ステップS411)。
次に、ダミーパケット送信制御部113は、送信順序にしたがいコネクションを10本選択する(ステップS412)。
次に、ダミーパケット送信制御部113は、選択したコネクションそれぞれに1パケットずつ、全部でダミーパケットを10パケット送信する(ステップS413)。
次に、ダミーパケット送信制御部113は、応答待ちテーブルにダミーパケットを送信したコネクションのエントリを作成する(ステップS414)。
次に、ダミーパケット送信制御部113は、送信間隔タイマを起動する(ステップS415)。
その後、ダミーパケット送信制御部113は、待機解除の通知を受信したか否かを判定する(ステップS416)。待機解除の通知を受信した場合(ステップS416:肯定)、ダミーパケット送信制御部113は、ステップS418へ進む。
これに対して、待機解除の通知を未受信の場合(ステップS416:否定)、ダミーパケット送信制御部113は、待機時間が経過したか否かを判定する(ステップS417)。待機時間が経過していない場合(ステップS417:否定)、ダミーパケット送信制御部113は、ステップS416へ戻る。
これに対して、待機時間が経過した場合(ステップS417:肯定)、ダミーパケット送信制御部113は、ステップS418へ進む。そして、ダミーパケット送信制御部113は、未選択のコネクションが存在するか否かを判定する(ステップS418)。未選択のコネクションが存在する場合(ステップS418:肯定)、ダミーパケット送信制御部113は、ステップS412へ戻る。
これに対して、未選択のコネクションが存在しない場合(ステップS418:否定)、ダミーパケット送信制御部113は、ダミーパケットの送信を終了する。
一方、ダミーパケット受信制御部114は、ダミーパケット送信制御部113によるダミーパケットの送信後、ダミーパケット応答を受信する(ステップS421)。
次に、ダミーパケット受信制御部114は、受信したダミーパケット応答に対応する応答待ちテーブルのエントリに受信済みフラグを立て、応答待ちテーブルの情報を受信済みに変更する(ステップS422)。
そして、ダミーパケット受信制御部114は、連続して送られた10パケットのダミーパケットに対するダミーパケット応答が受信済みか否かを応答待ちテーブルを用いて判定する(ステップS423)。ダミーパケット応答が未受信のコネクションがある場合(ステップS423:否定)、ダミーパケット受信制御部114は、ステップS421へ戻る。
これに対して、連続して送られた10パケットのダミーパケットに対するダミーパケット応答が受信済みの場合(ステップS423:肯定)、ダミーパケット受信制御部114は、待機解除の通知をダミーパケット送信制御部113へ送信する(ステップS424)。図14におけるステップS424から延びる一点鎖線は、待機解除通知がダミーパケット受信制御部114からダミーパケット送信制御部113へ送信されたことを示す。
ここで、本実施例では、送信順序決定部112は、ネットワーク情報として接続時間及びRTT値を用いて送信順序を決定したが、例えば、いずれか一方を用いて送信順序を決定してもよい。また、送信順序決定部112は、これ以外のネットワーク情報を用いて送信順序を決定してもよい。
以上に説明したように、本実施例に係る情報処理システムでは、所定数ずつ所定間隔を空けて送信順序にしたがいコネクションを介してダミーパケットを送信する。これにより、ネットワーク上におけるダミーパケット及びダミーパケット応答のロストが軽減され、コネクションの継続率を向上させることができる。したがって、システムの信頼性を向上させることができる。
また、本実施例に係る情報処理システムは、ネットワーク情報を基にダミーパケットを送信するコネクションの送信順序を決定する。これにより、重要なコネクションを迅速に回復させることができる。また、早期に回復可能なコネクションをなるべく早く回復させることで、ネットワーク内のパケット総数を減らすことができ、ネットワークの負荷を軽減し、ダミーパケットの送信をスムーズに行うことができる。
次に、実施例2について説明する。本実施例に係る情報処理システムは、実施例1における送信順序の決定に加えてラウンドロビンを用いて送信順序を変更する。以下では、送信順序の決定について主に説明する。以下の説明では、実施例1と同様の各部の機能については説明を省略する。本実施例に係る情報処理システム100も、図2のブロック図で表される。
送信順序決定部112は、接続時間及びRTT値を用いてダミーパケットを送信するコネクションの送信順序を決定する。次に、送信順序決定部112は、コネクション確立時刻を基に送信順序を決定した各コネクションの相手装置IPアドレスをコネクション管理テーブル130から取得する。そして、送信順序決定部112は、コネクション確立時刻を基に送信順序を決定したコネクションにおいて、相手装置IPアドレスが同一となるコネクションに連続してダミーパケットを送信しないようにラウンドロビンを用いて送信順序を並び替える。
さらに、送信順序決定部112は、同一のRTT値を有するコネクションをコネクション管理テーブル130から特定する。次に、送信順序決定部112は、特定したコネクション管理テーブル130から相手装置IPアドレスを取得する。そして、送信順序決定部112は、RTT値が同じコネクションであって相手装置IPアドレスが同一となるコネクションに対して連続してダミーパケットが送信されないようにラウンドロビンを用いて送信順序を並び替える。
図15は、ラウンドロビンを用いた送信順序の決定について説明するための図である。例えば、図15に示すクライアント31〜33とサーバ1との間でコネクションC101〜C106が存在する場合について説明する。
ここで、例えば、コネクション確立時刻で送信順序が決定されたコネクションとしてコネクションC101,C102,C103,C104,C105,C106の順で並んでいたものとする。この場合、コネクションC101とコネクションC102とは、相手装置IPアドレスが同一となる。また、コネクションC103とコネクションC104とは、相手装置IPアドレスが同一となる。また、コネクションC105とコネクションC106とは、相手装置IPアドレスが同一となる。
そこで、送信順序決定部112は、ラウンドロビンを用いてクライアント31〜33へダミーパケットを送信するように送信順序を変更する。例えば、送信順序決定部112は、コネクションC101,C103,C105,C102,C104,C106の順となるように送信順序を変更する。
次に、図16を参照して、本実施例に係る送信順序の決定処理について説明する。図16は、実施例2に係る送信順序の決定処理のフローチャートである。
送信順序決定部112は、コネクション確立時刻を用いて送信順序の決定を行う(ステップS501)。
次に、送信順序決定部112は、RTT値を用いて送信順序を変更する(ステップS502)。
次に、送信順序決定部112は、コネクション確立時刻を用いて送信順序が決定された各コネクションの相手装置IPアドレスをコネクション管理テーブル130から取得する(ステップS503)。
そして、送信順序決定部112は、コネクション確立時刻を用いて送信順序が決定された各コネクションにおいて、相手装置IPアドレスが同一となるコネクションが連続しているか否かを判定する(ステップS504)。相手装置IPアドレスが同一となるコネクションが連続していない場合(ステップS504:否定)、送信順序決定部112は、ステップS506へ進む。
これに対して、相手装置IPアドレスが同一となるコネクションが連続する場合(ステップS504:肯定)、送信順序決定部112は、コネクションの送信順序を並び替える。具体的には、送信順序決定部112は、ラウンドロビンを用いて相手先IPアドレスが同一のコネクションが連続しないように、コネクション確立時刻を用いて送信順序が決定されたコネクションの送信順序を並び替える(ステップS505)。
次に、送信順序決定部112は、同一のRTT値のコネクションの相手装置IPアドレスをコネクション管理テーブル130から取得する(ステップS506)。
そして、送信順序決定部112は、同一のRTT値のコネクションであって相手装置IPアドレスが同一となるコネクションが連続しているか否かを判定する(ステップS507)。相手装置IPアドレスが同一となるコネクションが連続していない場合(ステップS507:否定)、送信順序決定部112は、送信順序の決定処理を終了する。
これに対して、相手装置IPアドレスが同一となるコネクションが連続する場合(ステップS507:肯定)、送信順序決定部112は、コネクションの送信順序を並び替える。具体的には、送信順序決定部112は、ラウンドロビンを用いて相手先IPアドレスが同一のコネクションが連続しないように、同一のRTT値のコネクションの送信順序を並び替える(ステップS508)。
以上に説明したように、本実施例に係る情報処理システムは、ラウンドロビンを用いて送信順序を並び替え、それにより決定した送信順序にしたがってダミーパケットを送信する。これにより、同一のクライアントに対して連続してダミーパケットを送信することなく、負荷分散的に複数のクライアントに対して均等にダミーパケットを送信することができる。したがって、ネットワーク内のパケット総数を減らすことができ、ネットワークの負荷を軽減し、ダミーパケットの送信をスムーズに行うことができる。
(ハードウェア構成)
図17は、待機系サーバ及び運用系サーバのハードウェア構成図である。各実施例では、待機系サーバ及び運用系サーバ共に同様のハードウェア構成を有するため、図17ではサーバ1を例に記載した。ただし、運用系サーバであるサーバ2についても同様の各部を有するものとして説明する。
サーバ1は、図17に示すように、CPU(Central Processing Unit)91、ROM(Read Only Memory)92、RAM(Random Access Memory)93を有する。さらに、サーバ1は、入力装置94、出力装置95、ハードディスク96、駆動装置97、可搬記憶媒体98及び通信インタフェース99を有する。
CPU91は、ROM92、RAM93、入力装置94、出力装置95、ハードディスク96、駆動装置97及び通信インタフェース99とバスで接続される。
入力装置94は、例えば、キーボードやマウスなどである。操作者は、入力装置94を用いて情報の入力を行う。出力装置95は、モニタなどである。
通信インタフェース99は、サーバ2及びクライアント30との間で通信を行うためのインタフェースである。
駆動装置97は、可搬記憶媒体98が装着され、装着された可搬記憶媒体98に対して読み書きを行う。
ハードディスク96は、補助記憶装置である。ハードディスク96は、図2に例示した冗長化制御部11、プロトコル制御部12及び通信処理部13の各機能を実現するためのプログラムを含む各種プログラムを記憶する。
CPU91は、図2に例示した冗長化制御部11、プロトコル制御部12及び通信処理部13の各機能を実現するプログラムを含む各種プログラムをハードディスク96から読み出し、RAM93に展開する。そして、CPU91は、ROM92及びRAM93を用いて展開したプログラムを実行する。これにより、CPU91、ROM92及びRAM93は、図2に例示した冗長化制御部11、プロトコル制御部12及び通信処理部13の各機能を実現する。
また、サーバ2も同様に、図17に示すCPU91、ROM92、RAM93、入力装置94、出力装置95、ハードディスク96、駆動装置97、可搬記憶媒体98及び通信インタフェース99を有する。
ハードディスク96は、補助記憶装置である。ハードディスク96は、図2に例示した冗長化制御部21、プロトコル制御部22及び通信処理部23の各機能を実現するためのプログラムを含む各種プログラムを記憶する。
CPU91は、図2に例示した冗長化制御部21、プロトコル制御部22及び通信処理部23の各機能を実現するプログラムを含む各種プログラムをハードディスク96から読み出し、RAM93に展開する。そして、CPU91は、ROM92及びRAM93を用いて展開したプログラムを実行する。これにより、CPU91、ROM92及びRAM93は、図2に例示した冗長化制御部21、プロトコル制御部22及び通信処理部23の各機能を実現する。
ここで、本実施例では、ハードディスク96に記憶させたプログラムを用いて各機能を実現する場合で説明したが、これに限らない。例えば、サーバ1であれば、可搬記憶媒体98に、冗長化制御部11、プロトコル制御部12及び通信処理部13の各機能を実現するためのプログラムを含む各種プログラムを記憶させてもよい。そして、サーバ1のCPU91が、駆動装置97を用いて可搬記憶媒体98から各種プログラムを読み出し実行することで、冗長化制御部11、プロトコル制御部12及び通信処理部13の各機能を実現してもよい。また、例えば、サーバ2であれば、可搬記憶媒体98に、冗長化制御部21、プロトコル制御部22及び通信処理部23の各機能を実現するためのプログラムを含む各種プログラムを記憶させてもよい。そして、サーバ2のCPU91が、駆動装置97を用いて可搬記憶媒体98から各種プログラムを読み出し実行することで、冗長化制御部21、プロトコル制御部22及び通信処理部23の各機能を実現してもよい。