ConoHa VPSのハードウェア障害によるSSH接続不可・Webサイトアクセス不可の対処方法

はじめに

6月2日夜間にConoHa VPSにて障害が発生していました。

おそらくこの影響だと思うんですが、障害復旧後の2日日中頃にVPSサーバーの確認をしたところ、以下の状態になっていました。

  • VPSサーバーにSSH接続ができない(Connection refused
  • 管理画面のコンソールからは接続できる
  • VPSサーバー上のWebサイト(当ポートフォリオサイト)にアクセスできない
    • PC版Google Chrome:ERR_CONNECTION_CLOSED
    • スマホ版Google Chrome:ERR_ADDRESS_UNREACHABLE

また、当然ですがSSHの接続情報(ユーザーやキーなど)は変更していないし、ここ最近は当ポートフォリオサイトを新たにデプロイしたということもありません。

仕事で作成したWebサイトのVPSサーバーは収容サーバーが異なるため同じ事象は発生していません。

今回、なんとか復旧させることができたので、記事にしたいと思います。

前提

構成は以下のとおりです。

  • VPS:ConoHa VPS
  • OS:CentOS
  • Webサーバー:nginx
  • アプリケーションサーバ:Unicorn
  • デプロイ:Capistrano
  • Webアプリ:Ruby on Rails

対処

SSH接続不可

まず、ConoHaのVPS管理画面のコンソールからサーバーに接続します。

  • ユーザー名:root
  • パスワード:最初に設定したパスワード

SSH接続設定を確認します。

# vi /etc/ssh/sshd_config

# 公開鍵認証を許可
# #でコメントアウトされている場合は#を削除しコメントアウトを解除。
# noの場合はyesに
PubkeyAuthentication yes

# 公開鍵の場所を設定。たぶん初期値で大丈夫です。
AuthorizedKeysFile      .ssh/authorized_keys

# rootユーザーでのログインを禁止。
PermitRootLogin no

# パスワードログインを禁止。yesからnoへ変更
PasswordAuthentication no

# 使用ポート
Port 10022

特におかしな設定はありませんでした。

次にポート開放設定を確認します。

# vi /etc/sysconfig/iptables

# 下を削除
# -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# 下を追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT

こちらも特におかしな設定はありませんでした。

SSH接続設定におかしなところはなさそうです。次に考えられるのは、ハードウェア交換によりサービスがダウンしてしまった可能性があるので、サービス状態を確認します。

# service sshd status
# service iptables status

Active: active (running)と表示されているので、サービスは正常に稼働しているようです。

設定も状態も正常であることが確認できましたが、最後に念のためサービスを再起動します。

# service sshd restart
# service iptables restart

サービスを再起動したところ、SSH接続ができるようになりました。これでコンソールから接続する必要はなくなったので、ログアウトしてから閉じましょう。

Webサイトアクセス不可

SSH接続はできるようになりましたが、Webサイトはアクセス不可のままです。しかし、今まではVPSサーバーにすら接続できていませんでしたが、VPSサーバー上のWebサーバーが返すエラーに変わりました。

Webサーバーのアクセスログを確認します。

$ cd /var/www/sample/current/log
$ vi nginx.error.log

以下のエラーが出力されていました。

2020/06/02 21:08:37 [error] 954#0: *5 connect() to unix:/var/www/sample/current/tmp/sockets/.unicorn.sock failed (111: Connection refused) while connecting to upstream, client: 111.239.168.123, server: www.sample.com, request: "GET / HTTP/1.1", upstream: "http://unix:/var/www/sample/current/tmp/sockets/.unicorn.sock:/", host: "www.sample.com"

Unicornの状態がおかしそうです。デプロイコマンドを実行してUnicornの再起動を行います。

$ bundle exec cap production deploy

デプロイ中に以下のエラーが発生しました。

kill stderr: kill: sending signal to 29240 failed: そのようなプロセスはありません

Unicornの既存プロセスのkillに失敗したようです。既存プロセスのpidはファイルに残されているので、そのファイルを削除しておけばkillコマンドが実行されることはありません。

$ cd /var/www/sample/current/tmp/pids
$ rm unicorn.pid

もう一度デプロイコマンドを実行します。

$ bundle exec cap production deploy

今度はデプロイが成功しました。そして、Webサイトにもアクセスできるようになりました。

まとめ

Webサイトにアクセスできなくなったときは焦りましたが、なんとか復旧できてよかったです。

同様の事象に陥っている方の助けになれば幸いです。