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にまとまっています。
基本的には以下のように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をサーバーにインストールします。
まずはソースコードをダウンロードします。
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
参考にしたのはこちらになります。
あとは 以下のコマンドで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ほど - おおよそ六分の一ほどになった - ジョブの処理がスムーズな印象 - 実際にパフォーマンスを計測したわけではない - 体感での話なのでベンチマークはどこかでとりたい
という感じです。