Mastodon用にRedisインスタンスを複数立ち上げる

公開日:2019-07-23
最終更新:2019-07-24

ここでは、Debian / UbuntuでMastodonを実行しているという前提で説明します。

  • 最新版をインストールする
  • 複数のインスタンスを立ち上げる
  • 環境を整備する

最新版をインストールする

基本的にapt install redisだけでイケるんですが、最新版がインストールされません。
今日もUbuntu 19.04でやってみましたが、5.0.3です。5.0.5を入れたいのに……。

面倒なので、自分でビルドして入れちゃいましょう。
C言語のソースコードをmakeするだけです。

wget -O - http://download.redis.io/releases/redis-5.0.5.tar.gz | tar xvzf -  
cd redis-5.0.5  
make  

最新版をmakeしたら、testします。tclが必要なので入れておきます。

sudo apt install tcl  

で、テスト。

make test  

多分通るでしょう。確認できたらインストールします。

sudo make install  

設定ユーティリティ等も付属していますが、今回は使いません。
aptと同じものを流用したいので、そちらをいれちゃいます(先に入れてある場合はここでのインストールは不要です)

sudo apt install redis  

aptで入れたものは/usr/bin/redis-server、自分でビルドした奴は/usr/local/bin/redis-serverです。

複数のインスタンスを立ち上げる

Mastodonでは、再起動しても残っていて欲しいデータを保存するredisと、純粋にキャッシュが目的で消えてしまっても構わない内容を保存するredisに分割するというチューニングが可能です。また、同一サーバでredisを使う他のサービスを立ち上げることもあるでしょう。(後者はnamespaceで対処する方法もあります)

Debian系では、複数のインスタンスをセットアップし易いように、テンプレート化されたサービスファイルが提供されているので、これを利用します。

既存のものを止める

今回は消えてもらいます……。

sudo systemctl stop redis  
sudo systemctl disable redis  

redisのパスを直す

/lib/systemd/system/[email protected]にテンプレート化されたサービスファイルがあります。編集します。

sudoedit /lib/systemd/system/[email protected]  

直すのはココ。さっきビルドして入れた方を起動するように変えちゃう。

# ExecStart=/usr/bin/redis-server /etc/redis/redis-%i.conf  
ExecStart=/usr/local/bin/redis-server /etc/redis/redis-%i.conf  

redisのconfを必要なだけ増やす

さっきのサービスファイルにコメントで手順が書いてあるんですが、ここでも説明しておきます。

/etc/redis/redis.confを、コピーして増やします。
ここでは、Mastodonの永続化用にredis-mastodon.conf、キャッシュ用にredis-mastodon-cache.confを作ることにしましょう。ここで決めたmastodonmastodon-cacheの名前をあちこちで使います。

sudo cp  -p /etc/redis/redis.conf /etc/redis/redis-mastodon.conf  
sudo cp  -p /etc/redis/redis.conf /etc/redis/redis-mastodon-cache.conf  

テンプレートで名前の付け方が決まっているので、それに合わせて必要な項目を設定しましょう。

redis-mastodon.confの方は、

port 6379  
pidfile /var/run/redis-mastodon/redis-server.pid  
logfile /var/log/redis/redis-server-mastodon.log  
dbfilename dump-mastodon.rdb  

redis-mastodon-cache.confの方は、

port 6380  
pidfile /var/run/redis-mastodon-cache/redis-server.pid  
logfile /var/log/redis/redis-server-mastodon-cache.log  
dbfilename dump-mastodon-cache.rdb  
save ""  

って感じかな。portが重ならないようにするのは基本。

キャッシュ用はsaveを空にして永続化しない運用なので、dbfilenameの設定は要らないのですが、何かの折に設定変更した場合などに重なると危ないので、念のため設定しておきます。

socket接続する場合はunixsocket /var/run/redis-mastodon/redis-server.sockなども設定してください。

サービスを起動する

sudo systemctl start [email protected]  
sudo systemctl start [email protected]  

エラーが起きる場合は、まずログを確認してみてください。

ファイルのオーナーがredisになっていない(パーミッション)、ファイルが存在しない(名前が間違っている)など、必要な情報が得られるハズです。

サービスを有効にする

起動を確認したら、再起動しても常時立ち上がるよう有効化します。

sudo systemctl enable [email protected]  
sudo systemctl enable [email protected]  

環境を整備する

ところで、ログをみると、警告が3つ出ています。

  • WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
  • 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.
  • 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.

Redisの実行に適した設定をせよ、とのことですので、警告メッセージに従ってシステムの設定を変更します。

sysctlの設定

/etc/sysctl.d/redis.confを作成して、必要な設定を記述します。

net.core.somaxconn=511  
vm.overcommit_memory=1  

rc.localの設定

/etc/rc.localを作成して、必要な設定を記述します。すでにある場合は追記してください。

#!/bin/sh  
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then  
   echo never > /sys/kernel/mm/transparent_hugepage/enabled  
fi  

実行できるようにsudo chmod u+x /etc/rc.localしておきます。

rc.localの実行を待つようにサービスファイルを書き換え

/lib/systemd/system/[email protected]を書き換えます。

#After=network.target  
After=network.target rc-local.service  

rebootして、ログを確認する

最後に再起動し、警告がなくなっていればOKです。

Mastodonの設定

.env.productionに、キャッシュ用のRedisの設定を追加します。

REDIS_HOST=localhost  
REDIS_PORT=6379  
CACHE_REDIS_HOST=localhost  
CACHE_REDIS_PORT=6380  

Mastodonを再起動すれば、新しいキャッシュ専用のRedisインスタンスを利用するようになります。

キャッシュの残骸の掃除

永続化するメインのRedisインスタンスに、キャッシュが残っています。掃除しておきましょう。

redis-cli KEYS "cache:*" | xargs redis-cli DEL  
記事が少しでもいいなと思ったらクラップを送ってみよう!
26
+1
@noellaboの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする