Active/Active構成のバッチサーバだって?

非機能要求上、性能も可用性も確保したいのだろう。バッチサーバが、サーバ2台のHA(High Availability)クラスタ構成で、“Active/Standby”ではなく“Active/Active”だという。
もう一度言おう、HAクラスタ構成だが“Active/Standby”ではない。これだけ聞いた時に、具体的に、どのような構成を思い浮かべるだろうか?


(ここ何年かアプリの人間である)自分の場合には、初めて聞いた時は、Oracle RAC(Real Application Clusters)のような構成を思い浮かべた。クラスタファイルシステム(あるいは他の仕組み)によって2台のサーバでディスクを共有するのだろう、と。
でも、どうも市販のクラスタソフトを使って、次の図のように構成されているっぽい(ファイル1とファイル2は、それぞれプロセス1とプロセス2が作成するイメージ)。ローカルディスク上には両方の構成がインストールされていて、通常時には(ソフトウェアだけ見ると)、1号機はActive/Standby、2号機はStandby/Activeなイメージ。

でもって、ハートビートなどで障害を検知したら、仮想IPアドレス(以下、VIP)をつけかえ、プロセスを上げなおし、ディスクをマウントしなおす。なるほど。

ちなみにフェールオーバ時、仕掛り中の処理は、なるたけきれいに終わらせてくれるのかもしれないが、(障害発生時だし)まぁ保証の限りではない。リランの設計は、アーキテクトにおまかせ。


そぅか。2台のサーバ間で、ファイルが共有できない*1構成なのね。業務アプリケーションを設計している人たちも、こういう構成をイメージしていてくれれば問題ないのだが。自分と同じように2台のサーバ間でファイルが共有できると思っているとしたら、こりゃやばいな。
ということは、ジョブネットを組む時には、次のようにジョブマネージャ側でVIP1とVIP2を指定して、分散しておかなければならないということか。1号機と2号機で依存関係のないプログラムを分散させておくのが安全っぽい。もっとも、プログラム間のデータ受け渡しを全てDBサーバで実施していれば、そんなことを気にしなくてもよいのだが(きっとそうなっているはず)。

同様に、外部システムとの接続がある場合にも、次のように接続先システムによってVIP1とVIP2を使い分けなければならない。バッチサーバ上でファイルをゴリゴリ操作するような処理があるならば、例えば接続先Aの処理は、VIP1(あるいはVIP2)を持つサーバによせないとダメだ。つまり、接続先にはVIP1への接続を依頼しておき、ジョブネットを組む時にも“明示的に”VIP1(あるいは、このVIPに紐づくホスト名)を指定しないとだ。

接続先が1つだったら悲しいw


この構成、某製品のマニュアルにものっていたから、よくあるのだろう。勉強になった。システム基盤屋さんへの道は、遠いなぁ。

*1:このSANだが、ドキュメントに“共有ストレージ”と書かれていて、NASと勘違いしている人が何人かいた(単にSANを知らないだけかもしれないが)。無理もない(かつては自分もそうだったし)。そのたび「SCSIで別の装置(あるいはLUN)つないでいるのと同じだからね。CIFS(SMB)もNFSもしゃべれないから、ファイル共有はできないからね」と言わなければならないが、頑張る。