Herokuで Redis / Postgres を運用していると、定期的にメンテナンスを求められることがあるのでそのあたりのメモ。
メンテナンスの影響について
メンテナンスは大抵元と変わりなく動作することが多いが、メンテナンスの前後で以下のような現象が生じることがある。
- DB/Redis の接続情報が変わることがある?
- DBについてはバックアップのスケジューラ設定が飛ぶことがある?
まれに…というレベルのものなので、障害なのか、どうなのかわからないが、接続情報に関しては変わった瞬間障害になるレベルなので、しっかり環境変数からパースするようにしておきたい。
スケジューラの設定について
Premium
以上のプランでは、メンテナンスを指定の曜日・時間で行うよう設定することが可能なので、コレを利用しておくと休日にメンテが走って…といったトラブルを未然に防ぐことが出来る模様。
Heroku Postgres の設定
メンテナンス情報を参照する
$ heroku pg:info
Plan: Standard 4
Status: Available
Data Size: 26.1 MB
...
Maintenance: required by 2014-02-01 00:00:00 +0000
メンテナンス時間を設定する。
$ heroku pg:maintenance:window DATABASE "Sunday 14:30"
メンテナンスコマンドについて
$ heroku pg:maintenance -h
Usage: heroku pg:maintenance <info|run|window> <DATABASE>
manage maintenance for <DATABASE>
info # show current maintenance information
run # start maintenance
-f, --force # run pg:maintenance without entering application maintenance mode
window="<window>" # set weekly UTC maintenance window for DATABASE
# eg: `heroku pg:maintenance window="Sunday 14:30"`
DATABASE の項目にはDATABASE名が入る。デフォルトはDATABASE
Config に入ってくる xxxxx_URL
のxxxxx
の部分がDATABASE名になるので、
例えば HEROKU_POSTGRESQL_GREEN_URL
などの Config が入っている場合には
$ heroku pg:info HEROKU_POSTGRESQL_GREEN
としてやれば良い
Heroku Redis の設定
メンテナンス情報を参照する。
$ heroku redis:info
=== redis-softly-4514 (REDIS_URL)
Plan: Premium 7
Status: available
...
Maintenance: required by 2016-02-01 00:00:00 +0000
メンテナンス時間を設定する。
$ heroku redis:maintenance --window="Sunday 14:30"
ドキュメントでは plugin のインストールが必要と書かれているが、現在はcoreに組み込まれている様なので不要っぽい。
postgres と違って window
がoptionとなっており--
が必要。
ナゼこういう仕様なのかはわからないが、合わせて作業していると詰んだりするので注意。