この記事はRedash Advent Calendar 2017の14日目の記事です。
この記事はAWS上に立てたRedashサーバを触りはじめたばかり私が、upgradeができなくて問題解決のために行ったことをまとめたものです。
Redashをずっと触っている方には必要ない情報かもしれませんが、Linux初心者だったりRedash触りたての方だとなかなか気づきにくいと思われる内容なので、そうした人に役立てば嬉しいです。
サーバを立ち上げる
まずはRedashサーバをAWS上で動かすため、公式AMIを利用して構築しました。
東京リージョンに作成したいのでap-northeast-1のAMIイメージを利用します。
なおこのAMIを利用したEC2インスタンス作成は通常のEC2インスタンス作成方法と同じ手順となるため、説明は割愛します。
EC2インスタンスを起動してしばらく待つと自動的にOSのパッケージがアップデートされます。そこでしばらく待ってからSSHログインし、下記の出力を確認できたらrebootさせましょう。
*** System restart required ***
upgradeが動かない
一度稼働を始めるとなかなかバージョンアップできなくなるので、本番稼働前に執筆時点の最新となる3.0.0b3134にバージョンアップしようとしました。
そこでupgrade以下コマンドで上げてみようとしたところ…
$ sudo /opt/redash/current/bin/upgrade
Starting Redash upgrade:
Found version: 3.0.0
Current version: 2.0.0+b2990
* Before doing an upgrade, please make sure you have a backup.
* If you have any issues, please refer to the troubleshooting section in the upgrade guide:
https://redash.io/help-onpremise/maintenance/how-to-upgrade-redash.html
* If the upgrade guide doesn't help, you can ask for help on the forum (https://discuss.redash.io).
Full CHANGELOG for this release: https://github.com/getredash/redash/blob/master/CHANGELOG.md
Continue with upgrade? (y/n): y ←ここでyを入力して実行
Downloading release tarball...
Unpacking to: redash.3.0.0.b3134...
Changing ownership to redash...
Linking .env file...
Installing new Python packages (if needed)...
Running migrations (if needed)...
Failed running: sudo -u redash bin/run ./manage.py db upgrade
Exit status: 1
Output:
(略)
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
$
ということで調査です。
原因調査
その1
エラーメッセージの中にAttributeError: 'module' object has no attribute 'SSL_ST_INIT'
という文言がありました。これに注目して調べてみるとここに書かれているように、PyOpenSSLのバージョンアップをしてあげればよさそうです。
まずは現在のバージョンを確認します。
$ pip list --format=legacy | grep pyOpenSSL
pyOpenSSL (0.14)
今のイメージにはpyOpenSSL 0.14が入っているようです。では 3.0.0 ではどのバージョンにする必要があるのかをrequirements_all_ds.txt
を見て調べます。
upgradeには失敗しましたが、ソースファイルは展開されているのでそれを利用します。
$ cd /opt/redash/redash.3.0.0.b3134
$ grep pyOpenSSL requirements*
requirements_all_ds.txt:pyOpenSSL==16.2.0
requirements_all_ds.txt:# other packages. To properly support it we probably need to switch from pyOpenSSL
$
現在入っている0.14ではなくて16.2以上が必要なようです。そこでpyOpenSSLをアップデートしましょう。
$ sudo pip install pyOpenSSL -U
(略)
Successfully installed cffi-1.11.2 cryptography-2.1.4 pyOpenSSL-17.5.0 six-1.11.0
$
これで改めてRedashをアップデートしてみます。
$ sudo /opt/redash/current/bin/upgrade
Starting Redash upgrade:
Found version: 3.0.0
Current version: 2.0.0+b2990
* Before doing an upgrade, please make sure you have a backup.
* If you have any issues, please refer to the troubleshooting section in the upgrade guide:
https://redash.io/help-onpremise/maintenance/how-to-upgrade-redash.html
* If the upgrade guide doesn't help, you can ask for help on the forum (https://discuss.redash.io).
Full CHANGELOG for this release: https://github.com/getredash/redash/blob/master/CHANGELOG.md
Continue with upgrade? (y/n): y ←yを入力
Downloading release tarball...
Unpacking to: redash.3.0.0.b3134...
Changing ownership to redash...
Linking .env file...
Installing new Python packages (if needed)...
Running migrations (if needed)...
Failed running: sudo -u redash bin/run ./manage.py db upgrade
Exit status: 1
Output:
[2017-12-13 09:13:04,419][PID:1545][INFO][root] Generating grammar tables from /usr/lib/python2.7/lib2to3/Grammar.txt
[2017-12-13 09:13:04,527][PID:1545][INFO][root] Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
Traceback (most recent call last):
(略)
ImportError: /usr/lib/python2.7/lib-dynload/_sqlite3.x86_64-linux-gnu.so: failed to map segment from shared object
$
ダメだー
しかもエラーの内容を見ると、先程のようなライブラリのバージョンの問題ではなさそうです。
その2
そういえばt2.micro使ったけどメモリどうなってるかな?
EC2インスタンスのタイプはみんな大好きt2.micro
を使ったのですが、このインスタンスにはメモリが1GBしかありません。
ということで、さっそくメモリの状態を見てみましょう。
$ free
total used free shared buff/cache available
Mem: 1014644 849896 74316 3168 90432 36728
Swap: 0 0 0
$
usedで80%以上使っていてfreeの値が小さすぎるので、メモリを増やしたほうがよさそうです。
ただ検証用のため速度は遅くても問題ないため、インスタンスサイズを上げずにswapを増やすことにしました。
ということで以下のようにして3GBのswapファイルを作成し、実メモリ1GBと合わせて合計4GBにしました。
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=3072
$ sudo chmod 600 /swapfile1
$ sudo mkswap /swapfile1
$ sudo swapon /swapfile1
$ swapon -s
Filename Type Size Used Priority
/swapfile1 file 3145724 0 -1
$
改めてメモリの空きを見てみます。
$ free
total used free shared buff/cache available
Mem: 1014644 853484 77404 3168 83756 36460
Swap: 3145724 0 3145724
#
先程はSwapのtotalは0でしたが、今は3145724に増えています。
次にswapが自動マウントされるように/etc/fstabに以下のように追記します。(2行目を追記)
追記後にインスタンスをrebootしましょう。
$ sudo vi /etc/fstab
↓↓これを追記↓↓
/swapfile1 swap swap defaults 0 0
$ sudo reboot
改めてやってみます。
$ sudo /opt/redash/current/bin/upgrade
Starting Redash upgrade:
Found version: 3.0.0
Current version: 2.0.0+b2990
* Before doing an upgrade, please make sure you have a backup.
* If you have any issues, please refer to the troubleshooting section in the upgrade guide:
https://redash.io/help-onpremise/maintenance/how-to-upgrade-redash.html
* If the upgrade guide doesn't help, you can ask for help on the forum (https://discuss.redash.io).
Full CHANGELOG for this release: https://github.com/getredash/redash/blob/master/CHANGELOG.md
Continue with upgrade? (y/n): y
Downloading release tarball...
Unpacking to: redash.3.0.0.b3134...
Changing ownership to redash...
Linking .env file...
Installing new Python packages (if needed)...
Running migrations (if needed)...
Linking to current version...
Restarting...
Done! Enjoy.
$
やったー!ようやくアップデートできたー!
ということで、無事アップデートすることができました。
今回Redashをはじめて触ったので気づかなかったのですが、今回利用したAMIはRedashを動かすのに必要なものが全て入っているので、そもそもt2.microのメモリ1GBでは足りなかったようです。
まとめ(得られた学び)
- 公式が配布しているRedashサーバのAMIを利用する場合、t2.microだとメモリが1GBしかないので足りないこと
- そのためt2.mediumくらいのインスタンスが望ましい。ただし規模による。
- 検証用だったらswapファイルを利用する手もあるが、速度が遅くなるので本番サーバとしては利用はしない方が吉(一般論ですが)
おまけ (2018/05/08追記)
この時バージョンアップしたものをさらに4.0.1にupgradeしました。
先にapt-get upgradeしてからおこなったためか、何のエラーもなくバージョンアップ完了…
$ sudo /opt/redash/current/bin/upgrade
Starting Redash upgrade:
Found version: 4.0.1
Current version: 3.0.0+b3134
* Before doing an upgrade, please make sure you have a backup.
* 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
* If the upgrade guide doesn't help, you can ask for help on the forum (https://discuss.redash.io).
Full CHANGELOG for this release: https://github.com/getredash/redash/blob/master/CHANGELOG.md
Continue with upgrade? (y/n): y ←yを入力
Downloading release tarball...
Unpacking to: redash.4.0.1.b4038...
Changing ownership to redash...
Linking .env file...
Installing new Python packages (if needed)...
Running migrations (if needed)...
Linking to current version...
Restarting... ←ここでしばらく待った
Done! Enjoy.
$
おわりに
当初はRedash導入直後に役立ちそうな小ネタを2,3書こうと思っていたのですが、upgradeの話だけで思っていたより長くなってしまったのでupgradeネタ1本にしました。
そして、イラストはこちらのものを利用させていただきました。この場を借りて御礼申し上げます。
http://www.chojugiga.com/2017/05/17/da2choju22_0013/
それでは、よいクリスマスを!