4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

kusanagi で hhvm が落ちた時、何が何でもリスタートする

Last updated at Posted at 2018-07-12

hhvm プロセスはあるけど http(s) 応答がないときの monit スクリプト

検証環境

  • Conoha で配っている kusanagi ディストリビューション(CentOS7)を使用
  • hhvm + apache + monit は同一サーバーに配置
  • /var/log/monit.log など kusanagi ディストリビューションの設定です
  • もうすでに WordPress などが稼働しているものとします
  • kusanagi 自身のインストール方法には触れません

起きている問題と解決する monit 設定ファイル

PHP 実行環境 hhvm で WordPress を 3 つ動かしたあたりからやたら hhvm が落ちだします。そういうのは想定済みたいで、kusanagi 標準添付の monit の hhvm.conf では hhvm の無応答またはプロセスが落ちたことを検出して再起動をかけくれます。しかし、時々次のような現象が起きます:

  • hhvm プロセスは残ったままで
  • hhvm のポート(9000/tcp)も開いたまま
  • でも apache 経由でアクセスすると一切応答がない
  • この状態で service hhvm stop するとやたら時間がかる
  • 一番ひどいときは 180 秒くらい
  • hhvm を再起動すると復活するつまり apache の問題ではない

以上、hhvm プロセスが残ったまま http(s) の応答がないケースにも対応させるために以下 hhvm.conf の置き換えで アプリケーション層 にて再起動を判断し、また、service hhvm stop にやたら時間がかかる現象にも対応します:

/etc/monit.d/hhvm.conf
check host heartbeathhvm with address heartbeat.selfnavi.com
    start program =   "/bin/systemctl start hhvm.service"
    stop program =    "/bin/systemctl stop hhvm.service" with timeout 360 seconds
    depends on httpd
    if failed
        port 80
        protocol http
        and request /
        with content = "It works!"
        with timeout 3 seconds
    then restart
    if 3 restarts within 3 cycles then unmonitor
    group hhvm

heartbeat.selfnavi.com は生死判定をするサイトで、同一サーバー内に設置してください。各自設置時はこの名前からは変更しなければなりませんが、この記事では heartbeat.selfnavi.com とします。 wget で It works! が出力されることを確認しときます。

/home/kusanagi/heartbeat/DocumentRoot/index.php
<?php
echo "It works!";
$ wget -qO - http://heartbeat.selfnavi.com
It works

以上でわかればここで終わり。もう少し詳しい説明が必要なら読み進めてください:

  • 生死判定をするサイトの設置
  • monit の設定
  • /etc/monit.d/hhvm.conf についての検証

生死判定をするサイトの設置

  1. kusanagi コマンドで apache の設定まで終わらせます
  • Webサイトで使用するホスト名(FQDN) はなんでも構わないのでご自身のものとしてください

  • 上記 FQDN は kusanagi により /etc/hosts に追記され、 127.0.0.1 を指すようになります

  • データベースを作らないと先に進んでくれませんので後でけします

kusanagi provision --lamp heartbeat

ターゲットディレクトリは /home/kusanagi/heartbeat に変更されました。

Webサイトで使用するホスト名(FQDN)を入力してください。 例) kusanagi.tokyo
heartbeat.selfnavi.com
Webサイトで使用するホスト名(FQDN)をもう一度入力してください。
heartbeat.selfnavi.com

Let's Encryptを使用される場合、Let's Encrypt の使用規約に同意される必要があります。
使用規約に同意される場合、あなたのメールアドレスを入力してください。同意されない場合、Enterキーを二回押してください。
使用規約は次のURLより確認できます: https://letsencrypt.org/repository/
[Enter]
メールアドレスを再入力してください。
[Enter]
データベース名を入力してください。
heartbeat
データベース名を再度入力してください。
heartbeat
heartbeat のユーザー名を入力してください。
heartbeat
heartbeat のユーザー名を再度入力してください。
heartbeat
データベースユーザ'heartbeat'のパスワードを入力してください。[a-zA-Z0-9.!#%+_-]の文字列が使用できます。最小は8文字以上です。
heartbeat
再度 'heartbeat' のパスワードを入力してください。
heartbeat
Job for nginx.service invalid.
heartbeat のプロビジョニングは完了しました。heartbeat.selfnavi.com にアクセスし、lampをインストールしてください!
完了しました。


2. kusanagi コマンドで作ってしまったデータベースを消します
 * `your_mysql_root_password` は、ご自身の mysql root パスワードに置き換えてください

    ```shell-session
$ mysql -uroot -pyour_mysql_root_password
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1847575
Server version: 10.0.29-MariaDB-wsrep MariaDB Server, wsrep_25.16.rc3fc46e
↵
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
↵
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
↵
MariaDB [(none)]> drop user 'heatbeat'@'localhost';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop database heatbeat;
Query OK, 0 rows affected (0.48 sec)
MariaDB [(none)]> exit
  1. 生きていると応答をする php スクリプトの配置

    /home/kusanagi/heartbeat/DocumentRoot/index.php
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?