Supervisor型の旧Redash(v4)をDocker型の新バージョン(v8)へアップグレードする
こんにちは。DA事業本部の春田です。
Supervisor型の旧版Redashサーバーをホストしている方はそれなりにいらっしゃるかと思いますが、version8以降から bin/upgrade
のサポートが廃止されているのはご存知ですか?( download_url
がありません!)
$ curl https://version.redash.io/api/releases | jq [ { "id": 39, "version": "8.0.0", "channel": "stable", "download_url": "", "backward_compatible": false, "released_at": "2019-10-27T00:00:00.000Z", "description": "See [CHANGELOG](https://github.com/getredash/redash/blob/master/CHANGELOG.md#v800---2019-10-27) for the full release notes.\n\n---\n\n* Before doing an upgrade, please make sure you have a backup.\n* If you have any issues, please refer to the troubleshooting section in the [upgrade guide](https://redash.io/help/open-source/admin-guide/how-to-upgrade).\n* If the upgrade guide doesn't help, you can ask for help on the [forum](https://discuss.redash.io/c/support/support-self-hosted).\n", "docker_image": "redash/redash:8.0.0.b32245" }, { "id": 37, "version": "7.0.0", "channel": "stable", "download_url": "https://s3.amazonaws.com/redash-releases/redash.7.0.0.b17535.tar.gz", "backward_compatible": false, "released_at": "2019-03-17T00:00:00.000Z", "description": "**Please read the following before upgrading:**\n\n1. If you're using the tarball deployment and not Docker, you might need to manually update some of the dependencies. Compare your current Python dependencies with the ones in the `requirements*.txt` files.\n\n2. This release adds encryption of your data sources configuration. By default it will use the `REDASH_COOKIE_SECRET` as encryption key. But we recommend setting a new key for it using the `REDASH_SECRET_KEY` environment variable. Note that you need to set this **before running migrations**. Otherwise everything will be encrypted with `REDSAH_COOKIE_SECRET`.\n\n---\n\n* Before doing an upgrade, please make sure you have a backup.\n* If you have any issues, please refer to the troubleshooting section in the upgrade guide:\n https://redash.io/help/open-source/admin-guide/how-to-upgrade\n* If the upgrade guide doesn't help, you can ask for help on the forum (https://discuss.redash.io).\n\nFull CHANGELOG for this release: https://github.com/getredash/redash/blob/master/CHANGELOG.md", "docker_image": "redash/redash:7.0.0.b18042" }, ... ]
すなわち、v8以降のバージョンにアップグレードするには、Docker型の新版Redashへ移行する必要があります。この作業にかなり手間がかかったので、本記事にログをまとめておきます。
準備と注意点
EC2でUbuntu16.04のRedash(v4.0.1)サーバーがある想定で進めます。移行先のDocker版Redash(v8.0.0)は、Ubuntu18.04を推奨しておりどのみちデータの移行も必要なので、新規にインスタンスを立てることにします。
注意点は、内部PostgreSQLのユーザーとデータベースがSupervisor型は redash
Docker型が postgres
と異なっている点です。調節は必要ですが、バージョンが同じであればテーブルやカラム自体に差異はありません。
また、アップグレードは1バージョンずつ行うことが推奨されているので、4.0.1 → 5.0.2 → 6.0.0 → 7.0.0 → 8.0.0というように段階を踏みながら行います。ちょっと面倒ですが、確実にいきたいところです。
Redashサーバーに固有の設定を加えていたり、DBを直接いじっていたり、純粋なRedashサーバーでない場合は、別途それらを反映させることもお忘れないように。
手順
- 現行のサーバーに入り、
redash pg_dump
でダンプファイルを作成 /opt/redash/.env
のREDASH_COOKIE_SECRET
を控えておく- Ubuntu18.04のAMIで、EC2インスタンスを新規立ち上げ
- getredash/setupから
v4.0.1.b4038
のDocker版Redashを立ち上げる - 立ち上がったコンテナ内のDBに入り、リストアに必要なユーザーやデータベースを作成
- dumpファイルからリストア
- 再度コンテナDBの中に入り、
redash
の所有権を変更し、postgres
と置き換える /opt/redash/env
を修正- 全てのコンテナを再起動して動作確認
- 問題なければ、docker-composeを使って1つずつバージョンを上げていく
- 4.0.1.b4038 -> 5.0.2.b5486 -> 6.0.0.b8537 -> 7.0.0.b18042 -> 8.0.0.b32245(latest)
ダンプファイルを作成
redashのメタデータのダンプファイルは、 redash pg_dump
コマンドによって作成できます。
$ sudo -u redash pg_dump -Fc redash > old_redeash.dump
環境ファイルにある、暗号化に使用しているシークレットキーも控えておきます。
$ vim /opt/redash/.env #### 以下を控えておく # REDASH_COOKIE_SECRET=**************************
新規インスタンス立ち上げ
Ubuntu18.04のAMIで、旧インスタンスと同じ設定で新規のインスタンスを立ち上げます。先に、後で使うPostgreSQLのクライアントをインストールしておきます。
$ sudo apt install postgresql-client zip -y
GitHubからRedashセットアップ用のリポジトリを落とし、 setup.sh
に修正を加えた後、実行します。スクリプトの修正では、バージョンの指定と、PostgreSQLクライアントからコンテナ内のDBへ接続するための、docker-compose.ymlへの追記を行っています。
$ git clone https://github.com/getredash/setup.git $ chmod +x setup/setup.sh $ vim setup/setup.sh #### 以下をL58とL63の下に追加 # LATEST_VERSION="4.0.1.b4038" # sed -i -e "44i \ \ \ \ ports:\n - \"5432:5432\"" docker-compose.yml #### $ ./setup/setup.sh
Dockerの設定
setup.sh
によるセットアップが完了した後、一旦DB以外のコンテナを全て停止させます。
$ cd /opt/redash $ sudo docker-compose stop server scheduler scheduled_worker adhoc_worker nginx redis
その後、 psql
でコンテナ内のDBに入り、redashのユーザーとデータベースを追加します。
$ sudo docker exec -it redash_postgres_1 psql -U postgres #### psql # CREATE USER redash; # CREATE DATABASE redash OWNER redash;
DBのリストア
先ほど作成した旧Redashサーバーのdumpファイルをscpなどで転送し、新RedashのPostgreSQLへリストアを行います。パスワードは環境ファイルの /opt/redash/env
の中です。
$ pg_restore -h localhost -U postgres -d postgres -cC -Fc old_redeash.dump
リストアが完了したら、ユーザーとデータベースの調節を行うために、再びコンテナの中に入ります。redashのDBやテーブルの所有権をpostgresに変更し、データベースを置換します。
$ sudo docker exec -it redash_postgres_1 psql -U postgres #### psql # ALTER DATABASE redash OWNER TO postgres; # SELECT 'ALTER TABLE ' || schemaname || '.' || tablename || ' OWNER TO postgres;' FROM pg_tables WHERE tableowner = 'redash'; -- 吐き出されたSQLを実行 # DROP DATABASE postgres; # ALTER DATABASE redash RENAME TO postgres;
次に、先ほど控えておいた旧環境のシークレットキーを、環境ファイルに追加します。旧環境から移行する場合、 REDASH_COOKIE_SECRET
と REDASH_SECRET_KEY
は同じ値になるそうです。
$ vim /opt/redash/env #### 以下を置換&実施 # REDASH_COOKIE_SECRET=************************** # REDASH_SECRET_KEY=**************************
コンテナを再起動し、動作確認を取ります。問題なければ、最後にdockerイメージを使って1つずつバージョンを上げていきましょう。
$ vim docker-compose.yml #### バージョンは一つずつ上げる # 4.0.1.b4038 -> 5.0.2.b5486 -> 6.0.0.b8537 -> 7.0.0.b18042 -> 8.0.0.b32245(latest) $ sudo docker-compose stop server scheduler scheduled_worker adhoc_worker $ sudo docker-compose run --rm server manage db upgrade $ sudo docker-compose up -d
今回はv4からアップグレードを行いましたが、dockerイメージとして配布されているv4以上のバージョンなら対応が可能です。v3以下のバージョンを使用している場合は、従来の bin/upgrade
の方法でバージョンをv4以上に上げてからDockerに移行しましょう。
redash/redash Tags - Docker Hub
最後に
かなり煩雑な手順でしたが、参考になれば幸いです。別インスタンスを立ち上げれば、現行の環境を汚さなくても新しいバージョンが試せるので、旧版をお使いの方は試してみてください!
参照
- How to Upgrade
- 旧Redash(V2) から 新Redash(V8) にアップデートを行いました
- 秘伝のredash v1.0.3 から redash v8.0.0 on ECSになるまで - KAYAC engineers' blog
- getredash/redash: Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.
- getredash/setup: Setup scripts for Redash Cloud Images