こんにちは
前回はAlmaLinux9にRedis7をインストールしたので、今回はVM1とVM2にそれぞれRedisをインストールし、そこでレプリケーションを設定してみたのでここにまとめます
■環境
OS:AlmaLinux9
VM1
IP:192.168.33.93 (プライマリ)
ポート:6379
VM2
IP:192.168.33.94 (セカンダリ)
ポート:6379
■手順
1. セカンダリからの接続を受け付けるように設定 (プライマリとセカンダリの両方)
vi /etc/redis/redis.conf
bind 127.0.0.1 -::1
↓
bind 0.0.0.0
2. Redis の再起動 (プライマリとセカンダリの両方)
systemctl restart redis
3. レプリケーション情報の設定(セカンダリ)
vi /etc/redis/redis.conf
→下記を追記する
replicaof 192.168.33.93 6379
4. Redis の再起動 (セカンダリ)
systemctl restart redis
5. レプリケーションの状況確認(プライマリとセカンダリの両方)
・プライマリ
redis-cli info replication
→下記のように表示されればOk
# Replication role:master connected_slaves:1 slave0:ip=192.168.33.94,port=6379,state=online,offset=28,lag=1 master_failover_state:no-failover master_replid:6b880fb41de44651c7ad393f12edbc46a4344477 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:28 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:28
・セカンダリ
redis-cli info replication
→下記のように表示されればOK
# Replication role:slave master_host:192.168.33.93 master_port:6379 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_read_repl_offset:1 slave_repl_offset:1 master_link_down_since_seconds:-1 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:29b6e3eb9e2a017f2856041b0e860ba27e30a832 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
6. 動作確認
・プライマリ側でkeyをセット
localhost:6379> set key7 value2 OK
・セカンダリ側で確認
keys *
→下記のように出力されればOK
1) "key2" 2) "key6" 3) "key5" 4) "key7" 5) "key1" 6) "key4" 7) "key3"
★おまけ
・プライマリ側でレプリケーションが認識されない
[root@redis01 redis]# redis-cli info replication # Replication role:master connected_slaves:0 ★0になっておりプライマリを認識していない master_failover_state:no-failover master_replid:67762e13e1253b45db381f094c5edf1f66da773b master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0
→/var/log/redis/redis.logに下記が出力されており、プライマリ側がprotected-modeで稼働していることが原因
17922:S 08 Nov 2025 09:44:56.178 * Connecting to MASTER 192.168.33.93:6379 17922:S 08 Nov 2025 09:44:56.178 * MASTER <-> REPLICA sync started 17922:S 08 Nov 2025 09:44:56.184 * Non blocking connect for SYNC fired the event. 17922:S 08 Nov 2025 09:44:56.196 # Error reply to PING from master: '-DENIED Redis is running in protected mode because protected mode is enabled and no password is set for the default user. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you m'
プライマリ側で設定変更
vi /etc/redis/redis.conf
protected-mode yes
↓
protected-mode no
再起動
systemctl restart redis
レプリケーションが実行されていることを確認
redis-cli info replication
# Replication role:master connected_slaves:1 slave0:ip=192.168.33.94,port=6379,state=online,offset=28,lag=1 master_failover_state:no-failover master_replid:6b880fb41de44651c7ad393f12edbc46a4344477 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:28 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:28
■まとめ
どうでしたでしょうか
初めてレプリケーションを組んでみましたが結構簡単に設定できました
Redisはすでに開発現場では必須くらいのサービスかなと思うので、それのレプリケーションを組めるのは結構重要なスキルになるかなと思いました
また今度はSentinelを試してみようかなと思います!