oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

自分へのメモ

冗長化の難しさについてのメモ。

現在扱っているシステムのあるアプリケーションサーバ冗長化していて、
・実際に稼動している現用系
・プロセスまでは起動しているが処理は行わない待機系
で動作しており、

1.現用系に障害が発生する
2.現用系の監視プロセスが障害を検知する
3.待機系に通知、もしくは待機系が現用系の障害を検知する
4.待機系が現用系に切り替わる。現用系はなんらかの動作(プロセスダウン、サーバ再起動など)を起こす

という流れが行われるのが一般的だと思いますが、2番と3番の「障害を検知する」というのが一番難しいと思います。
良くあるHeartBeatの設定でも

・ネットワーク障害→どこまでをネットワーク障害にする?pingで監視?pingで何msまでにreplyが返ってきたら正常?そもそもどこにpingを送信する?GateWay?サーバ?ICMPは良いけど、TCPやアプリケーション層のプロトコルでの障害は?

・プロセスダウン→どうやってプロセスダウンと判定する?
Linuxだったらpsコマンドで検出されなかったら?じゃあ、psコマンドで検出はされるけど、フリーズみたいな状態になっていたら?
なんらかの処理を定期的にプロセスにやらせて、その結果をみる?じゃあ、なんらかの処理はどこまでやらせる?

とまあ考えたらキリがないですね。
必要なのはどこまでを保障してどこまでを切り捨てれるかを適切に判断出来る能力なのだと思います。
冗長性しかり、バックアップの範囲しかり。それはコストだったり、システムの重要性、ユーザ(顧客)の要求、など色々な要素が絡みますが。最高の構成は出来ないかも知れないけど、その時点の最善を判断出来るように勉強しなくては。