Redash 1.0.1を3.0.0へアップグレードする

# 環境

Redash公式のamiを使ってv1.0.1のRedashを立ち上げていて、設定値を特に変えていない状態。

* 現環境
    * redash-1-0-1-b2833-us-east-1 (ami-9ea12788)
    * Ubuntu 16.04.2 LTS (Xenial Xerus)
    * Redash 1.0.1+b2833
* アップグレードしたバージョン
    * Redash 3.0.0+b3134


# アップグレード手順

[How to Upgrade Redash · Redash Help Center](https://redash.io/help-onpremise/maintenance/how-to-upgrade-redash.html)

公式に書かれているが、v1.0.0以降なので1コマンド実行するだけ。

```bash
cd /opt/redash/current
sudo bin/upgrade
```

１コマンドで終わると言っておきながら、アップグレード時、アップグレード後にいろいろエラーが起きたので以下に対応方法を書いておく。

# ◇ Redashまわりのエラー


## AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

upgradeスクリプトを叩いたときに出たエラー。
pyOpenSSLのバージョンが低いので上げる。

```bash
sudo pip install pyOpenSSL==16.2.0
```

## Failed running: sudo /etc/init.d/redash_supervisord restart

upgradeスクリプトの終わり際に出たエラー。
アップグレード自体は終わっているので再起動すればよいらしい。

[Upgrade failing with 'redash_supervisord: command not found' on AMI · Issue #1776 · getredash/redash](https://github.com/getredash/redash/issues/1776)

## AthenaがDataSourceの項目に出てこない

必要とされるライブラリが足りていないと項目に出てこないので入れる。

```bash
sudo pip install -r requirements.txt
sudo pip install -r requirements_all_ds.txt
```

ちなみにここでpyOpenSSLも一緒にインストールされるので、アップグレード前にこれを行った方がつまづく回数が減る。

# ◇ Redisまわりのエラー

Redisの起動時に出たエラー。
Redisの各種チューニングを行う。

参考：[Performance tips for Redis Cache Server – Tech and Me](https://www.techandme.se/performance-tips-for-redis-cache-server/)

## Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients in crease 'ulimit -n'.

関連エラーは以下のように3行使って書かれている。
ulimitとmaxclientsの問題のようなので、それぞれ修正する。

```text
# You requested maxclients of 10000 requiring at least 10032 max file descriptors.
# Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
# Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients in
crease 'ulimit -n'.
```

```text:/etc/security/limits.conf
*       soft    nofile  65535
*       hard    nofile  65535
root    soft    nofile  65535
root    soft    nofile  65535
```

```text:/etc/sysctl.conf
fs.file-max = 65535
```

```test:/etc/systemd/system/redis.service
[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
PIDFile=/var/run/redis/redis-server.pid
TimeoutStopSec=0
Restart=always
User=redis
Group=redis
LimitNOFILE=65535
```

```text:/etc/redis/redis.conf
maxclients 60000
```

## WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.


```text:/etc/rc.local
sysctl -w net.core.somaxconn=65535
```

## WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.



```text:/etc/sysctl.conf
vm.overcommit_memory = 1
```

## WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

```text:/etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
```

# ◇ 最後に

エラーの対処が終わった後インスタンスを再起動（各プロセスの再起動でもよい）をすれば、アップグレードされたRedashが立ち上げるはずです。
なぜか初回起動にはとても時間がかかって、アクセスしてもTime outになったりもしましたが、待っていれば表示されるようになるはずです。

[redash/CHANGELOG.md at master · getredash/redash](https://github.com/getredash/redash/blob/master/CHANGELOG.md)

v3.0.0はproxyなしでAthenaをDataSourceにできたり、LDAP対応されていたりと個人的には嬉しい要素が多いので無事上げられて良かった。
メジャーバージョンが2つ上がってますが、見た目上はほぼ変わっていないので、利用者側の負荷を気にせず上げられるのも嬉しいところ。