Creatodonで使っているRedisをValkeyへと移行した

Creatodonで利用しているRedisをValkeyへ移行した時のメモです。

利用環境としては

  • OS: Ubuntu 22.04.4 LTS
  • Redis: 7.4.0
  • Valkey : 8.0.0(Redis 7.2.5互換)

になります

やったこと

CIの修正

まずはCIの環境でもValkeyが利用できるように修正しました

修正箇所としては以下のPRにまとまっています。

github.com

基本的には以下のようにRedisのサービス部分をValkeyに変更しています。

      redis:
-        image: redis:7-alpine
-        options: >-
-          --health-cmd "redis-cli ping"
-          --health-interval 10s
-          --health-timeout 5s
-          --health-retries 5
+        image: valkey/valkey:8-alpine
        ports:
          - 6379:6379

Valkeyのインストール

README.mdを参考に、Valkeyをサーバーにインストールします。

github.com

まずはソースコードをダウンロードします。

wget https://github.com/valkey-io/valkey/archive/refs/tags/8.0.0.tar.gz

ダウンロードしたソースコードを解凍し、ビルドするディレクトリまで移動します。

tar -zxvf 8.0.0.tar.gz
cd valkey-8.0.0/src

srcディレクトリ内でmakeを実行するとビルドが始まります。 今回はjemallocとsystemdを使いたかったので、そちらのオプションも有効にしています。

make MALLOC=jemalloc USE_SYSTEMD=yes

サーバーにはsystemd関連のヘッダーがなかったのでそちらもインストールしてからmakeを実行しました。

sudo apt install libsystemd-dev

あとは以下のコマンドでインストールします。

sudo make install

またインストール時に、redis-cliなどのシンボリックリンクも作成されます。

インストール完了後、以下のコマンドを実行してValkeyのバージョンが表示さればOKです。

valkey-cli --version
# => valkey-cli 8.0.0

Redisの停止とValkeyの起動

Redisを停止します。

sudo systemctl stop redis-server

次に、Valkeyのserviceを参考に /lib/systemd/system/valkey-server.service を作成します。

[Unit]
Description=Valkey data structure server
Documentation=https://github.com/valkey-io/valkey-doc
#Before=your_application.service another_example_application.service
#AssertPathExists=/var/lib/valkey
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/valkey-server --supervised systemd --daemonize no
## Alternatively, have valkey-server load a configuration file:
#ExecStart=/usr/local/bin/valkey-server /path/to/your/valkey.conf
LimitNOFILE=10032
NoNewPrivileges=yes
#OOMScoreAdjust=-900
#PrivateTmp=yes
Type=notify
TimeoutStartSec=infinity
TimeoutStopSec=infinity
UMask=0077
#User=valkey
#Group=valkey
#WorkingDirectory=/var/lib/valkey

[Install]
WantedBy=multi-user.target

参考にしたのはこちらになります。

github.com

あとは 以下のコマンドでValkeyを起動します。

sudo systemctl start valkey-server

タイムラインの再構築

次に、Mastodon のタイムラインの再構築を行います。

# タイムラインをクリア
RAILS_ENV=production bundle exec ./bin/tootctl feeds clear

# タイムラインを再構築
RAILS_ENV=production bundle exec ./bin/tootctl feeds build --all --concurrency 15

Mastodonの再起動

最後にMastodonを再起動します。

sudo systemctl restart mastodon-*

現状

Valkeyに移行してからの変化としては - Redisの時よりメモリの使用量が減った - Redisの時は30mbほど - Valkeyは5mbほど - おおよそ六分の一ほどになった - ジョブの処理がスムーズな印象 - 実際にパフォーマンスを計測したわけではない - 体感での話なのでベンチマークはどこかでとりたい

という感じです。