「障害」という言葉、IT業界であれば誰しもが「ビクッ」っと反応する言葉だと思います。
今回はデータベースの障害に対する対策「レプリケーション」のお話です。
データベースって?
様々なデータを貯めておける箱のようなものです。
データベース自体のお仕事は、データを預かって、管理、効率よく取得ことです。
銀行でお金を預けますが、お金をデータだと思ってくれれば良いかと思います。
例えば、スケジュールだったり写真だったり。
障害って?
データベース自体がソフトウェアなので、バグということもありえますが
接続されてる回線がなんらかの理由で切れてしまったり、
電源が落ちてデータベース自体が利用できなくなることなどが上げられます。
また、先の大震災のようなことが起こり、データベースが動いているマシンが
津波に流されてしまうなどして、利用できなくなる場合も大いに考えられます。
最近だとゲリラ豪雨で水没する。。。と言ったこともあるので
マシンが水没する。。。というパターンもあったりするのかなと。
※通常であれば水没するようなところにマシンは置いておかないと思いますが(^_^;)
データベースに障害が起こるとどうなっちゃうの?
当然ですが通常どおりの利用が難しくなります。
銀行が利用できなくなったことを考えてみてください。
預入はもちろんのこと現金の引き出しなどができなくなり、生活に支障をきたします。
また商取引でも大変な損害をこうむることは容易に想像できるかと思います。
実際にはデータベースを利用していたシステムが稼働できなくなります。
例えば普段使用しているWebサービスだったりオンラインでのお買い物だったり。
すごく困りますよね。
障害に備えるとは?
ということでデータベースが止まるとすごく困ることになるわけですが
障害に備えるとはどういったことでしょう。
※もちろんデータベースだけではなくシステム構成要素一つでも止まったら困ります。
単純な対策ですが「予備のデータベースを容易しておく」というのがよくある対策かと思います。
同じ内容のデータベースを遠隔地などに用意しておくことで、もし使用していたデータベースが使用不可になった場合に
使用するデータベースを予備に切り替えることでシステムの運用を続けることが出来ます。
同じ場所に並べてマシンを用意する。。。ということで対策にはなるかと思いますが
震災などの対策としては遠隔地に予備を用意するのがベストかと思います。
そこでレプリケーション(ドヤァ
そこで出てくるのがMySQLの「レプリケーション」という機能です。
これは、データベースを2つ(2つ以上でも可能)用意して、
それぞれマスター、スレーブを呼びます。
マスターは、普段利用するデータベース
スレーブは、予備用のデータベース
となります。
マスターは普段のデータベース業務を淡々とこなしますが、
スレーブはマスターを監視し、データに更新があった場合、
すぐさまそれを自分(スレーブ)に適用します。
そうすることで、データベースの内容をまったく同じにしています。
もし、マスターになんらかの障害が発生した場合は
利用するデータベースをスレーブにすることで、システム運用を存続できるというわけです。
このレプリケーション、耐障害用だけではなく負荷分散でも利用できます。
例えば、
データベースの更新処理(挿入、修正、削除)をマスター側に
データベースの参照処理をスレーブ側に実施することで、
負荷を分散出来るというわけです。
まとめ
今回はデータベースとは?からレプリケーションまでを書いてみました。
耐障害という観点で言えば、OracleのRACのようなクラスタリング構成がより良いと思いますが
普段よく使うMySQLという視点で書いてみました。
次回は、実際にMySQLでレプリケーション構成を組んでみたいと思います。