やばいっす・・・
サイトにつながりません。
コンパネにもつながらなくなったのでどうすればいいのかわかりません。。。でもメールはつながるんですよ。どうすればいいでしょうか?
実は非常によくある問い合わせです。現象を確認し、何が原因か特定できれば解決にはさして難しい道のりではありません。
何が起きたのか確認する
今回のお客様は、Pleskコントロールパネルを導入していました。
まずはPleskにログインしようとしてアクセスしてみたら見たことのないエラーでログインできなかったということです。
最初に疑うべきはSSLとFail2Ban
慌ててもいいことがないことだけは明確に説明しておきます。
サイトにつながらない!コンパネにもつながらない!おそらくこの時点では何かしらの問題があってサーバーがダウンしているように見えるかもしれません。
となると、電源をONにして起動すれば…あるいは再起動すれば治るのではないか?という、Windows的な思考になるかもしれません。
もちろんだめだとは言いませんが、再起動したら、おかしかったもの以外、メールも送受信できなくなったというケースもありますので、再起動は最後の手段です。
お客様から問い合わせがあった時点で、私は就業時間となっていたため自宅にいました。
お電話をいただいて、現状を確認するためにPCを起動しなければいけません。
私がPCを起動している間に試してみてくださいといったのは、
もしかしたらSSL証明書がついていないだけかもしれませんので、例外を承認してアクセスできるか試してみてください。
です。
一番多いのはアクセスができなくなったのではなく、SSL証明書が期限切れや何かの拍子に外れてしまって、危険警告が出ている状態で、アクセスできなくなったような画面になることがあるからです。
よく見てみると詳細から例外を承認すればアクセスできますのでその場をしのぐためにも例外承認をしてまずはコンパネにつながるか確認することが第一歩だと思ったのでそれを指示しました。
そうこうしているうちに、WEBサイトについて、スマホで見たら見れるサイトがあるという情報が入ってきました。(結果的にこのサイトはWordPress等ではなくDBを使わないHTMLのみのサイトだったので閲覧できただけでした)
そうなると、特定の場所からの接続ができなくて、別の場所ならつながるということになりますので、これはFail2Banでお客様の接続している環境が一時的にロックされた可能性があります。
もしそうであればお客様と別環境で接続し、お客様の接続環境を一時的に開放してやれば解決します。
これは、私が自宅から行えばおそらく接続できるのですぐ解決します。
実際接続してみると…
お客様にSSL証明書の確認をしてもらっている間に私の方では、実際にPleskに接続をしてみようと試みました。
そうしたところ、エラー画面が出ていたのですが、ほとんどの場合見ることがないエラー画面でした。
簡単に言えば500エラー。いわゆるInternalServerErrorと言うやつです。
説明を見ると、MariaDBに接続できませんでしたとあります。
しかし、そのエラー画面を出しているのでWEBサーバーは動いているということです。
この時点で原因は特定できました。DBサーバーがダウンしています。
DBサーバーを起動すれば解決ですが、、、
原因はわかりましたから、DBサーバーを起動すればそれで解決です。
しかしながら現状ではPleskにつなげられないため起動するにしてもSSHで接続でもして起動コマンドをたたかなければいけないのですが、そのSSHはポートを締めているため、SSHで接続できません。さてどうしましょう。。。
今回のお客様のマシンはVPSサーバーをレンタルしているものでしたので業者からマシン操作のコンパネが提供されています。
このコンパネは、Pleskとは違い、もう一段上のレイヤーの電源管理や、マシンにモニタをつないだようにSSHではなくコンソール画面を提供してくれています。
結論でいえば、極端な話がマシンを再起動すればいったんシャットダウンを行い起動するので、おそらくそのままDBサーバーの起動コマンドも叩いてくれそうです。
しかし、この時点で何がわかっていないかというと、【なぜ落ちたのか】がわかっていません。
先述のように、もし、ディスクスペースが100%使い切っている状態の場合、ダウンがDBサーバーにとどまらず、WEBサーバーやメールサーバーのダウンにもつながるためディスクスペースの空きだけは確認したいところです。今回の業者は、ディスクスペースの使用量も提供パネルで確認できましたのでスペースを使い切ったことによるダウンではないことはわかっていました。
しかし、今回は、業者からターミナルも提供されているので再起動前に状況を確認してみることにしました。
まずはdfコマンドでディスクスペースの確認。使用量は37%程度で数百GBの空きがあるので、スペースの問題でダウンしたのではないことは確認できました。
負荷状況等もログ等を確認していけばわかるのですが、一旦Pleskにつなげたほうがグラフィカルな画面で確認もできるのでとりあえずDBの起動からPleskへの接続を目指すことにしました。
単純にDBサーバーが落ちていただけだったので起動後即Pleskに接続ができました。
その後Pleskから負荷状況を確認するとDBが落ちた時間にメールサーバーの負荷が急激に上がっていました。
お客様に確認したところ、その時間に数千人にメールを一斉送信したそうで、どうやらそのタイミングが間が悪いタイミングで、たまたまDBがダウンしてしまったようでした。
ようは、不正なアタックなどではなさそうだということがわかりました。
DBサーバーは、起動状態でいえばどのサーバーより弱いイメージがあります。
DBサーバーの実態は複数のファイルの組み合わせで情報を網羅し読み書きしているので、ディスクのw/rがパフォーマンスに影響しますし、インデックスやキャッシュを作ればメモリに影響します。
メールも、ディスクやメモリに依存するサービスなので、たまたま被ってメモリがハングしたりディスクの読み書きが遅延し結果弱いDBがダウンしたとしてもおかしくはありませんから、今回はそんなケースだったのではないかと推測されます。
不正アタックの可能性があったら
もし、トラブルが不正アタックなどによる可能性がありそうな場合は、Pleskに接続できるところまで行ったらいったんすぐ、FireWallでPleskへの接続は自分が今使っているIPのみなどの制限をかけたうえで、Plesk以外のサービスはすべてファイアウォールで閉めてしまいます。
そうすることでいったん外部からの接続を拒否したうえで、ゆっくりログを漁るなどして不正アタックの痕跡であったり、アタック元を特定して閉めたりすることで対応します。
まとめ~慌てず冷静に~
サイトにつながらなくなった、コンパネにつながらなくなった。
そんなトラブルが起きると、焦りますよね。
自分のPCだったらとりあえずいったん再起動してみようかな見たいな動きになるので、Linuxでもそうしてしまうケースはあります。
しかし、本記事でまとめたように、再起動は最後の手段であり、できれば再起動せずに原因を特定し復旧を目指すほうがより安全で被害が拡大しないケースが多いのです。
Windowsでも固まった・ハングしたという状態で再起動を強行すると、セーフモードで立ち上がったり、下手をしたらBitLockerのパスワード(数十桁)を打ち込まないと次に進めなくなったりして、初期化しないとどうにもならなくなるケースだってあります。
それらを踏まえたうえで冷静に、何が起きたのか、このサーバーにダウンまえに何を行ったのか(メールの送受信を大量に行ったとか、たくさんの写真データをアップロードしたとか)を1日程度さかのぼって考えるだけでも原因になりそうな作業がピックアップできるかもしれません。
そうすることでより可能性を絞りながら被害を最小限に復旧させることができるかもしれません。
ちなみに、ロリポやさくら、GMOなどのレンタルサーバーは、サーバーの安定運用にたくさんの人員を割いていますから、そう簡単にダウンしませんし、こういうことを気にしなくても動き続けてくれます。
そのための料金です。あの価格であれだけの高稼働率ですから。安心安定低コストでありがたい時代になりましたね。