はじめに
6月2日夜間にConoHa VPSにて障害が発生していました。
おそらくこの影響だと思うんですが、障害復旧後の2日日中頃にVPSサーバーの確認をしたところ、以下の状態になっていました。
- VPSサーバーにSSH接続ができない(
Connection refused
) - 管理画面のコンソールからは接続できる
- VPSサーバー上のWebサイト(当ポートフォリオサイト)にアクセスできない
- PC版Google Chrome:
ERR_CONNECTION_CLOSED
- スマホ版Google Chrome:
ERR_ADDRESS_UNREACHABLE
- PC版Google Chrome:
また、当然ですが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サイトにアクセスできなくなったときは焦りましたが、なんとか復旧できてよかったです。
同様の事象に陥っている方の助けになれば幸いです。