サービスをとめないために
2009年04月16日
私たちはお客様にシステムを提供させていただいています。
そのシステムを使ってお客様がビジネスを行います。
ということはシステムが動いている時間がお客様がビジネスをおこない、利益を生み出せる
時間というわけです。
例えば、ショッピングサイトを作ったとしたら、システムが動いている時間がお店が開いてい
る時間となります。
そう考えると、当然システムの動いている時間は長いほうがよい。
というよりむしろ止まっていてはいけないということになります。
では、どうしたらシステムを止まらないようにできるのでしょうか。
システムが止まってしまう要因はいろいろありますが、そのうちのひとつに、ハードウェアの
故障による停止があります。
機械は必ず壊れるものなので。壊れることは仕方が無いのですが、その代わり壊れたその
ときにサービスをとめない、もしくは止まってしまう時間を最小にする工夫をします。その工夫
のうちのひとつが冗長化です。
冗長というと、なにか回りくどい、だらだら長いなどマイナスのイメージのある言葉ですが、
ことITの世界においての冗長化とは、故障などのいざというときのために予備を用意する
などして耐障害性を高めた状態のことをいいます。
さて、冗長化と一口に言ってもシステムの規模、サービスの重要性などによって用いられる
いくつかの形態があります。
その1:パーツの冗長化
まずはパーツの冗長化です。
私たちが日々使っているパソコンは、おおむね ハードディスクは1つですし、CPUも1つ、
電源ユニットも1つです。
当然、普通に使う分にはそれで十分ですが、ハードディスクが壊れたらデータは消えて
しまいますし、 CPUや電源ユニットが壊れたらパソコンは起動しなくなってしまいます。
それでは困るので、止めたくないシステムにおいては、これを冗長化します。
ハードディスクが壊れてもデータがなくならないように複数のディスクに同じデータを
書き込んで、たとえひとつが故障してもデータがなくならないようにします。
CPUも複数用意し、もしそのうちひとつが故障した場合も、(処理速度は低下しますが)
サービスが止まらないようにします。
電源ユニットも複数用意することによって、片方の電源ユニットが故障してもサービスが
停止しないようにします。
その2:サーバー(ノード)の冗長化
しかしながらパーツを冗長化しても、マザーボードなど冗長化できない部分の故障の際
にはシステムは停止してしまいます。
そういったケースにおいてもサービスを止められない場合は、サーバー本体(ノードと
いったりします)を複数台用意し冗長化します。
このことをクラスタ構成と呼びます
ひとつのサービスを複数のノードで行いどこかのノードが故障した場合、故障していない
ノードでサービスを行ったり、動いているサーバーと同じものを常に用意しておき、故障の際
には予備に切り替えてサービス停止時間を最小に抑えるようにします。
その3:拠点の冗長化
サーバーを冗長化し、これで一安心と思っても、実はまだまだです。
日本は地震が多い国ですし、火事だって無いとはいえません、空から何かが降ってこない
とも限らないです。
そうなってくると、ひとつのビルにすべてを置いておいてはいざというときどうにもならなく
なってしまいます。
そこで、今度は拠点を冗長化します。
このことをディザスタリカバリといいます、いろいろと形態はありますが、データのコピーを
毎日トラックに載せて遠隔地に運ぶ形式もあれば、 関東と関西など遠隔地に同じような
機材を配置して、リアルタイムでデータをコピーし合うという形態もあります。
このようにいろいろな冗長化の形態があり、サービスを止めないためにいろいろな工夫が
されています。
いろいろと冗長化の話をさせていただきましたが、大規模システムを構築する際に使用さ
れるこれらの技術とほとんど同等のことが実はすべてフリーソフトで実現できてしまいます。
例えば、RAIDはLnuxに標準で含まれていますし。クラスタリングに関しても、Linux上で動作
するフリーのソフトウェア(LVS、KeepAlived、Heartbeatなど)を利用すれば実現できてしまい
ます。
実は雲の上の存在だった大規模システム(もどき)が自宅で手軽に構築できるのです、これ
を機に「自宅で作る冗長化システム」などをゴールデンウィークの自由研究の課題にしてみ
てはいかがでしょうか。
