メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラム
【課題】 クライアントが故障した際に、サーバ上のキュー内のエントリが永久に残留しないようにする。
【解決手段】 本発明は、マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いてマスタが自装置に交代した場合には、キュー及び該キューの情報を格納したデータベース内に予め複製されていたキューの情報及びクライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を複製し、マスタ交代がなかった場合はデータを複製する。また、クライアントが故障した場合は、セッション一覧からセッションIDに対応する全てのキューを取得し、セッションIDが存在する場合は、該セッションIDを空欄とする。
【解決手段】 本発明は、マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いてマスタが自装置に交代した場合には、キュー及び該キューの情報を格納したデータベース内に予め複製されていたキューの情報及びクライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を複製し、マスタ交代がなかった場合はデータを複製する。また、クライアントが故障した場合は、セッション一覧からセッションIDに対応する全てのキューを取得し、セッションIDが存在する場合は、該セッションIDを空欄とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラムに係り、特に、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境において、ネットワーク故障及びサーバ故障耐性を備えたメッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラムに関する。
【背景技術】
【0002】
第1の従来技術として、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境において、長時間トランザクションをサポートする技術がある。この技術は、マスタ交代に備えてデータを複製(レプリケーション)することによりサーバ故障への耐障害性、トランザクションによるクライアント端末の故障に対する耐障害性を実現するものである(例えば、非特許文献1参照)
また、第2の従来技術として、ネットワーク故障、サーバ故障のいずれにも対応したロックサービスがある。この技術は、ファイルにロックをかけるオペレーションを行うことでネットワーク故障、サーバ故障、クライアント故障のいずれに対しても対応が可能な技術である(例えば、非特許文献2,3参照)。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】http://www.ibm.com/software/jp/websphere/integration/wmq/
【非特許文献2】Mike Burrows, "The Chubby lock service for loosely-coupled distributed systems", 7th USENIX Symposium on Operating Systems Design and Implementation (OSDI), 2006. November 8.(http://research.google.com/archive/chubby-osdi06.pdf)
【非特許文献3】Tushar Chandra et al., "Paxos Made Live - An Engineering Perspective," PODC'07, 2007.(http://labs.google.com/papers/paxos_made_live.html)
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記の第1の従来技術(非特許文献1)は、ネットワークが分断された場合には、マスタが複数存在するマルチマスタ状態が発生する可能性がある。また、トランザクションはロールバックされるため、タスクキューの実施例ではタスク処理に長時間を要するという問題がある。また、長時間トランザクションにより、キュー内の要素が失われないことは保証できるが、Paxos(信頼性が低いプロセッサのネットワークにおいて、単一の結果について合意を得る問題を解決するためのプロトコルの集合)を用いていないため、データの一貫性が保障できないケースがある。また、キュー内の要素は失われないが、クライアントが故障した場合に、サーバ内にキュー内のエントリが永久に残留するという問題がある。
【0005】
また、第2の従来技術(非特許文献2、3)は、ネットワーク故障、サーバ故障にも対応できるロックサービスであり、ロック・ファイル処理等のオペレーションが可能であるが、サーバ上のファイル操作とそれに対応する分散ロックをプリミティブな操作とした場合、その組み合わせだけでは、サーバが故障しフェイルオーバした場合にキュー内の情報の無矛盾性を保障することができない。例えば、ファイルにロックをかけた上でキュー情報を操作するのでは、一つのキュー操作(プッシュ・ポップ等)に対して、ファイルのロックと読み込み・書き込みの複数の操作を行わなければならず、十分な性能が期待できない。
【0006】
本発明は、上記の点に鑑みなされたもので、1)クライアントが故障した際に、サーバ上のキュー内のエントリが永久に残留することを防止し、2)ネットワーク故障、サーバ故障、クライアント故障のいずれの故障が同時起きた場合でも、過半数のサーバが互いに通信可能な状態である限り、サーバとして動作を継続でき、キューの状態を正常に維持でき、3)同期している複数サーバ間でネットワークが分散した場合(Split Brain状態)に、読み出されるキューの状態が不一致とならないようにし、4)クラスタ内の一部のサーバが故障した場合であっても、キューのトランザクション状態が導入されているシステムにおいて、当該状態を保持する、ことが可能なメッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
図1は、本発明の原理構成図である。
【0008】
本発明(請求項1)は、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアント1とし、該クライアントと該複数のロックサーバ300からなるメッセージキュー管理システムであって、
クライアント1は、
全てのマスタ候補に対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行う手段と、
セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信する手段と、を有し、
ロックサーバ300は、
キュー及び該キューの情報を格納したデータベース309と、
セッション情報を格納したセッション情報記憶手段304と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段301と、
マスタ調整手段301の結果、マスタが交代した場合には、データベース309内に予め複製されていたキューの情報及びクライアント1からの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段307と、
クライアント1から接続要求受信後、該クライアントに対してセッションIDを送信し、セッション情報記憶手段304に該クライアント1の情報と共にセッションIDを格納するセッション管理手段303と、
クライアント1が故障した場合は、セッション情報記憶手段304からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段3031と、を有する。
【0009】
また、本発明(請求項2)は、請求項1のメッセージキュー管理システムにおいて、
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
レプリケーション手段307は、
自装置が以前マスタではなかった場合は、セッション情報記憶手段304からマスタ交代前のセッション情報を読み込んで、削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
クライアント1からの再接続要求に対しては、削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じてデータベース309内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、を含む。
【0010】
また、本発明(請求項3)は、請求項2の第2のセッション制御手段の要求処理手段において、
クライアント1からの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いてデータベース309のキューに対してプッシュ操作を行うプッシュ手段と、
クライアント1からの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいてデータベース309のキューについてポップ操作を行うポップ手段と、
クライアント1からの要求が削除要求である場合は、取得したキューID、キーを用いてデータベース309のキューについて削除操作を行う削除手段と、
クライアント1からの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、データベース309から該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
クライアント1からの要求が、キューに対する操作の途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、データベース309から該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、を含む。
【0011】
本発明(請求項4)は、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとするシステムにおけるロックサーバであって、
キュー及び該キューの情報を格納したデータベースと、
セッション情報を格納したセッション情報記憶手段と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段と、
マスタ調整手段の結果、マスタが交代した場合には、データベース内に予め複製されていたキューの情報及びクライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段と、
クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理手段と、
クライアントが故障した場合は、セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段と、を有する。
【0012】
また、本発明(請求項5)は、請求項4のロックサーバにおいて、
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
レプリケーション手段は、
自装置が以前マスタではなかった場合は、セッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
クライアントからの再接続要求に対しては、削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じてデータベース内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、を含む。
【0013】
また、本発明(請求項6)は、請求項5のロックサーバにおいて、
第2のセッション制御手段の要求処理手段は、
クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いてデータベースのキューに対してプッシュ操作を行うプッシュ手段と、
クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいてデータベースのキューについてポップ操作を行うポップ手段と、
クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いてデータベースのキューについて削除操作を行う削除手段と、
クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、を含む。
【0014】
本発明(請求項7)は、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとし、該複数のロックサーバのうちのいずれかをマスタとするメッセージキュー管理方法であって、
クライアントは、
全てのマスタ候補となるロックサーバに対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行うステップと、
セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信するステップと、を行い、
ロックサーバは、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整ステップと、
マスタ調整ステップの結果、マスタが交代した場合には、データベース内に予め複製されていたキューの情報及びクライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーションステップと、
クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理ステップと、
クライアントが故障した場合は、セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマークステップと、を行う。
【0015】
また、本発明(請求項8)は、請求項7のレプリケーションステップにおいて、
自装置が以前マスタではなかった場合は、
セッション情報を格納したセッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、削除待ちのセッション情報を格納した削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、データベースの該セッションIDに該当するクライントが保持していたキューの途中状態を無効化する第1のセッション制御ステップと、
クライアントからの再接続要求に対しては、削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信し、
クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じてデータベース内のキューに対する処理を行い、他のロックサーバに送信する第2のセッション制御ステップと、を含む。
【0016】
また、本発明(請求項9)は、請求項8の第2のセッション制御ステップにおいて、
クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いてデータベースのキューに対してプッシュ操作を行い、
クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいてデータベースのキューについてポップ操作を行い、
クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いてデータベースのキューについて削除操作を行い、
クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク操作を行い、
クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク操作を行う。
【0017】
本発明(請求項10)は、請求項4乃至6のいずれか1項に記載のロックサーバを構成する各手段としてコンピュータを機能させるためのメッセージキュー管理プログラムである。
【発明の効果】
【0018】
上記のように本発明によれば、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境において、予め決められた候補の中から多数決によって一意なマスタを選出することにより、マルチマスタ状態となることを回避する。
【0019】
また、レプリケーションとフェイルオーバによりマスタが故障しても新しいマスタに役割を引き継ぐのみで動作を継続するため、クラスタ内の一部のサーバが故障した場合であっても、キューのトランザクション状態が導入されているシステムにおいて、キュー内の情報が矛盾する問題を防止する。
【0020】
同期している複数サーバ間でネットワーク分断が発生した場合であっても、読み出されるキューの状態が不一致となる問題を防止できる。即ち、マスタキューを保持しているサーバが故障し、フェイルオーバした場合にキュー内の情報が矛盾する問題を防止することができる。
【0021】
クライアントが故障した場合に、マスタ上のキュー内のエントリが永久に残留することを防止することができる。
【0022】
また、ネットワーク故障、サーバ故障、クライアント故障、これらのいずれの故障が同時に起きた場合でも、過半数のサーバが互いに通信可能な状態である限り、サーバとして動作を継続し、キューの状態を正常に維持することができる。
【0023】
また、クラスタ内の一部のサーバが故障した場合であっても、キューのトランザクション状態が導入されているシステムにおいて、当該状態を保持できる。即ち、タスクキューに適用した場合、タスクの再実行を防ぐことにより、システムの処理効率が向上する。
【図面の簡単な説明】
【0024】
【図1】本発明の原理構成図である。
【図2】本発明を適用するシステム構成図である。
【図3】本発明の一実施の形態における要部のシステム構成図である。
【図4】本発明の一実施の形態におけるセッション一覧記憶部のテーブルの例である。
【図5】本発明の一実施の形態における削除待ちセッション一覧記憶部のテーブルの例である。
【図6】本発明の一実施の形態におけるDBのテーブルの例である。
【図7】本発明の一実施の形態におけるクライアントの動作のフローチャートである。
【図8】本発明の一実施の形態におけるロックサーバのフローチャートである。
【図9】本発明の一実施の形態におけるクライアントとのセッション復元処理(S1060)のフローチャートである。
【図10】本発明の一実施の形態におけるクライアントからの要求受付開始処理(S1070)のフローチャートである。
【図11】本発明の一実施の形態におけるキュー制御部のプッシュ操作のフローチャートである。
【図12】本発明の一実施の形態におけるキュー制御部のポップ操作のフローチャートである。
【図13】本発明の一実施の形態におけるキュー制御部のデリート操作のフローチャートである。
【図14】本発明の一実施の形態におけるキュー制御部のマーク操作のフローチャートである。
【図15】本発明の一実施の形態におけるアンマーク操作のフローチャートである。
【図16】本発明の一実施の形態におけるクライアントからの要求受付閉塞処理(S1100,S2130)のフローチャートである。
【図17】本発明の一実施の形態におけるセッション削除処理(S5070,S2170)のフローチャートである。
【図18】本発明の一実施の形態における自動アンマーク操作(S4020)のフローチャートである。
【発明を実施するための形態】
【0025】
以下、図面と共に本発明の実施の形態を説明する。
【0026】
図3は、本発明を適用するシステム構成を示す。
【0027】
本発明は、図2に示すように、分散ファイルシステムのデータ管理と制御を行うプライマリサーバ100、バックアップサーバ200、分散システムの可用性とシステムとしての一貫性を高めるための基本機能を提供するマスタまたはレプリカとしての動作モードを有するロックサーバ300、分散システムの分散ファイルシステムを利用するアプリケーションにリンクされるクライアント端末ライブラリを有する複数のクライアント端末10、物理的にデータを保持する複数のワーカ20から構成される、大規模分散処理システムに適用される技術である。
【0028】
プライマリサーバ100は、クライアント端末10からのファイルのメタ情報取得・更新要求を取得して、更新されたメタ情報を複製してバックアップサーバ200に送信し、メタ情報に基づいてワーカ20に対するデータ管理及び制御を行う。また、分散ファイルマスタの状態をロックサーバマスタ300に保存する。
【0029】
クライアント端末10は、ロックサーバ300からプライマリサーバ100の位置情報を取得し、プライマリサーバ100からファイルのメタ情報を取得し、プライマリサーバ100から渡された、データを管理しているワーカ20のメタ情報に基づいてデータの読み出しを行う、または、データの書き込みを行う。
【0030】
ワーカ20は、クライアント端末10からアクセスされることにより、データの登録、提供を行う。
【0031】
ロックサーバ(マスタ)300は、分散ファイルマスタ状態と分散マスタの位置情報を管理し、プライマリサーバ100、バックアップサーバ200からのロック獲得要求を受け、サーバ間の排他制御を行うと共に、死活状態の監視を行い、例えば、プライマリサーバ100に障害が発生した場合には、当該プライマリサーバ100の死活監視ファイルを削除する。ロックサーバ(レプリカ)300は、マスタとなっているロックサーバ300の複製された情報を保持する。
【0032】
図3は、本発明の一実施の形態における要部のシステム構成を示す。同図では、本実施の形態における要部としてロックサーバ300の構成を示す。
同図に示す「クライアント」とは、ロックサーバ300から見た通信相手を指し、図2に示すクライアント端末10のみならず、分散ファイルマスタのプライマリサーバ100、バックアップサーバ200、ワーカ20のいずれかを指すものとする。
【0033】
同図に示すロックサーバ300は、マスタ調停部301、マスタ管理部302、セッション管理部303、セッション一覧記憶部304、削除待ちセッション一覧記憶部305、要求処理部306、レプリケーション管理部307、データベース(DB)309、トランザクション管理部310を有する。
【0034】
上記のセッション一覧記憶部304、削除待ちセッション一覧記憶部305は、メモリまたはハードディスク等の記憶媒体である。
【0035】
セッション一覧記憶部304及び削除待ちセッション一覧記憶部305は、セッション管理部303から参照、更新されるテーブルであり、図4、図5にそれぞれ示すように、セッションID、IPアドレスなどのクライアント情報、及びマークしているキューのエントリからなるテーブルを格納している。なお、削除待ちセッション一覧記憶部305のテーブルはマスタ交代直後のみ保持される。
【0036】
DB309は、図6に示すように、キュー一覧(同図(A))とキューID毎のレコード一覧(同図(B))のテーブルを有する。
【0037】
最初に、クライアント1の動作について説明する。
【0038】
図7は、本発明の一実施の形態におけるクライアントの動作のフローチャートである。
【0039】
ステップ101) クライアント1は、全てのマスタ候補(ロックサーバ300)に対して接続要求を送信する。
【0040】
ステップ102) マスタとして動作しているロックサーバ300からセッションIDを受信する。
【0041】
ステップ103) セッションID送信元のマスタに対して受信確認を送信する。
【0042】
ステップ104) 死活監視タイマをセットする。
【0043】
ステップ105) 死活監視タイマがタイムアウトする前に上記のマスタ候補のロックサーバ300から応答を受信したかを判定し、受信した場合はステップ103に移行し、受信していない場合は、ステップ106に移行する。
【0044】
ステップ106) 再接続タイマをセットする。
【0045】
ステップ107) 全てのマスタ候補のロックサーバ300へセッションIDを含む再接続要求を送信する。
【0046】
ステップ108) 再接続タイマがタイムアウトする前にマスタとして動作しているロックサーバ300から返信が得られたかを判定し、得られた場合はステップ103に移行し、得られない場合は当該処理を終了する。
【0047】
図8は、本発明の一実施の形態におけるロックサーバのフローチャートである。
【0048】
同図に示す処理は、Paxosによるマスタの選出処理、レプリケーション及びフェイルオーバによるデータの冗長化、紛失防止キューのための処理が含まれる。
【0049】
ステップ1010) オペレータがシステムを起動すると、マスタ調停部301は、Paxosによるマスタ選定処理を行う。当該処理は、例えば、文献1『Leslie Lamport, "Paxos Made Simpke, "ACM SIGACT News (Distributed Computing Column) 32, 4 (Whole Number 121, December 2001) 51-58』、文献2『Cary G. Gray and Davide R. Cheriton, "Leases: An Efficient Fault-Tolerant Mechanism for Distributed File Cache Coherency," Procs of 12th ACM SOSP '89, 202-210,1989』、及び前述の非特許文献2に開示されている方法を採用する。
【0050】
当該方法は、システム上の予め決められたマスタ候補のロックサーバ300中から多数決によって一意なマスタを選出する。具体的には、マスタと同期できないサーバは停止する。これによりマルチマスタ状態とはなならい。これは、Paxosにより、一つの議題について、多数決の結論(=新しいマスタ)は必ず一つの値に収束するためである。
【0051】
ステップ1020) マスタ管理部302は、自サーバ300が上記のステップ1010の処理によりマスタとして選出されたかを判定し、選出された場合はステップ1030に移行し、選出されない場合にはステップ1110に移行する。
【0052】
ステップ1030) マスタリースタイマをセットする。ここで、「マスタリース」とは、マスタの状態を継続する期限を指す。
【0053】
ステップ1040) 次回マスタを選出するためのタイマをセットする。
【0054】
ステップ1050) マスタ管理部302は、自装置が以前もマスタであり、かつ、以前のマスタリースタイマがタイムアウトしていない場合はステップ1070に移行し、以前はマスタコンピュータではない、または、以前のマスタリースタイマがタイムアウトしている場合、つまり、マスタが交代した場合はステップ1060に移行する。
【0055】
ステップ1060) セッション管理部303は、クライアント1とのセッションを復元し、ステップ1070に移行する。当該動作は、マスタが交代した際の処理であり、当該ロックサーバ300がマスタでない状態からマスタとなった契機において、マスタとして動作を開始するために必要な処理である。この詳細動作を図9に示す。
【0056】
図9は、本発明の一実施の形態におけるクライアント端末とのセッション復元処理のフローチャートである。
【0057】
ステップ5010) クライアント1とのセッションを復元する際に、セッション管理部303は、図4に示すセッション情報記憶部304からマスタ交代前のセッション情報を読み込み、全情報を図5に示す削除待ちセッション一覧記憶部305に書き込む。
【0058】
ステップ5020) セッション管理部303は、図4のセッション一覧記憶部304のテーブル内の前情報を削除する。
【0059】
ステップ5030) セッション管理部303は、セッション削除タイマをセットする。
【0060】
ステップ5040) セッション管理部303は、セッション削除タイマがタイムアウトしたならステップ5050に移行する。
【0061】
ステップ5050) セッション管理部303は、削除待ちセッション一覧記憶部305のテーブルが空であれば当該処理を終了し、空でなければ、ステップ5060に移行する。
【0062】
ステップ5060) セッション管理部303は、削除待ちセッション一覧記憶部305の任意の1セッションを選択する。
【0063】
ステップ5070) セッション管理部303は、選択された当該セッションの削除処理を行う。具体的には、図17で詳述する。
【0064】
ステップ1070) 要求処理部306は、上記のステプ5010〜5070の処理が終了すると、クライアント1からの要求の受付を開始する。
【0065】
以下に当該クライアント1からの要求受付処理を図10に基づいて詳細に説明する。図10は、本発明の一実施の形態におけるクライアントからの要求受付開始処理のフローチャートである。
【0066】
ステップ2020) 要求処理部306は、クライアント1から要求があった場合はステップ2030に移行し、ない場合は待機する。
【0067】
ステップ2030) 要求処理部306は、クライアント1からの要求を取得すると、当該要求が(最初の)接続要求か否かを判断し、接続要求である場合はステップ2040に移行し、それ以外の場合はステップ2070に移行する。
【0068】
ステップ2040) セッション管理部303は、セッションIDを発行し、セッション一覧記憶部304に追加格納する。
【0069】
ステップ2050) 要求処理部306は、セッション管理部303において発行されたセッションIDをクライアント1に通知する。
【0070】
ステップ2060) クライアント監視プロセスを起動し、ステップ2140に移行する。
【0071】
ステップ2070) ステップ2030において、取得した要求が再接続要求である場合は、ステップ2080に移行し、それ以外の場合はステップ2100に移行する。
【0072】
ステップ2080) セッション管理部303は、受信した要求が再接続要求である場合は、削除待ちセッション一覧記憶部305から、当該要求に該当するセッションIDを削除する。
【0073】
ステップ2090) セッション管理部303は、セッションIDをセッション一覧記憶部304に追加格納し、ステップ2050に移行する。
【0074】
ステップ2100) ステップ2070において、要求処理部306によりクライアント1からの要求が再接続要求以外の要求であると判断された場合は、レプリケーション管理部307のキュー制御部308は、要求の内容に応じて、図6に示すDB309内のキューに対する処理を実行する。当該キューに対する各種の処理について、図11〜図15に基づいて説明する。
【0075】
ステップ2140) クライアント監視プロセスが起動されると、一定時間待機した後、クライアント1に対してpingコマンド(ノード到達性確認のためのコマンド)を実行する。
【0076】
ステップ2150) タイマをセットする。
【0077】
ステップ2160) タイムアウト前にクライアント1からpingコマンドに対する返信があった場合はステップ2140に移行し、ない場合はステップ2170に移行する。
【0078】
ステップ2170) セッション削除処理を行う。詳細については、図17で後述する。
【0079】
<プッシュ操作>
キュー制御部308のキューに対するプッシュ操作を図11に示す。
【0080】
ステップ11010) キュー制御部307は、クライアント1からプッシュ操作要求としてキューID、キー(K)、値(V)が入力されると、キューIDに基づいてDB309内のキュー一覧(図6(A))からキューの最後のレコード(Last)を取得する。
【0081】
ステップ11020) 以下に示す入力された入力キー(K)、入力値(V)を用いてレコードを作成し、キューIDに対応付けてレコード一覧(図6(B))に挿入する。また、キュー一覧(図6(A))の最後尾キーの次のキーを入力キーとして最後尾レコードを更新する。
【0082】
ステップ11030) DB309内のキュー一覧表(図6(A))の当該キューの最後尾キーを入力キー(K)で更新する。
【0083】
<ポップ操作>
次に、キュー制御部307のポップ操作を図12に示す。
【0084】
ステップ12010) キュー制御部308は、クライアント1からポップ操作要求としてキューIDが入力されると、キューIDを用いてDB309内のキュー一覧(図6(A))から当該キューの先頭レコード(Front)を取得する。
【0085】
ステップ12020) 当該先頭レコード(Front)をDB309のキュー一覧(図6(A))から削除する。
【0086】
ステップ12030) キュー一覧(図6(A))上の当該キューIDに対応するキューの先頭キーを先頭キーの次のキー『Front.次キー』にて更新する。
【0087】
<デリート操作>
次に、キュー制御部308のデリート操作を図13に示す。
【0088】
ステップ13010) キュー制御部308は、クライアント1からデリート操作要求としてキューIDとキー(K)が入力されると、DB309のレコード一覧(図6(B))から当該キューIDに対応する当該キーのレコードCを取得する。
【0089】
ステップ13020) レコードCの前キー「Prev」及び次キー「Next」を基に、レコードB、レコードAを取得する。
【0090】
ステップ13030) レコードBの次キーをレコードAのキーで、レコードAの次キーをレコードBのキーで更新し、レコードCを削除する。
【0091】
<マーク操作>
次に、キュー制御部308のマーク操作を図14に示す。ここで「マーク操作」とは、キューに対する途中状態の復元を指す。
【0092】
ステップ14010) キュー制御部308は、クライアント1からマーク操作要求としてセッションID,キューIDが入力されると、キューの先頭レコードをDB309のキュー一覧(図6(A))から取得し、現在レコードとする。
【0093】
ステップ14020) 取得した現在レコードのセッションIDが空欄ならばステップ14040へ移行し、セッションIDが空欄でなかった場合はステップ14030に移行する。
【0094】
ステップ14030) 現在のレコードの次キーをもとに、次のレコードをキューのレコード一覧(図6(B))より取得し、現在レコードとし、ステップ14020に移行する。次キーが空欄だった場合には失敗とし、当該処理を終了する。
【0095】
ステップ14040) 現在レコードのセッションIDを、入力されたセッションIDにより更新する。
【0096】
<アンマーク操作>
次に、キュー制御部308のアンマーク操作を図15に示す。ここで、「アンマーク操作」とは、キューに対する途中状態の復元を行わず、クライアント1が故障した際に、キュー内のエントリが永久に残留する問題を解決するものである。
【0097】
ステップ15010) キュー制御部308は、クライアント1からアンマーク操作要求としてキー、キューIDが入力されると、キューIDに該当するレコード一覧(図6(B))から入力キーに該当するレコードを取得する。
【0098】
ステップ15020) 当該レコードのセッションIDを空欄に更新する。
【0099】
ステップ2110) レプリケーション管理部307は、上記のプッシュ操作、ポップ操作、デリート操作、マーク操作、アンマーク操作のいずれかの処理結果をレプリカ30に送信する。
【0100】
ステップ2120) レプリカ30から返信が得られた場合はステップ2020に移行し、得られない場合はステップ2130に移行する。
【0101】
ステップ2130) 要求処理部306は、クライアント1からの要求の受付を閉塞する。当該ステップの詳細は図16にて詳述する。
【0102】
ステップ1080) 次回マスタ選出タイマがタイムアウトしたかを判定し、タイムアウトした場合は、ステップ1090に移行し、タイムアウトしていなければ当該処理を繰り返す。
【0103】
ステップ1090) マスタリースはタイムアウトしたかを判定し、タイムアウトした場合には、ステップ1100に移行し、タイムアウトしていなければ当該処理を繰り返す。
【0104】
ステップ1100) 要求処理部306は、クライアント1からの要求受付を閉塞する。当該処理を図16を用いて説明する。
【0105】
ステップ3010) クライアント1からの要求受付プロセスを停止する。
【0106】
ステップ3020) 全てのクライアント端末監視プロセスを停止する。
【0107】
ステップ3030) 全てのセッション情報をセッション一覧記憶部305から削除する。
【0108】
ステップ1110) 次に、上記のステップ1020において、自身がマスタとして選出されなかった場合は、マスタリースタイマをセットする。
【0109】
ステップ1120) マスタからのレプリケーション要求受付を開始する。当該処理は、文献3『Jim Gray et al., "The Recovery Manager of the System R Database Manager", Computing Surveys, Vol. 13, No.2, 1981.』及び文献4『David K. Gifford, "Weighted Voting for Replicated Data", Proc of SIGOPS, pp. 150-162, 1979.』に示される処理を行うものとする。
【0110】
ステップ1130) マスタリースタイマがタイムアウトした場合はステップ1140に移行する。
【0111】
ステップ1140) マスタからのレプリケーション要求の受付を閉塞し、ステップ1010に移行する。当該処理は上記の文献3,4と同様の処理を行うものとする。
【0112】
次に、図8のステップ1100,図10の2130におけるクライアントからの要求受付の閉塞処理について説明する。
【0113】
図16は、本発明の一実施の形態におけるクライアントからの要求受付閉塞処理(S1100,S2130)のフローチャートである。
【0114】
ステップ3010) 要求処理部306は、クライアントからの要求受付プロセスを停止する。
【0115】
ステップ3020) 全てのクライアントの監視プロセスを停止する。
【0116】
ステップ3030) 全てのセッション情報を削除する。
【0117】
次に、前述の図9のステップ5070及び図10のステップ2170のセッション削除処理について説明する。
【0118】
図17は、本発明の一実施の形態におけるセッション削除処理(S5070、S2170)のフローチャートである。
【0119】
ステップ4010) セッション管理部303は、セッション一覧記憶部304のセッション一覧からセッションIDに関連するキューを全て取得する。
【0120】
ステップ4020) セッション管理部303は、取得されたキュー全てに対して、紛失防止キュー操作として、以下の図18に示す処理により自動アンマーク操作を行う。
【0121】
図18は、本発明の一実施の形態における自動アンマーク操作(S4020)のフローチャートである。
【0122】
ステップ16010) セッション管理部303は、ステップ4010で取得したセッションIDに基づいて、セッション一覧記憶部304からキューの先頭レコードを取得する。
【0123】
ステップ16020) 当該レコードのセッションIDが、ステップ4010で取得したセッションIDである場合は、ステップ16030に移行し、そうでない場合はステップ16040に移行する。
【0124】
ステップ16030) 取得したレコードのセッションIDをnull(空欄)とする。
【0125】
ステップ16040) 次のレコードがセッション一覧記憶部304のセッション一覧に存在する場合はステップ16050に移行し、存在しない場合は当該処理を終了する。
【0126】
ステップ16050) 現在のレコードの次のレコードをセッション一覧記憶部304から取得し、ステップ16020に移行する。
【0127】
上記の一連のフローチャートにおいて、図8のステップ1010〜1100では、多数決プロトコルPaxosによるマスタ選出を行うことにより、マスタは常に1台であることが保証される。これにより、ネットワーク故障によるネットワーク分断状態(Split Brain状態)になっても、システムが管理しているキューのデータ構造が複数のマスタによって更新されることなないため、キューのデータ構造の整合性を維持することができる。
【0128】
また、マスタ故障によってマスタが存在しなくなった場合にも、このマスタに代わる次のマスタを選出する機能が含まれているため、新しいマスタが動作を引き継ぐことができる。
【0129】
マスタが動作を引き継ぐ場合は、図8のステップ1070及び図10のフローチャートに示す処理を行う。ここでは、サーバがマスタでない状態からマスタとなった契機において、マスタとして動作を開始するために必要な処理を行っている。
【0130】
新しくマスタとなったロックサーバ300は、図10のステップ2100〜ステップ2120によって予め復元されていた図4、図5、図6及び図7に示すクライアントから再接続処理(ステップ107)によって、有効なセッションの確認を行う。これにより、キュー内のデータの仕掛かり中(図6(B)マーク済)状態が正当であること(=マークされているが、マークしているセッションが存在しない状態となっているキュー内のレコード)を確認し、サーバ故障状態及びネットワーク故障状態からの復帰を行う。
【0131】
このとき、前述の非特許文献1のように、データ変更が仕掛り中であることを示すためにトランザクションを用いるのでは、トランザクションの途中の状態を復元(レプリケーション)しなければならない。しかし、トランザクションの途中状態(各種データに対する全てのロック状態)を汎用的に復元していたのでは性能向上は難しい。そこで、本発明では、図6(B),図14、図15にあるように、トランザクションの途中状態を「マーク状態」として、キュー内の一つにエントリに限るものとして限定することにより、途中状態の復元を容易にした。これによって、キュー内に対する操作の途中状態を復元することが可能となる。図6(B)、図14、図15の詳細については上記のフローチャートのステップ14010〜14040、ステップ1510,1520に示すとおりである。
【0132】
さらに、図10のステップ2140〜2170、図17、図18に示す処理を行うことにより、クライアント1が故障した場合に、セッション一覧のレコードにセッションIDが残っている場合には、自動的に当該セッションIDを空欄(null)とする自動アンマーク操作を行うことにより、ロックサーバ上のキュー内のエントリが残留することを防止すると共に、キューのトランザクション状態が導入されているシステムにおいて、当該状態を保持できる。
【0133】
また、マスタ交代に備えてデータを復元(レプリケーション)する処理は、上記のフローチャートの図10のステップ2070〜2080に示す。ここでの論理的な処理は図11から図15に示すとおりである。図11〜図15の処理の背後で、文献3と同様のアルゴリズムを用いてデータを永続化し、文献4と同様のアルゴリズムを用いてデータを復元している。これにより、サーバ故障及びネットワーク故障に由来するマスタ交代への対故障性を担保している。
【0134】
クライアント1は、セッションが正常な状態にあるときのみ(図7に示すステップ103〜105)、プッシュ・ポップ・デリート・マーク・アンマークのいずれかのキュー操作要求をマスタに送信し、マスタはクライアント1の操作要求に基づいて、図10に示すステップ2100〜2120のキュー操作を行う。図6(B)のデータ構造及び図11〜図15によってキューの操作を定義する。
【0135】
このように、キューに対してこれらのKey-Value形式の1レコードをキューの1エントリに対応させることにより、キューの論理的なデータ構造を実現する
なお、上記のロックサーバ300の処理をプログラムとして構築し、これらのコンピュータにインストールして実行させる、または、ネットワークを介して流通させることも可能である。
【0136】
また、構築されたプログラムをハードディスクや、フレキシブルディスク・CD−ROM等の可搬記憶媒体に格納し、コンピュータにインストールする、または、配布することが可能である。
【0137】
なお、本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【符号の説明】
【0138】
1 クライアント
10 クライアント端末
20 ワーカ
100 プライマリサーバ
200 バックアップサーバ
300 ロックサーバ
301 マスタ調整手段
302 マスタ管理部
303 セッション管理部
304 セッション一覧記憶部
305 削除待ちセッション一覧記憶部
306 要求処理部
307 レプリケーション手段、レプリケーション部
309 データベース
【技術分野】
【0001】
本発明は、メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラムに係り、特に、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境において、ネットワーク故障及びサーバ故障耐性を備えたメッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラムに関する。
【背景技術】
【0002】
第1の従来技術として、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境において、長時間トランザクションをサポートする技術がある。この技術は、マスタ交代に備えてデータを複製(レプリケーション)することによりサーバ故障への耐障害性、トランザクションによるクライアント端末の故障に対する耐障害性を実現するものである(例えば、非特許文献1参照)
また、第2の従来技術として、ネットワーク故障、サーバ故障のいずれにも対応したロックサービスがある。この技術は、ファイルにロックをかけるオペレーションを行うことでネットワーク故障、サーバ故障、クライアント故障のいずれに対しても対応が可能な技術である(例えば、非特許文献2,3参照)。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】http://www.ibm.com/software/jp/websphere/integration/wmq/
【非特許文献2】Mike Burrows, "The Chubby lock service for loosely-coupled distributed systems", 7th USENIX Symposium on Operating Systems Design and Implementation (OSDI), 2006. November 8.(http://research.google.com/archive/chubby-osdi06.pdf)
【非特許文献3】Tushar Chandra et al., "Paxos Made Live - An Engineering Perspective," PODC'07, 2007.(http://labs.google.com/papers/paxos_made_live.html)
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記の第1の従来技術(非特許文献1)は、ネットワークが分断された場合には、マスタが複数存在するマルチマスタ状態が発生する可能性がある。また、トランザクションはロールバックされるため、タスクキューの実施例ではタスク処理に長時間を要するという問題がある。また、長時間トランザクションにより、キュー内の要素が失われないことは保証できるが、Paxos(信頼性が低いプロセッサのネットワークにおいて、単一の結果について合意を得る問題を解決するためのプロトコルの集合)を用いていないため、データの一貫性が保障できないケースがある。また、キュー内の要素は失われないが、クライアントが故障した場合に、サーバ内にキュー内のエントリが永久に残留するという問題がある。
【0005】
また、第2の従来技術(非特許文献2、3)は、ネットワーク故障、サーバ故障にも対応できるロックサービスであり、ロック・ファイル処理等のオペレーションが可能であるが、サーバ上のファイル操作とそれに対応する分散ロックをプリミティブな操作とした場合、その組み合わせだけでは、サーバが故障しフェイルオーバした場合にキュー内の情報の無矛盾性を保障することができない。例えば、ファイルにロックをかけた上でキュー情報を操作するのでは、一つのキュー操作(プッシュ・ポップ等)に対して、ファイルのロックと読み込み・書き込みの複数の操作を行わなければならず、十分な性能が期待できない。
【0006】
本発明は、上記の点に鑑みなされたもので、1)クライアントが故障した際に、サーバ上のキュー内のエントリが永久に残留することを防止し、2)ネットワーク故障、サーバ故障、クライアント故障のいずれの故障が同時起きた場合でも、過半数のサーバが互いに通信可能な状態である限り、サーバとして動作を継続でき、キューの状態を正常に維持でき、3)同期している複数サーバ間でネットワークが分散した場合(Split Brain状態)に、読み出されるキューの状態が不一致とならないようにし、4)クラスタ内の一部のサーバが故障した場合であっても、キューのトランザクション状態が導入されているシステムにおいて、当該状態を保持する、ことが可能なメッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
図1は、本発明の原理構成図である。
【0008】
本発明(請求項1)は、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアント1とし、該クライアントと該複数のロックサーバ300からなるメッセージキュー管理システムであって、
クライアント1は、
全てのマスタ候補に対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行う手段と、
セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信する手段と、を有し、
ロックサーバ300は、
キュー及び該キューの情報を格納したデータベース309と、
セッション情報を格納したセッション情報記憶手段304と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段301と、
マスタ調整手段301の結果、マスタが交代した場合には、データベース309内に予め複製されていたキューの情報及びクライアント1からの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段307と、
クライアント1から接続要求受信後、該クライアントに対してセッションIDを送信し、セッション情報記憶手段304に該クライアント1の情報と共にセッションIDを格納するセッション管理手段303と、
クライアント1が故障した場合は、セッション情報記憶手段304からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段3031と、を有する。
【0009】
また、本発明(請求項2)は、請求項1のメッセージキュー管理システムにおいて、
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
レプリケーション手段307は、
自装置が以前マスタではなかった場合は、セッション情報記憶手段304からマスタ交代前のセッション情報を読み込んで、削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
クライアント1からの再接続要求に対しては、削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じてデータベース309内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、を含む。
【0010】
また、本発明(請求項3)は、請求項2の第2のセッション制御手段の要求処理手段において、
クライアント1からの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いてデータベース309のキューに対してプッシュ操作を行うプッシュ手段と、
クライアント1からの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいてデータベース309のキューについてポップ操作を行うポップ手段と、
クライアント1からの要求が削除要求である場合は、取得したキューID、キーを用いてデータベース309のキューについて削除操作を行う削除手段と、
クライアント1からの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、データベース309から該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
クライアント1からの要求が、キューに対する操作の途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、データベース309から該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、を含む。
【0011】
本発明(請求項4)は、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとするシステムにおけるロックサーバであって、
キュー及び該キューの情報を格納したデータベースと、
セッション情報を格納したセッション情報記憶手段と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段と、
マスタ調整手段の結果、マスタが交代した場合には、データベース内に予め複製されていたキューの情報及びクライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段と、
クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理手段と、
クライアントが故障した場合は、セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段と、を有する。
【0012】
また、本発明(請求項5)は、請求項4のロックサーバにおいて、
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
レプリケーション手段は、
自装置が以前マスタではなかった場合は、セッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
クライアントからの再接続要求に対しては、削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じてデータベース内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、を含む。
【0013】
また、本発明(請求項6)は、請求項5のロックサーバにおいて、
第2のセッション制御手段の要求処理手段は、
クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いてデータベースのキューに対してプッシュ操作を行うプッシュ手段と、
クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいてデータベースのキューについてポップ操作を行うポップ手段と、
クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いてデータベースのキューについて削除操作を行う削除手段と、
クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、を含む。
【0014】
本発明(請求項7)は、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとし、該複数のロックサーバのうちのいずれかをマスタとするメッセージキュー管理方法であって、
クライアントは、
全てのマスタ候補となるロックサーバに対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行うステップと、
セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信するステップと、を行い、
ロックサーバは、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整ステップと、
マスタ調整ステップの結果、マスタが交代した場合には、データベース内に予め複製されていたキューの情報及びクライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーションステップと、
クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理ステップと、
クライアントが故障した場合は、セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマークステップと、を行う。
【0015】
また、本発明(請求項8)は、請求項7のレプリケーションステップにおいて、
自装置が以前マスタではなかった場合は、
セッション情報を格納したセッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、削除待ちのセッション情報を格納した削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、データベースの該セッションIDに該当するクライントが保持していたキューの途中状態を無効化する第1のセッション制御ステップと、
クライアントからの再接続要求に対しては、削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信し、
クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じてデータベース内のキューに対する処理を行い、他のロックサーバに送信する第2のセッション制御ステップと、を含む。
【0016】
また、本発明(請求項9)は、請求項8の第2のセッション制御ステップにおいて、
クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いてデータベースのキューに対してプッシュ操作を行い、
クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいてデータベースのキューについてポップ操作を行い、
クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いてデータベースのキューについて削除操作を行い、
クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク操作を行い、
クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク操作を行う。
【0017】
本発明(請求項10)は、請求項4乃至6のいずれか1項に記載のロックサーバを構成する各手段としてコンピュータを機能させるためのメッセージキュー管理プログラムである。
【発明の効果】
【0018】
上記のように本発明によれば、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境において、予め決められた候補の中から多数決によって一意なマスタを選出することにより、マルチマスタ状態となることを回避する。
【0019】
また、レプリケーションとフェイルオーバによりマスタが故障しても新しいマスタに役割を引き継ぐのみで動作を継続するため、クラスタ内の一部のサーバが故障した場合であっても、キューのトランザクション状態が導入されているシステムにおいて、キュー内の情報が矛盾する問題を防止する。
【0020】
同期している複数サーバ間でネットワーク分断が発生した場合であっても、読み出されるキューの状態が不一致となる問題を防止できる。即ち、マスタキューを保持しているサーバが故障し、フェイルオーバした場合にキュー内の情報が矛盾する問題を防止することができる。
【0021】
クライアントが故障した場合に、マスタ上のキュー内のエントリが永久に残留することを防止することができる。
【0022】
また、ネットワーク故障、サーバ故障、クライアント故障、これらのいずれの故障が同時に起きた場合でも、過半数のサーバが互いに通信可能な状態である限り、サーバとして動作を継続し、キューの状態を正常に維持することができる。
【0023】
また、クラスタ内の一部のサーバが故障した場合であっても、キューのトランザクション状態が導入されているシステムにおいて、当該状態を保持できる。即ち、タスクキューに適用した場合、タスクの再実行を防ぐことにより、システムの処理効率が向上する。
【図面の簡単な説明】
【0024】
【図1】本発明の原理構成図である。
【図2】本発明を適用するシステム構成図である。
【図3】本発明の一実施の形態における要部のシステム構成図である。
【図4】本発明の一実施の形態におけるセッション一覧記憶部のテーブルの例である。
【図5】本発明の一実施の形態における削除待ちセッション一覧記憶部のテーブルの例である。
【図6】本発明の一実施の形態におけるDBのテーブルの例である。
【図7】本発明の一実施の形態におけるクライアントの動作のフローチャートである。
【図8】本発明の一実施の形態におけるロックサーバのフローチャートである。
【図9】本発明の一実施の形態におけるクライアントとのセッション復元処理(S1060)のフローチャートである。
【図10】本発明の一実施の形態におけるクライアントからの要求受付開始処理(S1070)のフローチャートである。
【図11】本発明の一実施の形態におけるキュー制御部のプッシュ操作のフローチャートである。
【図12】本発明の一実施の形態におけるキュー制御部のポップ操作のフローチャートである。
【図13】本発明の一実施の形態におけるキュー制御部のデリート操作のフローチャートである。
【図14】本発明の一実施の形態におけるキュー制御部のマーク操作のフローチャートである。
【図15】本発明の一実施の形態におけるアンマーク操作のフローチャートである。
【図16】本発明の一実施の形態におけるクライアントからの要求受付閉塞処理(S1100,S2130)のフローチャートである。
【図17】本発明の一実施の形態におけるセッション削除処理(S5070,S2170)のフローチャートである。
【図18】本発明の一実施の形態における自動アンマーク操作(S4020)のフローチャートである。
【発明を実施するための形態】
【0025】
以下、図面と共に本発明の実施の形態を説明する。
【0026】
図3は、本発明を適用するシステム構成を示す。
【0027】
本発明は、図2に示すように、分散ファイルシステムのデータ管理と制御を行うプライマリサーバ100、バックアップサーバ200、分散システムの可用性とシステムとしての一貫性を高めるための基本機能を提供するマスタまたはレプリカとしての動作モードを有するロックサーバ300、分散システムの分散ファイルシステムを利用するアプリケーションにリンクされるクライアント端末ライブラリを有する複数のクライアント端末10、物理的にデータを保持する複数のワーカ20から構成される、大規模分散処理システムに適用される技術である。
【0028】
プライマリサーバ100は、クライアント端末10からのファイルのメタ情報取得・更新要求を取得して、更新されたメタ情報を複製してバックアップサーバ200に送信し、メタ情報に基づいてワーカ20に対するデータ管理及び制御を行う。また、分散ファイルマスタの状態をロックサーバマスタ300に保存する。
【0029】
クライアント端末10は、ロックサーバ300からプライマリサーバ100の位置情報を取得し、プライマリサーバ100からファイルのメタ情報を取得し、プライマリサーバ100から渡された、データを管理しているワーカ20のメタ情報に基づいてデータの読み出しを行う、または、データの書き込みを行う。
【0030】
ワーカ20は、クライアント端末10からアクセスされることにより、データの登録、提供を行う。
【0031】
ロックサーバ(マスタ)300は、分散ファイルマスタ状態と分散マスタの位置情報を管理し、プライマリサーバ100、バックアップサーバ200からのロック獲得要求を受け、サーバ間の排他制御を行うと共に、死活状態の監視を行い、例えば、プライマリサーバ100に障害が発生した場合には、当該プライマリサーバ100の死活監視ファイルを削除する。ロックサーバ(レプリカ)300は、マスタとなっているロックサーバ300の複製された情報を保持する。
【0032】
図3は、本発明の一実施の形態における要部のシステム構成を示す。同図では、本実施の形態における要部としてロックサーバ300の構成を示す。
同図に示す「クライアント」とは、ロックサーバ300から見た通信相手を指し、図2に示すクライアント端末10のみならず、分散ファイルマスタのプライマリサーバ100、バックアップサーバ200、ワーカ20のいずれかを指すものとする。
【0033】
同図に示すロックサーバ300は、マスタ調停部301、マスタ管理部302、セッション管理部303、セッション一覧記憶部304、削除待ちセッション一覧記憶部305、要求処理部306、レプリケーション管理部307、データベース(DB)309、トランザクション管理部310を有する。
【0034】
上記のセッション一覧記憶部304、削除待ちセッション一覧記憶部305は、メモリまたはハードディスク等の記憶媒体である。
【0035】
セッション一覧記憶部304及び削除待ちセッション一覧記憶部305は、セッション管理部303から参照、更新されるテーブルであり、図4、図5にそれぞれ示すように、セッションID、IPアドレスなどのクライアント情報、及びマークしているキューのエントリからなるテーブルを格納している。なお、削除待ちセッション一覧記憶部305のテーブルはマスタ交代直後のみ保持される。
【0036】
DB309は、図6に示すように、キュー一覧(同図(A))とキューID毎のレコード一覧(同図(B))のテーブルを有する。
【0037】
最初に、クライアント1の動作について説明する。
【0038】
図7は、本発明の一実施の形態におけるクライアントの動作のフローチャートである。
【0039】
ステップ101) クライアント1は、全てのマスタ候補(ロックサーバ300)に対して接続要求を送信する。
【0040】
ステップ102) マスタとして動作しているロックサーバ300からセッションIDを受信する。
【0041】
ステップ103) セッションID送信元のマスタに対して受信確認を送信する。
【0042】
ステップ104) 死活監視タイマをセットする。
【0043】
ステップ105) 死活監視タイマがタイムアウトする前に上記のマスタ候補のロックサーバ300から応答を受信したかを判定し、受信した場合はステップ103に移行し、受信していない場合は、ステップ106に移行する。
【0044】
ステップ106) 再接続タイマをセットする。
【0045】
ステップ107) 全てのマスタ候補のロックサーバ300へセッションIDを含む再接続要求を送信する。
【0046】
ステップ108) 再接続タイマがタイムアウトする前にマスタとして動作しているロックサーバ300から返信が得られたかを判定し、得られた場合はステップ103に移行し、得られない場合は当該処理を終了する。
【0047】
図8は、本発明の一実施の形態におけるロックサーバのフローチャートである。
【0048】
同図に示す処理は、Paxosによるマスタの選出処理、レプリケーション及びフェイルオーバによるデータの冗長化、紛失防止キューのための処理が含まれる。
【0049】
ステップ1010) オペレータがシステムを起動すると、マスタ調停部301は、Paxosによるマスタ選定処理を行う。当該処理は、例えば、文献1『Leslie Lamport, "Paxos Made Simpke, "ACM SIGACT News (Distributed Computing Column) 32, 4 (Whole Number 121, December 2001) 51-58』、文献2『Cary G. Gray and Davide R. Cheriton, "Leases: An Efficient Fault-Tolerant Mechanism for Distributed File Cache Coherency," Procs of 12th ACM SOSP '89, 202-210,1989』、及び前述の非特許文献2に開示されている方法を採用する。
【0050】
当該方法は、システム上の予め決められたマスタ候補のロックサーバ300中から多数決によって一意なマスタを選出する。具体的には、マスタと同期できないサーバは停止する。これによりマルチマスタ状態とはなならい。これは、Paxosにより、一つの議題について、多数決の結論(=新しいマスタ)は必ず一つの値に収束するためである。
【0051】
ステップ1020) マスタ管理部302は、自サーバ300が上記のステップ1010の処理によりマスタとして選出されたかを判定し、選出された場合はステップ1030に移行し、選出されない場合にはステップ1110に移行する。
【0052】
ステップ1030) マスタリースタイマをセットする。ここで、「マスタリース」とは、マスタの状態を継続する期限を指す。
【0053】
ステップ1040) 次回マスタを選出するためのタイマをセットする。
【0054】
ステップ1050) マスタ管理部302は、自装置が以前もマスタであり、かつ、以前のマスタリースタイマがタイムアウトしていない場合はステップ1070に移行し、以前はマスタコンピュータではない、または、以前のマスタリースタイマがタイムアウトしている場合、つまり、マスタが交代した場合はステップ1060に移行する。
【0055】
ステップ1060) セッション管理部303は、クライアント1とのセッションを復元し、ステップ1070に移行する。当該動作は、マスタが交代した際の処理であり、当該ロックサーバ300がマスタでない状態からマスタとなった契機において、マスタとして動作を開始するために必要な処理である。この詳細動作を図9に示す。
【0056】
図9は、本発明の一実施の形態におけるクライアント端末とのセッション復元処理のフローチャートである。
【0057】
ステップ5010) クライアント1とのセッションを復元する際に、セッション管理部303は、図4に示すセッション情報記憶部304からマスタ交代前のセッション情報を読み込み、全情報を図5に示す削除待ちセッション一覧記憶部305に書き込む。
【0058】
ステップ5020) セッション管理部303は、図4のセッション一覧記憶部304のテーブル内の前情報を削除する。
【0059】
ステップ5030) セッション管理部303は、セッション削除タイマをセットする。
【0060】
ステップ5040) セッション管理部303は、セッション削除タイマがタイムアウトしたならステップ5050に移行する。
【0061】
ステップ5050) セッション管理部303は、削除待ちセッション一覧記憶部305のテーブルが空であれば当該処理を終了し、空でなければ、ステップ5060に移行する。
【0062】
ステップ5060) セッション管理部303は、削除待ちセッション一覧記憶部305の任意の1セッションを選択する。
【0063】
ステップ5070) セッション管理部303は、選択された当該セッションの削除処理を行う。具体的には、図17で詳述する。
【0064】
ステップ1070) 要求処理部306は、上記のステプ5010〜5070の処理が終了すると、クライアント1からの要求の受付を開始する。
【0065】
以下に当該クライアント1からの要求受付処理を図10に基づいて詳細に説明する。図10は、本発明の一実施の形態におけるクライアントからの要求受付開始処理のフローチャートである。
【0066】
ステップ2020) 要求処理部306は、クライアント1から要求があった場合はステップ2030に移行し、ない場合は待機する。
【0067】
ステップ2030) 要求処理部306は、クライアント1からの要求を取得すると、当該要求が(最初の)接続要求か否かを判断し、接続要求である場合はステップ2040に移行し、それ以外の場合はステップ2070に移行する。
【0068】
ステップ2040) セッション管理部303は、セッションIDを発行し、セッション一覧記憶部304に追加格納する。
【0069】
ステップ2050) 要求処理部306は、セッション管理部303において発行されたセッションIDをクライアント1に通知する。
【0070】
ステップ2060) クライアント監視プロセスを起動し、ステップ2140に移行する。
【0071】
ステップ2070) ステップ2030において、取得した要求が再接続要求である場合は、ステップ2080に移行し、それ以外の場合はステップ2100に移行する。
【0072】
ステップ2080) セッション管理部303は、受信した要求が再接続要求である場合は、削除待ちセッション一覧記憶部305から、当該要求に該当するセッションIDを削除する。
【0073】
ステップ2090) セッション管理部303は、セッションIDをセッション一覧記憶部304に追加格納し、ステップ2050に移行する。
【0074】
ステップ2100) ステップ2070において、要求処理部306によりクライアント1からの要求が再接続要求以外の要求であると判断された場合は、レプリケーション管理部307のキュー制御部308は、要求の内容に応じて、図6に示すDB309内のキューに対する処理を実行する。当該キューに対する各種の処理について、図11〜図15に基づいて説明する。
【0075】
ステップ2140) クライアント監視プロセスが起動されると、一定時間待機した後、クライアント1に対してpingコマンド(ノード到達性確認のためのコマンド)を実行する。
【0076】
ステップ2150) タイマをセットする。
【0077】
ステップ2160) タイムアウト前にクライアント1からpingコマンドに対する返信があった場合はステップ2140に移行し、ない場合はステップ2170に移行する。
【0078】
ステップ2170) セッション削除処理を行う。詳細については、図17で後述する。
【0079】
<プッシュ操作>
キュー制御部308のキューに対するプッシュ操作を図11に示す。
【0080】
ステップ11010) キュー制御部307は、クライアント1からプッシュ操作要求としてキューID、キー(K)、値(V)が入力されると、キューIDに基づいてDB309内のキュー一覧(図6(A))からキューの最後のレコード(Last)を取得する。
【0081】
ステップ11020) 以下に示す入力された入力キー(K)、入力値(V)を用いてレコードを作成し、キューIDに対応付けてレコード一覧(図6(B))に挿入する。また、キュー一覧(図6(A))の最後尾キーの次のキーを入力キーとして最後尾レコードを更新する。
【0082】
ステップ11030) DB309内のキュー一覧表(図6(A))の当該キューの最後尾キーを入力キー(K)で更新する。
【0083】
<ポップ操作>
次に、キュー制御部307のポップ操作を図12に示す。
【0084】
ステップ12010) キュー制御部308は、クライアント1からポップ操作要求としてキューIDが入力されると、キューIDを用いてDB309内のキュー一覧(図6(A))から当該キューの先頭レコード(Front)を取得する。
【0085】
ステップ12020) 当該先頭レコード(Front)をDB309のキュー一覧(図6(A))から削除する。
【0086】
ステップ12030) キュー一覧(図6(A))上の当該キューIDに対応するキューの先頭キーを先頭キーの次のキー『Front.次キー』にて更新する。
【0087】
<デリート操作>
次に、キュー制御部308のデリート操作を図13に示す。
【0088】
ステップ13010) キュー制御部308は、クライアント1からデリート操作要求としてキューIDとキー(K)が入力されると、DB309のレコード一覧(図6(B))から当該キューIDに対応する当該キーのレコードCを取得する。
【0089】
ステップ13020) レコードCの前キー「Prev」及び次キー「Next」を基に、レコードB、レコードAを取得する。
【0090】
ステップ13030) レコードBの次キーをレコードAのキーで、レコードAの次キーをレコードBのキーで更新し、レコードCを削除する。
【0091】
<マーク操作>
次に、キュー制御部308のマーク操作を図14に示す。ここで「マーク操作」とは、キューに対する途中状態の復元を指す。
【0092】
ステップ14010) キュー制御部308は、クライアント1からマーク操作要求としてセッションID,キューIDが入力されると、キューの先頭レコードをDB309のキュー一覧(図6(A))から取得し、現在レコードとする。
【0093】
ステップ14020) 取得した現在レコードのセッションIDが空欄ならばステップ14040へ移行し、セッションIDが空欄でなかった場合はステップ14030に移行する。
【0094】
ステップ14030) 現在のレコードの次キーをもとに、次のレコードをキューのレコード一覧(図6(B))より取得し、現在レコードとし、ステップ14020に移行する。次キーが空欄だった場合には失敗とし、当該処理を終了する。
【0095】
ステップ14040) 現在レコードのセッションIDを、入力されたセッションIDにより更新する。
【0096】
<アンマーク操作>
次に、キュー制御部308のアンマーク操作を図15に示す。ここで、「アンマーク操作」とは、キューに対する途中状態の復元を行わず、クライアント1が故障した際に、キュー内のエントリが永久に残留する問題を解決するものである。
【0097】
ステップ15010) キュー制御部308は、クライアント1からアンマーク操作要求としてキー、キューIDが入力されると、キューIDに該当するレコード一覧(図6(B))から入力キーに該当するレコードを取得する。
【0098】
ステップ15020) 当該レコードのセッションIDを空欄に更新する。
【0099】
ステップ2110) レプリケーション管理部307は、上記のプッシュ操作、ポップ操作、デリート操作、マーク操作、アンマーク操作のいずれかの処理結果をレプリカ30に送信する。
【0100】
ステップ2120) レプリカ30から返信が得られた場合はステップ2020に移行し、得られない場合はステップ2130に移行する。
【0101】
ステップ2130) 要求処理部306は、クライアント1からの要求の受付を閉塞する。当該ステップの詳細は図16にて詳述する。
【0102】
ステップ1080) 次回マスタ選出タイマがタイムアウトしたかを判定し、タイムアウトした場合は、ステップ1090に移行し、タイムアウトしていなければ当該処理を繰り返す。
【0103】
ステップ1090) マスタリースはタイムアウトしたかを判定し、タイムアウトした場合には、ステップ1100に移行し、タイムアウトしていなければ当該処理を繰り返す。
【0104】
ステップ1100) 要求処理部306は、クライアント1からの要求受付を閉塞する。当該処理を図16を用いて説明する。
【0105】
ステップ3010) クライアント1からの要求受付プロセスを停止する。
【0106】
ステップ3020) 全てのクライアント端末監視プロセスを停止する。
【0107】
ステップ3030) 全てのセッション情報をセッション一覧記憶部305から削除する。
【0108】
ステップ1110) 次に、上記のステップ1020において、自身がマスタとして選出されなかった場合は、マスタリースタイマをセットする。
【0109】
ステップ1120) マスタからのレプリケーション要求受付を開始する。当該処理は、文献3『Jim Gray et al., "The Recovery Manager of the System R Database Manager", Computing Surveys, Vol. 13, No.2, 1981.』及び文献4『David K. Gifford, "Weighted Voting for Replicated Data", Proc of SIGOPS, pp. 150-162, 1979.』に示される処理を行うものとする。
【0110】
ステップ1130) マスタリースタイマがタイムアウトした場合はステップ1140に移行する。
【0111】
ステップ1140) マスタからのレプリケーション要求の受付を閉塞し、ステップ1010に移行する。当該処理は上記の文献3,4と同様の処理を行うものとする。
【0112】
次に、図8のステップ1100,図10の2130におけるクライアントからの要求受付の閉塞処理について説明する。
【0113】
図16は、本発明の一実施の形態におけるクライアントからの要求受付閉塞処理(S1100,S2130)のフローチャートである。
【0114】
ステップ3010) 要求処理部306は、クライアントからの要求受付プロセスを停止する。
【0115】
ステップ3020) 全てのクライアントの監視プロセスを停止する。
【0116】
ステップ3030) 全てのセッション情報を削除する。
【0117】
次に、前述の図9のステップ5070及び図10のステップ2170のセッション削除処理について説明する。
【0118】
図17は、本発明の一実施の形態におけるセッション削除処理(S5070、S2170)のフローチャートである。
【0119】
ステップ4010) セッション管理部303は、セッション一覧記憶部304のセッション一覧からセッションIDに関連するキューを全て取得する。
【0120】
ステップ4020) セッション管理部303は、取得されたキュー全てに対して、紛失防止キュー操作として、以下の図18に示す処理により自動アンマーク操作を行う。
【0121】
図18は、本発明の一実施の形態における自動アンマーク操作(S4020)のフローチャートである。
【0122】
ステップ16010) セッション管理部303は、ステップ4010で取得したセッションIDに基づいて、セッション一覧記憶部304からキューの先頭レコードを取得する。
【0123】
ステップ16020) 当該レコードのセッションIDが、ステップ4010で取得したセッションIDである場合は、ステップ16030に移行し、そうでない場合はステップ16040に移行する。
【0124】
ステップ16030) 取得したレコードのセッションIDをnull(空欄)とする。
【0125】
ステップ16040) 次のレコードがセッション一覧記憶部304のセッション一覧に存在する場合はステップ16050に移行し、存在しない場合は当該処理を終了する。
【0126】
ステップ16050) 現在のレコードの次のレコードをセッション一覧記憶部304から取得し、ステップ16020に移行する。
【0127】
上記の一連のフローチャートにおいて、図8のステップ1010〜1100では、多数決プロトコルPaxosによるマスタ選出を行うことにより、マスタは常に1台であることが保証される。これにより、ネットワーク故障によるネットワーク分断状態(Split Brain状態)になっても、システムが管理しているキューのデータ構造が複数のマスタによって更新されることなないため、キューのデータ構造の整合性を維持することができる。
【0128】
また、マスタ故障によってマスタが存在しなくなった場合にも、このマスタに代わる次のマスタを選出する機能が含まれているため、新しいマスタが動作を引き継ぐことができる。
【0129】
マスタが動作を引き継ぐ場合は、図8のステップ1070及び図10のフローチャートに示す処理を行う。ここでは、サーバがマスタでない状態からマスタとなった契機において、マスタとして動作を開始するために必要な処理を行っている。
【0130】
新しくマスタとなったロックサーバ300は、図10のステップ2100〜ステップ2120によって予め復元されていた図4、図5、図6及び図7に示すクライアントから再接続処理(ステップ107)によって、有効なセッションの確認を行う。これにより、キュー内のデータの仕掛かり中(図6(B)マーク済)状態が正当であること(=マークされているが、マークしているセッションが存在しない状態となっているキュー内のレコード)を確認し、サーバ故障状態及びネットワーク故障状態からの復帰を行う。
【0131】
このとき、前述の非特許文献1のように、データ変更が仕掛り中であることを示すためにトランザクションを用いるのでは、トランザクションの途中の状態を復元(レプリケーション)しなければならない。しかし、トランザクションの途中状態(各種データに対する全てのロック状態)を汎用的に復元していたのでは性能向上は難しい。そこで、本発明では、図6(B),図14、図15にあるように、トランザクションの途中状態を「マーク状態」として、キュー内の一つにエントリに限るものとして限定することにより、途中状態の復元を容易にした。これによって、キュー内に対する操作の途中状態を復元することが可能となる。図6(B)、図14、図15の詳細については上記のフローチャートのステップ14010〜14040、ステップ1510,1520に示すとおりである。
【0132】
さらに、図10のステップ2140〜2170、図17、図18に示す処理を行うことにより、クライアント1が故障した場合に、セッション一覧のレコードにセッションIDが残っている場合には、自動的に当該セッションIDを空欄(null)とする自動アンマーク操作を行うことにより、ロックサーバ上のキュー内のエントリが残留することを防止すると共に、キューのトランザクション状態が導入されているシステムにおいて、当該状態を保持できる。
【0133】
また、マスタ交代に備えてデータを復元(レプリケーション)する処理は、上記のフローチャートの図10のステップ2070〜2080に示す。ここでの論理的な処理は図11から図15に示すとおりである。図11〜図15の処理の背後で、文献3と同様のアルゴリズムを用いてデータを永続化し、文献4と同様のアルゴリズムを用いてデータを復元している。これにより、サーバ故障及びネットワーク故障に由来するマスタ交代への対故障性を担保している。
【0134】
クライアント1は、セッションが正常な状態にあるときのみ(図7に示すステップ103〜105)、プッシュ・ポップ・デリート・マーク・アンマークのいずれかのキュー操作要求をマスタに送信し、マスタはクライアント1の操作要求に基づいて、図10に示すステップ2100〜2120のキュー操作を行う。図6(B)のデータ構造及び図11〜図15によってキューの操作を定義する。
【0135】
このように、キューに対してこれらのKey-Value形式の1レコードをキューの1エントリに対応させることにより、キューの論理的なデータ構造を実現する
なお、上記のロックサーバ300の処理をプログラムとして構築し、これらのコンピュータにインストールして実行させる、または、ネットワークを介して流通させることも可能である。
【0136】
また、構築されたプログラムをハードディスクや、フレキシブルディスク・CD−ROM等の可搬記憶媒体に格納し、コンピュータにインストールする、または、配布することが可能である。
【0137】
なお、本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【符号の説明】
【0138】
1 クライアント
10 クライアント端末
20 ワーカ
100 プライマリサーバ
200 バックアップサーバ
300 ロックサーバ
301 マスタ調整手段
302 マスタ管理部
303 セッション管理部
304 セッション一覧記憶部
305 削除待ちセッション一覧記憶部
306 要求処理部
307 レプリケーション手段、レプリケーション部
309 データベース
【特許請求の範囲】
【請求項1】
安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとし、該クライアントと該複数のロックサーバからなるメッセージキュー管理システムであって、
前記クライアントは、
全てのマスタ候補に対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行う手段と、
前記セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信する手段と、を有し、
前記ロックサーバは、
キュー及び該キューの情報を格納したデータベースと、
セッション情報を格納したセッション情報記憶手段と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段と、
前記マスタ調整手段の結果、マスタが交代した場合には、前記データベース内に予め複製されていたキューの情報及び前記クライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段と、
前記クライアントから前記接続要求受信後、該クライアントに対してセッションIDを送信し、前記セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理手段と、
前記クライアントが故障した場合は、前記セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段と、
を有することを特徴とするメッセージキュー管理システム。
【請求項2】
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
前記レプリケーション手段は、
前記自装置が以前マスタではなかった場合は、前記セッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、前記削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
前記クライアントからの再接続要求に対しては、前記削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じて前記データベース内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、
を含む請求項1記載のメッセージキュー管理システム。
【請求項3】
前記第2のセッション制御手段の前記要求処理手段は、
前記クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いて前記データベースのキューに対してプッシュ操作を行うプッシュ手段と、
前記クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいて前記データベースのキューについてポップ操作を行うポップ手段と、
前記クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いて前記データベースのキューについて削除操作を行う削除手段と、
前記クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、前記データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
前記クライアントからの要求が、キューに対する操作の途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、前記データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、
を含む請求項2記載のメッセージキュー管理システム。
【請求項4】
安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとするシステムにおけるロックサーバであって、
キュー及び該キューの情報を格納したデータベースと、
セッション情報を格納したセッション情報記憶手段と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段と、
前記マスタ調整手段の結果、マスタが交代した場合には、前記データベース内に予め複製されていたキューの情報及び前記クライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段と、
前記クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、前記セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理手段と、
前記クライアントが故障した場合は、前記セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段と、
を有することを特徴とするロックサーバ。
【請求項5】
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
前記レプリケーション手段は、
前記自装置が以前マスタではなかった場合は、前記セッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、前記削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
前記クライアントからの前記再接続要求に対しては、前記削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じて前記データベース内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、
を含む請求項4記載のロックサーバ。
【請求項6】
前記第2のセッション制御手段の前記要求処理手段は、
前記クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いて前記データベースのキューに対してプッシュ操作を行うプッシュ手段と、
前記クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいて前記データベースのキューについてポップ操作を行うポップ手段と、
前記クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いて前記データベースのキューについて削除操作を行う削除手段と、
前記クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、前記データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
前記クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、前記データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、
を含む請求項5記載のロックサーバ。
【請求項7】
安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとし、該複数のロックサーバのうちのいずれかをマスタとするメッセージキュー管理方法であって、
前記クライアントは、
全てのマスタ候補となる前記ロックサーバに対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行うステップと、
前記セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信するステップと、を行い、
前記ロックサーバは、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整ステップと、
前記マスタ調整ステップの結果、マスタが交代した場合には、データベース内に予め複製されていたキューの情報及び前記クライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーションステップと、
前記クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、前記セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理ステップと、
前記クライアントが故障した場合は、前記セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマークステップと、
を行うことを特徴とするメッセージキュー管理方法。
【請求項8】
前記レプリケーションステップにおいて、
前記自装置が以前マスタではなかった場合は、
セッション情報を格納したセッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、削除待ちのセッション情報を格納した削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、前記データベースの該セッションIDに該当するクライントが保持していたキューの途中状態を無効化する第1のセッション制御ステップと、
前記クライアントからの再接続要求に対しては、前記削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信し、
前記クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じて前記データベース内のキューに対する処理を行い、他の前記ロックサーバに送信する第2のセッション制御ステップと、
を含む請求項7記載のメッセージキュー管理方法。
【請求項9】
前記第2のセッション制御ステップにおいて、
前記クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いて前記データベースのキューに対してプッシュ操作を行い、
前記クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいて前記データベースのキューについてポップ操作を行い、
前記クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いて前記データベースのキューについて削除操作を行い、
前記クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、前記データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク操作を行い、
前記クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、前記データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク操作を行う、
請求項8記載のメッセージキュー管理方法。
【請求項10】
請求項4乃至6のいずれか1項に記載のロックサーバを構成する各手段としてコンピュータを機能させるためのメッセージキュー管理プログラム。
【請求項1】
安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとし、該クライアントと該複数のロックサーバからなるメッセージキュー管理システムであって、
前記クライアントは、
全てのマスタ候補に対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行う手段と、
前記セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信する手段と、を有し、
前記ロックサーバは、
キュー及び該キューの情報を格納したデータベースと、
セッション情報を格納したセッション情報記憶手段と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段と、
前記マスタ調整手段の結果、マスタが交代した場合には、前記データベース内に予め複製されていたキューの情報及び前記クライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段と、
前記クライアントから前記接続要求受信後、該クライアントに対してセッションIDを送信し、前記セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理手段と、
前記クライアントが故障した場合は、前記セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段と、
を有することを特徴とするメッセージキュー管理システム。
【請求項2】
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
前記レプリケーション手段は、
前記自装置が以前マスタではなかった場合は、前記セッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、前記削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
前記クライアントからの再接続要求に対しては、前記削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じて前記データベース内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、
を含む請求項1記載のメッセージキュー管理システム。
【請求項3】
前記第2のセッション制御手段の前記要求処理手段は、
前記クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いて前記データベースのキューに対してプッシュ操作を行うプッシュ手段と、
前記クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいて前記データベースのキューについてポップ操作を行うポップ手段と、
前記クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いて前記データベースのキューについて削除操作を行う削除手段と、
前記クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、前記データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
前記クライアントからの要求が、キューに対する操作の途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、前記データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、
を含む請求項2記載のメッセージキュー管理システム。
【請求項4】
安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとするシステムにおけるロックサーバであって、
キュー及び該キューの情報を格納したデータベースと、
セッション情報を格納したセッション情報記憶手段と、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整手段と、
前記マスタ調整手段の結果、マスタが交代した場合には、前記データベース内に予め複製されていたキューの情報及び前記クライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーション手段と、
前記クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、前記セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理手段と、
前記クライアントが故障した場合は、前記セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマーク手段と、
を有することを特徴とするロックサーバ。
【請求項5】
削除待ちのセッション情報を格納した削除待ちセッション記憶手段と、
を更に有し、
前記レプリケーション手段は、
前記自装置が以前マスタではなかった場合は、前記セッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、前記削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、該セッション情報記憶手段の該セッションIDを空欄として該セッション情報記憶手段を更新する第1のセッション制御手段と、
前記クライアントからの前記再接続要求に対しては、前記削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信する再接続要求処理手段と、該クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じて前記データベース内のキューに対する処理を行い、レプリカとして動作するロックサーバに送信する要求処理手段と、を含む第2のセッション制御手段と、
を含む請求項4記載のロックサーバ。
【請求項6】
前記第2のセッション制御手段の前記要求処理手段は、
前記クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いて前記データベースのキューに対してプッシュ操作を行うプッシュ手段と、
前記クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいて前記データベースのキューについてポップ操作を行うポップ手段と、
前記クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いて前記データベースのキューについて削除操作を行う削除手段と、
前記クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、前記データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク手段と、
前記クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、前記データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク手段と、
を含む請求項5記載のロックサーバ。
【請求項7】
安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境での、複数のクライアント端末、複数のワーカ、プライマリサーバ、バックアップサーバ、マスタまたはレプリカの動作モードを有する複数のロックサーバを含む大規模分散処理システムにおいて、該クライアント端末、該ワーカ、該プライマリサーバ、該バックアップサーバをクライアントとし、該複数のロックサーバのうちのいずれかをマスタとするメッセージキュー管理方法であって、
前記クライアントは、
全てのマスタ候補となる前記ロックサーバに対して接続要求を送信し、該マスタ候補からセッションIDを取得し、該セッションIDに対するキュー操作要求を行うステップと、
前記セッションIDの送信元の該マスタ候補から所定の時間内にメッセージを受信できない場合には、全てのマスタ候補に該セッションIDを送信することにより再接続要求を送信するステップと、を行い、
前記ロックサーバは、
マスタは常に一台であることを保証する多数決プロトコルであるPaxosを用いて自装置がマスタか否かを判定するマスタ調整ステップと、
前記マスタ調整ステップの結果、マスタが交代した場合には、データベース内に予め複製されていたキューの情報及び前記クライアントからの再接続要求によって有効なセッションの確認を行い、キューに対する操作の途中状態を復元し、自装置がマスタになれば非マスタにデータ複製を要求し、自装置がマスタでなければマスタからのデータ復元要求に応じて、自装置内にデータを複製するレプリケーションステップと、
前記クライアントから接続要求受信後、該クライアントに対してセッションIDを送信し、前記セッション情報記憶手段に該クライアントの情報と共にセッションIDを格納するセッション管理ステップと、
前記クライアントが故障した場合は、前記セッション情報記憶手段からセッションIDに対応する全てのキューを取得し、該全てのキューのレコードにセッションIDが存在する場合は、該セッションIDを空欄として該セッション情報記憶手段を更新する自動アンマークステップと、
を行うことを特徴とするメッセージキュー管理方法。
【請求項8】
前記レプリケーションステップにおいて、
前記自装置が以前マスタではなかった場合は、
セッション情報を格納したセッション情報記憶手段からマスタ交代前のセッション情報を読み込んで、削除待ちのセッション情報を格納した削除待ちセッション記憶手段に格納し、該セッション情報記憶手段のセッション情報を削除し、所定の時間が経過後、該削除待ちセッション記憶手段にセッションがある場合には、該削除待ちセッション記憶手段からセッションIDを取得し、前記データベースの該セッションIDに該当するクライントが保持していたキューの途中状態を無効化する第1のセッション制御ステップと、
前記クライアントからの再接続要求に対しては、前記削除待ちセッション情報記憶手段から該再接続要求に該当するセッションIDを削除し、該セッションIDを該セッション情報記憶手段に追加し、該セッションIDを該クライアントに送信し、
前記クライアントからの要求が該接続要求及び該再接続要求以外であれば、要求内容に応じて前記データベース内のキューに対する処理を行い、他の前記ロックサーバに送信する第2のセッション制御ステップと、
を含む請求項7記載のメッセージキュー管理方法。
【請求項9】
前記第2のセッション制御ステップにおいて、
前記クライアントからの要求がキューのプッシュ操作要求である場合は、取得したキューID、キー、及びキー値を用いて前記データベースのキューに対してプッシュ操作を行い、
前記クライアントからの要求がキューのポップ操作要求である場合は、取得したキューIDに基づいて前記データベースのキューについてポップ操作を行い、
前記クライアントからの要求が削除要求である場合は、取得したキューID、キーを用いて前記データベースのキューについて削除操作を行い、
前記クライアントからの要求が、キューに対する操作の途中状態の復元のための要求であるマーク要求である場合は、キューIDとセッションIDを取得し、前記データベースから該キューIDに該当するキューの先頭レコードを取得し、該レコードにセッションIDが設定されていなければ、取得した該セッションIDを設定するマーク操作を行い、
前記クライアントからの要求が、キューに対する途中状態を復元しない要求であるアンマーク要求である場合は、キューIDとキーを取得し、前記データベースから該キューIDに該当するレコード一覧から該キーに対応するレコードを取得して、該レコードのセッションIDを削除するアンマーク操作を行う、
請求項8記載のメッセージキュー管理方法。
【請求項10】
請求項4乃至6のいずれか1項に記載のロックサーバを構成する各手段としてコンピュータを機能させるためのメッセージキュー管理プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【公開番号】特開2011−210107(P2011−210107A)
【公開日】平成23年10月20日(2011.10.20)
【国際特許分類】
【出願番号】特願2010−78784(P2010−78784)
【出願日】平成22年3月30日(2010.3.30)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】
【公開日】平成23年10月20日(2011.10.20)
【国際特許分類】
【出願日】平成22年3月30日(2010.3.30)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】
[ Back to top ]