半死半生

システム屋が恐れることとして、「半分死んでいる」というものがある。簡単にいえば、見た目は生きているのに実は死んでいるという状態のことだ。

システムを構築する場合、二重化を考えないSEはいないが、予算の制約やら、システムの重要度の低さから、二重化されないケースは多い。逆にいえば二重化されているシステムは、予算と重要性のハードルをクリアしているということだ。なので、二重化されているシステムがコケるとそれなりに大きなインパクトがある。

二重化の厄介なところは、一方が死んでいることをもう一方が判断するのが難しいところである。一般的にサーバーの二重化であれば、pingに応答するか、http要求に応答するか、クエリに応答するかといった判断基準を設けて、基準を満たさなければ死んだと見なしてサービスを死んでいない側に引き継ぐ。しかし、pingには応答するが実は死んでいる、httpには応答するが実は死んでいる、クエリには応答するが実は死んでいる、なんて恐ろしいことは当たり前のように発生するのだ。逆に、pingには応答しないが生きているといった、応答しないのに生きているのも怖い。

二重化というのは生き死にの判断が確実に行えることが前提の仕組みで、実は生き死にの判断は非常に難しいのだ。

近年はこの生き死にの判断が、仮想化によってより難しくなっている。仮想技術によってまるで生きているようにみえるが、実は死んでいる。仮想OSが見せてくれるストレージは生きているのに、物理ストレージは死んでいる、仮想NICは生きているのに物理NICは死んでいる等だ。

半死には簡単には再現できないので、テストができない。テストができないということは、切り替えが確実におこなえるという保証がないということだ。

今障害が発生したら、結構な確率で二重化かつ半死にだということは覚えておいたほうがいいだろう。半死にが発生した場合にどうやって復旧させるのかというのは、検証方法を含めて設計段階であらかじめ考えておくことが結構重要なんですよという話でした。