Redash の複数台構成化その1(PostgreSQL を別インスタンスにする)

Redash はある程度スペックに余裕を持たせておけば、気を使わなくても1インスタンスで十分運用できるのが良いところではありますが、大量のデータを扱ったり、大量のクエリ実行を受け付けたりするような場合は、複数台での運用を考えたくなる時もあるでしょう。

この記事では、Redash の複数台構成について考えてみます。

前置き

この記事で紹介する方法は私個人の意見や考えに基づいて書いています。

業務上実績があったり、Redash が公式にこのような構成を推奨しているというものではないので、その点を踏まえてお読みください。

また、Redash を構成するミドルウェアなどについての説明は割愛します。

Redash の構成については、先日 Redash Meetup #2 で発表したスライドにも一部記載がありますので、必要に応じで参照してください。

speakerdeck.com

環境

この記事では Vagrant で構築した VM で動作検証しています。

  • Ubuntu 16.04
  • Redash 4.0.1
  • プライベート IP 192.168.33.10

また、この VM は新規に Redash をインストールしているため、既存環境からの移行については考慮していません(既存環境からの移行の場合に影響がありそうなところは適宜コメントをいれています)

PostgreSQL を別インスタンスにする

Redash を1台で運用する場合、クエリ結果を読み書きするため PostgreSQL の負荷が高くなりがちなので、PostgreSQL を別のインスタンスにすることで負荷分散が期待できるでしょう。

PostgreSQLインスタンスを Redash インスタンスから参照できるネットワーク内に配置し、Redash の設定を変えていきます。

PostgreSQL インスタンスの設定は割愛しますが、Redash インスタンスからアクセスできるようになっていることを前提とします。

  • プライベート IP 192.168.33.100
  • ユーザ名: redash
  • パスワード: redash
  • データベース名: redash

PostgreSQL のバージョンは デフォルトの Ubuntu 16.04 でインストールできる 9.5.13 としています。

設定を書き換える

/opt/redash/.env で定義されている REDASH_DATABASE_URL を、以下のように書き換えます。

export REDASH_DATABASE_URL="postgresql://redash:redash@192.168.33.100/redash"

テーブルを生成する

以下のコマンドで、 PostgreSQL インスタンス上にテーブルを作成します。

ubuntu@ubuntu-xenial:~/$ cd /opt/redash/current
ubuntu@ubuntu-xenial:/opt/redash/current$ ./bin/run ./manage.py database create_tables

これで Redash に必要なデータベースが準備できました。

Redash を再起動して、Redash にブラウザからアクセスすると、セットアップ画面が表示されるはずです。

セットアップが完了し、Redash にログインできるようになったら、Redash インスタンス上の PostgreSQL は停止しても問題ありません。

既存環境を使用する場合の注意点

既存の Redash の PostgreSQL を別インスタンスにする場合は、上記の手順で作業してしまうと、クエリなどをイチから作り直しになってしまいます。

この記事では紹介しませんが、既存環境を使用する場合はテーブル生成の代わりに、既存環境からのダンプ、PostgreSQL インスタンスでのリストアが必要になるため注意してください。

まとめ

Redash で使用する PostgreSQL を別インスタンスにする手順を紹介しました。

次回は Redis を別インスタンスにする手順を紹介します。