数年に一度はこういう話題やっているな。
夏の風物詩、サーバーが故障しました。
暑さでハードディスクがいかれた模様。
ただ、今回はいつもとちょっと違う。
ずっと昔から、サーバーは「外部向け」と「仕事の実験用」の2台使っている。
これを、4年前に仮想化している。
物理サーバーは2台。仮想サーバーも2台。
じゃぁ仮想化なんか必要ないじゃん、と言われそうだが、この仮想化は耐障害性を増すためのものなのだ。
仮想化したサーバーの「実態」はファイルに過ぎない。
2台の物理サーバー間で、定期的にファイルのコピーを行っておけば、障害時にもすぐに復旧できる。
…はずだった。
なにか様子がおかしい、と気づいたのは、今週頭の20日。
スマホで WiFi 接続しようとしても、IP アドレスがなかなか取得できない。
つまるところ、DHCP サーバーの動作がなんかおかしい。
DHCP サーバーは、家庭内向けの実験サーバーにおいてあった。
設定が悪いのかな? と見直してみる。
ところが、設定ファイルを読み込もうとするだけで、妙に重い。
ls をとっても重い。top を見るのも重い。
でも、とくに CPU を使っているプロセスは無い。
なのに、Load Average だけ 4 以上になっている。
どうしたことだ?
いろいろ試すが、どうもディスク関係の処理が重い。
I/O 待ちが増えて Load Average が増している感じか。
ディスク関連は、仮想化したサーバーと言うよりは、親サーバーの仕事だ。
親サーバーに接続して、仮想化マネージャを使ってみることにする。
(コマンドラインでいろいろやることも出来るが、仮想サーバーの負荷などをグラフで見たい)
仮想化マネージャを使いたいので、X window に接続したい。
Windows から Xming で接続…を試みるが、応答が無い。
おかしいな。たまにしか X 接続しないから、なにかおかしくなっているかな。
あらためて ssh で入り、X の設定ファイルを見直す。
もしかしてここが悪いのかな? というところを書き換えようとするが…
「ファイルが読み込み専用だ」と怒られる。
パーミッションを見ても、書き込めるはず。
念のためパーミッションを変えてみよう…が、「ファイルシステムが読み込み専用だ」と怒られる。
え? どういうこと?
ここにきて、やっとシステムログを見る。
8月18日に、ファイルシステムのエラーが起こって、破壊してしまわないように読み込み専用で再マウントされていた。
えーと、物理サーバーのディスクが読み込み専用だけど、その上で動いている仮想サーバーはディスクに書き込みが出来ている。
これってどういうこと?
…とりあえず、怖いので、最近仕事でいじったファイルを、問題のないサーバーにコピー。
万が一消えてもショックがないようにね。
仮想サーバーをシャットダウン。…これまた、妙に時間がかかる。
物理サーバーを再起動時に fsck したい。
そうするには、touch /forcefsck して…って、ファイルシステムが読み込み専用だから出来ない。
えーと、どうすればいいんだ?
tune2fs を使って、次回起動時に fsck がかかる設定にする。これは問題なく出来た。
そして、物理サーバーを再起動。
自動的に fsck がかかる。で、エラーを検出する。
「自動で直せるもんじゃないよ」って意味のメッセージが出て、自動的にシングルモードに移行。
fsckを手動で行ってね、って言われている。
fsck すると、でるわでるわ… 「修復して良い?」ってきかれるから、全部リターン(デフォルトが yes)。
で、ファイルシステムは直ったよ、といわれたので、再起動。
問題なくサーバーは起動した。仮想サーバーも動いている。
ここまでの作業で、20日は終了。
翌日21日は、仕事で外出。
外出先から自宅サーバーにリモートログインするが、やっぱりなにかおかしい感じがする。
22日、つまり昨日になって本格的に修復作業を開始する。
まず、仮想化したサーバーを、正常な物理サーバーに2台同居させよう。
…と、ファイルを転送するが、これがまた妙に遅い。
転送終了後にそのファイルで起動しようとしたところ、ファイルシステムが壊れている、と怒られた。
つまり、ファイルが壊れているのだ。
壊れた仮想サーバーは、当初は仮想ディスクを1台だけ作っていた。
しかし、様々な事情で、途中で2台目を増設した。
ここで、自分が大ポカをやっていたことに気づく。
増設した2台目をバックアップする設定を行っていなかった。
1台目ディスクのバックアップはある。
週1回、ファイルとして別の物理サーバーにコピーするとともに、自分自身の物理サーバー内でもコピーする。
そして、3世代残してある。つまり、1ヶ月前までは遡れる。
しかし、2台目ディスクにはこの設定をしていなかった。
まったくバックアップが無い。
困ったことに、「2台目ディスク」に /home ディレクトリを置いてあった。
つまり、最近の変更のほとんどは、2台目に入っている。
いろいろ試すと、「1台目」ディスクは、故障したらしい18日より前のものを使うことで起動可能だった。
変更はほとんど無いはずなので、これで OK 。
「2台目」は先に書いたとおり、ファイルシステムが壊れていると判断される。
ただし、コピーしなければ、現実的に(妙に遅いが)仮想化サーバーで起動できている。
ということは、ファイルシステムの「どこか」は壊れていても、ファイルの多くは読み出し可能だということだ。
ディスクイメージとして救出するのは諦め、tar を使ってファイルをバックアップすることにする。
これがまた、妙に時間がかかる。しかし考えは成功だった。
問題の無い物理サーバーで新たなディスクイメージを作り、そこに tar を解凍することでほぼ元通りの状況を作り出した。
tar がドットファイル(隠しファイル)をバックアップしてくれない、ということを忘れていたが、簡単に復旧できる範囲の問題だった。
これで、仮想化サーバーを正常な物理マシンに2台同居させたところで、22日は終了。
「ひとまずは」問題が回避されたことになる。
結構大変だったように見えるが、これでも仮想化のおかげでかなり楽になっている。
(仮想化前なら、データのバックアップを取って再インストールして、サーバーのプログラムインストールして…と、問題回避するまでだけで2日はかかったのだ)
さて、本日23日。復旧開始。
仮想化サーバーがいなくなって、負荷がかなり減ったはずの「おかしな物理サーバー」は、やはり時々妙に重くなる。
smartctl で S.M.A.R.T. 情報を見てみる。
ペンディングセクタが3つある、と言われる。それ以上はおかしくないようだ。
しかし妙に重い。ディスクアクセスは特に重い。
仮説は2つ。
1) ディスクが物理的におかしくなった。
2) Linux のファイルシステムとしてはかなり行かれているだけで、ディスクはそんなに悪くない。
ペンディングセクタ3つ、というのはそれほどひどいわけではないし、他に S.M.A.R.T. 情報に悪いところは無いので、仮説2のほうを疑ってみる。
というわけで、現在この日記を書いている後ろで(物理的に背後で)、サーバーを再インストール中。
…このインストールも妙に遅い気がするが、CentOS 6.3 のインストールは初めてだし、マシンは遅い atom なので、気のせいかもしれない。
インストール後には詳細がわかるだろうが、今日はもう時間切れかな…
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |