サーバーダウン
10月16日にウェブマーケットのサーバーがダウンしました。ご不便をおかけした方もあるかと思います。申し訳ありませんでした。
今日は、ウェブマーケットのサーバーダウンとその時に行ったリカバリーについてお話ししたいと思います。今回は、少し技術的なお話になります。
16日の朝7時ごろに店長から私の携帯に「ウェブマーケットのサーバーが落ちているようだ。」との連絡がありました。まず、状況の把握のため、自宅のPCから、ウェブマーケットのサーバーをチェックしてみると確かに反応がありません。そこで、サーバーを設置している場所に移動して状況の確認とリカバリー操作をすることにしました。サーバー設置場所まで自宅から車で約30分です。
ここで、ウェブマーケットのサーバー構成について少しお話しておきたいとおもいます。ウェブマーケットでは、サーバーのメンテナンスと万一ダウンした時に素早くリカバリーをするためにホストマシン上の仮想サーバーとして各種サーバー群を運用しています。十分な能力をもつホストマシン (CentOS 7)上にKVMをつかった仮想サーバーを設置しています。また、ホストマシンは2台準備して、一方のホストマシンに異常が起きたときのバックアップとなるようにしています。
さて、設置場所についてウェブマーケットの仮想サーバーのホストマシンをしらべてみると、いわゆる「暴走状態」になっています。原因はいろいろ考えられますが、リセットすると正常になることが多いので、まずはホストマシンのリセットをしました。残念ながら、リセットでは、正常化しませんでした。
そこで、ウェブマーケットの仮想サーバーを別のホストマシンに移行して動作させることにしました。先にも書きましたが、ウェブマーケットのホストマシンは2台あり、仮想サーバーはホストマシンからはデータファイルとして扱うことができます。つまり、ウェブマーケットの仮想サーバーのデータを別のホストマシンにコピーして実行すれば、ウェブマーケットのサーバーは復活することができます。また、このような事態に備えて、仮想サーバーイメージは、毎日、バックアップしています。しかしながら、バックアップファイルを使う前に、ホストマシンにあるイメージファイルの取り出しを考えました。
CentOSのインストールDVDでホストマシンを起動することでSSDの状態を確認することができます。いろいろと調べてみると、SSDからの起動ができないだけで、仮想サーバーのデータ自体は無事のようでした。そこでHDDを外付けして、イメージファイルをコピーし、その外付けHDDを正常に動作しているもう1台のホストマシンに接続してイメージファイルを移動すれば、ウェブマーケットのサーバーを動作させることができると考えました。
ここで2番目の悲劇がおきました。正常稼働しているサーバーをシャットダウンしウェブマーケットのイメージファイルをコピーした外付けHDDを接続しました。正常稼働していたホストマシンの電源を入れてもマシンが起動しません。最初に異常を起こしたホストマシンとは状況がやや異なり、こちらはブート段階で止まってしまいます。恐らくブートローダーがなんらかの原因で、この最悪のタイミングで壊れてしまったようです。ブートローダーを修復すれば、何とか起動できるかもしれないと考えて、別PCでインターネットから情報をさがしてみましたが、なかなかいいアイデアがありません。この時、私はかなり焦っていました。
ちょうどその時、店長から状況確認の電話がありました。焦っているときには最初に思いついたアイデアから離れることができません。それで、現状を報告するとともに、解決方法としてブートローダーだけを修復する方法について店長に相談しました。店長は少し考えてみると言って一旦電話をきりました。数分後、店長から素晴らしいアイデアがきました。「新しいSSDを使ってCentOSを新規にインストールし、仮想システム(KVM)をいれてから、イメージファイルと仮想サーバーの定義ファイルをコピーして動作させる。」というものです。
異常をおこしているSSDのブートローダーの修復するよりは、はるかにいいアイデアです。ウェブマーケットでは、マシン修理のための予備部品をほぼ1台分準備しています。当然、SSDも予備を持っています。そこで故障したSSDを取り出して、新しいSSDに交換後、ホストマシンにCentOS7をインストールしました。仮想サーバーを動作させるためにKVMもインストールして準備完了です。起動できなくなったSSDを接続してみるとデータ領域は認識できたので仮想サーバーのイメージファイルを新しいSSDにコピーしました。やはり、異常を起こしていたのは起動のための領域だけでデータ領域は無傷だったようです。こうしてウェブマーケットの仮想サーバーイメージを新しいSSDに取り出すことができました。もし、これが取り出せなくてもバックアップのイメージを使うことができますが、やはり、最新のデータを復活できる方がトラブルがありません。また、ほかの仮想サーバー群のイメージも同様にあたらしいSSDにコピーしました。仮想サーバー定義ファイルもコピーしました。後は、定義ファイルから仮想サーバーを再登録して完了です。
再定義コマンドいれると仮想サーバー群が何事もなかったかのように動作し始めました。これで、一安心です。しばらく様子をみて、安定して動作していることが分かったので、店長にサーバー復帰の連絡をいれて、今回の処理は完了しました。
今回のインシデントの直接の原因ははっきりしません。異常を起こしたSSDについてあらためて調べてみたのですが、これといった原因を特定することはできませんでした。
次に今回の経験に基づいてサーバー異常への対応策を考えました。今回、復帰に予想以上に時間がかかったのは、仮想サーバーイメージがOS本体と同じSSDにあったためです。そこで、OS本体とイメージをおくSSDを別のものにしました。もちろん、バックアップのドライブも別のものです。ホストマシンは従来通り2台準備しました。両ホストマシンのOS本体を格納しているSSDは、購入時期も機種も違うものを使いました。また、仮想サーバーのイメージをユニット交換の形で簡単に移動・接続できるようにしました。こうすることで、もし、ホストマシンがダウンするようなことがあってもダウンタイムをかなり短くすることができると思います。
次回は、また、気楽なお話ができれば思います。