ROBOT PAYMENT TECH-BLOG

株式会社ROBOT PAYMENTのテックブログです

Redashのバージョンアップ

こんにちは、株式会社ROBOT PAYMENT(以下、ロボペイ)で請求管理ロボのCREを担当している山下です。
今までCREについていくつか記事を書いてきましたが、その中の以下の記事で触れたRedashについて、最新のバージョンへアップデートした話をしようと思います

tech.robotpayment.co.jp

古いインスタンスからDockerベースへ

ロボペイではずっとシステムのみでRedashを利用していたのですが、バージョン自体はずっとV7で止まっていました。
と言うのも今までは、Dockerを使用しない古いインスタンスを利用しており、
V8からDockerベースのみがサポートされEC2インスタンス自体の切り替えが必要となったからです。 アップデートの方法が変わるため、手間やリスクがあり今までなかなか手を出せなかったと言う経緯がありました。
(今までのアップデートhttps://redash.io/help/open-source/admin-guide/how-to-upgrade-legacy

カスタマーサクセスがRedashを利用できるようにしてから、バージョンを上げることで権限グループの設定が画面からできるようになるなど、メリットが大きくなったため重い腰を上げて取り組むことになりました。
流れとしては、①V8のDockerベースのAMIを使用してEC2インスタンスを起動し、
その後②DockerのイメージにV10のイメージを指定して起動することで完了すると言う流れです。
※RedashのホームページからダウンロードできるAMIがV8対応のみのためV8→V10の手順としています。

①の流れ自体は以下を参考にしました。
blog.fire-sign.info

これ自体は比較的にスムーズに行えました。
注意する点としては、dumpの置く場所くらいだと思います。

さて、V8へのアップデートが思ったよりもスムーズに進んだので良かったのですが、 大変だったのはv10へのアップデートでした。

メモリの問題

V8にアップデートをして、このままV10へのアップデートと思ったのですがスムーズには行きませんでした。
V10へのバージョンアップ作業自体は以下の公式ドキュメントを参考にしています。 https://github.com/getredash/redash/blob/release/10.0.x/CHANGELOG.md#upgrading

いざDockerイメージを変更し作業を進めて行ったのですが、
Dockerが落ちて立ち上がらなくなってしまったのです。
取り急ぎ復旧のために以下の作業を行いました。

  1. バックアップとしてAMIを取得(必然的に再起動されます)
  2. V10の要らないコンテナを削除
  3. V10アップデート作業で行ったこと(docker-compose.ymlの更新など)を変更前の状態に戻す
  4. V8としてコンテナを立ち上げ直す
  5. 再起動

結論のところ、失敗の原因はメモリ不足でした。 https://github.com/getredash/redash/issues/5620#issuecomment-944831433.
V10はV8に比べてかなりメモリ消費がかなり多いようで、メモリを上げる必要があると言うことでした。 まあ根本のメモリも少なかったようで、V8での運用でも重いクエリ起動時には落ちることがありました。
ということで、メモリ問題の解決のため、インスタンスタイプを「t2.small」から「t3.midium」という倍のインスタンスメモリを持つタイプに変更することにしました。

変更手順としては以下を参考にしています。 docs.aws.amazon.com

ボリューム容量(EBS)が足りていない問題

メモリのサイズを上げたことによってバージョンアップの障壁となる問題は解消したかに見えたのですが、
またまたRedashが落ちた。....

今まではメモリ容量の問題で落ちていたため、インスタンスを再起動してクエリの処理を止めれば復旧をしていました。
まだメモリが足りないのか?と思いながら、今回も同じように再起動をしようとしたところ、まさかのインスタンスが立ち上がらない。.....

どうしようかと色々調べたところで見つけたサイトが以下です。 nunubuff.com

ボリュームの容量、..... そんなことが、.....
なるほど!不要な中身を削除すればよいらしい!
では、記載の通りSSHで入ろうではないか!待てよ、入れない。
それもそのはずインスタンスが立ち上がっていないのですから。 詰んだ( ; ; )

もうEBSのボリュームの容量を上げるしかない!
と思いインスタンスのルートボリュームの容量を5GiBから20GiBにあげました。
さあ大丈夫だろう!それでもインスタンスが立ち上がらない( ; ; )

どうもボリュームサイズを上げても、パーティションが存在するらしく、上げた容量を全部使ってくれないらしい。......
そしてそのパーティションを拡張するにはSSHで入って処理をしなければいけない。..... docs.aws.amazon.com

つまり、インスタンスが立ち上がってくれないと何もできないーーーーと言うことでいよいよ詰んだ😇
と言うことで最終手段。SREに相談し以下の作業を行うことになりました。

  1. Redashのインスタンス(以下、インスタンスA)からルートボリュームをデタッチします。
  2. 新しく何もしないインスタンス(以下、インスタンスB)を立ち上げます。
  3. インスタンスBにインスタンスAからデタッチしたEBSボリュームをアタッチします。
  4. インスタンスBにSSHで入り、3でアタッチしたボリュームをマウントします。
  5. マウントしたボリュームにアクセスし中身を掃除することで、ボリュームの空き容量を増やします。
  6. 対象のボリュームをインスタンスBからデタッチし、インスタンスAにルートボリュームとしてアタッチし直します。
  7. インスタンスAを再起動します。
  8. 正常に起動することを確認し、RedashのインスタンスにSSHで入りルートボリュームのパーディションを拡張

以上で無事復旧しました。
ボリュームもメモリも上げたと言うことで満を辞してV10にアップデートをし、今も落ちることなく稼働しています!

まとめ

右往左往し、V10までだいぶ時間が空いてしまいました。
V10にアップデートすることでできることもだいぶ増えたので、苦労した甲斐はあったかなと思っています笑

今回学んだことは、2つ、

  • 毎回の作業でAMIのバックアップイメージを作っておくのは本当に大事(これがなければ終わっていた)
  • インスタンスは無闇に再起動せずに原因を確認してから行ったほうがいいよ ですね。 V10アップデートでメモリ落ちした件も含めて、情報集めはすごく大事で、 ボリューム容量の件では原因がわかっていれば数十分で終わる作業でした。(反省)

せっかく頑張ってあげたので次回は、Redashのアップデートで良かったことなどを話していければと思います。



We are hiring!!

ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!

speakerdeck.com
www.robotpayment.co.jp
🎉twitter採用担当アカウント開設!🎉どんどん情報発信していきます!!