Redis - レプリケーション

Redisではデータベースなどでよくあるマスター/レプリカ方式でのレプリケーション機能が備わっており、今回はそれについての設定方法と動作の確認を行いたいと思います。

インストール方法についてはコチラの記事をご確認ください。

環境

マスター
IP10.15.0.1
ポート6379
OSAlmaLinux 9.4
Redis
バージョン
redis-6.2.7-1.el9.x86_64
レプリカ
IP10.15.0.2
ポート6379
OSAlmaLinux 9.4
Redis
バージョン
redis-6.2.7-1.el9.x86_64

設定

AlmaLinuxのリポジトリからRedisをインストールした場合、デフォルト値で単体動作可能になっていますが、レプリケーションのためには以下設定の追加及び変更が必要です。

尚、デフォルトの設定ファイルは「/etc/redis/redis.conf」です。

  • bind <IPアドレス>

接続を受け入れるネットワークインターフェイスのIP。複数指定可能。指定しない場合は利用可能なすべてのネットワークインターフェイスから接続可能になります。

デフォルト値ではループバックアドレスのみ有効となっているので、レプリカ側から接続するために最低限マスター側で設定する必要があります。

  • replicaof <IPアドレス> <ポート番号>

マスターとなるRedisサーバのIPアドレスとポート番号。レプリカ側でマスター側を認識するために必要な設定です。

※今回は使用していませんが、ACLなどによってマスター側にパスワードが設定されている場合は、認証のために以下設定も必要になります。

  • masterauth <パスワード>
  • masteruser <ユーザ名>

構築

それでは実際に設定の変更と適用を行っていきます。

マスター側
# cd /etc/redis
# cp -p redis.conf redis.conf.org
# vi redis.conf
# diff -u redis.conf.org redis.conf | grep -e ^+ -e ^-
--- redis.conf.org      2022-05-10 21:44:10.000000000 +0900
+++ redis.conf  2024-10-17 17:19:29.046378742 +0900
-bind 127.0.0.1 -::1
+#bind 127.0.0.1 -::1
+bind 127.0.0.1 10.15.0.1 -::1
# systemctl restart redis 
レプリカ側
# cd /etc/redis
# cp -p redis.conf redis.conf.org
# vi redis.conf
# diff -u redis.conf.org redis.conf | grep -e ^+ -e ^-
--- redis.conf.org      2022-10-16 04:41:21.000000000 +0900
+++ redis.conf  2024-10-17 17:18:51.636215086 +0900
-bind 127.0.0.1 -::1
+#bind 127.0.0.1 -::1
+bind 127.0.0.1 10.15.0.2 -::1
+replicaof 10.15.0.1 6379
# systemctl restart redis 

以上で設定が完了です。

動作確認

それでは実際の動作を確認していきます。

まずは「KEYS」コマンドでマスターとレプリカのどちらもキーが登録されていないことを確認します。

  • 「KEYS <パターン>」:登録されているキーをパターンで絞り込み表示することが可能です。今回は「*」を渡して登録されているすべてのキーを出力しています。
マスター側
# redis-cli 
> KEYS *
レプリカ側
# redis-cli 
> KEYS *

次に以下コマンドを用いてマスター側でキーの登録を行いその確認を行います。

  • 「SET <キー名> <値> 」:String型のデータを登録します。
  • 「GET <キー名> 」:String型のデータの値を取得します。
マスター側
> SET test-key01 100
> GET test-key01
"100"
> KEYS *
1) "test-key01"

この段階で、レプリケーション機能によってレプリカ側でも"test-key01"キーが確認できるようになります。

レプリカ側
> GET test-key01
"100"
> KEYS *
1) "test-key01

また、デフォルトでは「replica-read-only」の設定が有効化されており、レプリカ側にはデータの書き込み権限がないため「SET」コマンドなどを使うと以下のようなエラーが出力されます。

  • 「DEL <キー名>」:指定したキーを削除します。
> SET test-key02 200
(error) READONLY You can't write against a read only replica.
> DEL test-key01
(error) READONLY You can't write against a read only replica.

まとめ

以上のことから、レプリケーション機能が簡単に設定することが可能であり、どのような動作を行うかが分かったかと思います。

次回の記事では上記環境にRedis Sentinelを実装し、フェイルオーバーの動作確認を行いたいと思います。

技術情報

商標について

関連サービス

OSS構築支援
OSS保守サポート

お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]

お問い合わせ
  • X