今回は Redis の冗長構成3種類(Replication、Sentinel、Cluster)のうち Replication(マスター/スレーブ)構成 について その構築方法と動作確認についてまとめます。
概要
今回は単一サーバー上に Redis サーバー をポート違いで2台立ち上げて 「マスター/スレーブ 構成」を作ってみます。 利用している環境は以下の通りです。
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# redis-server --version Redis server v=5.0.5 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=76ba031b1adc8963
Replication構築
マスター
マスターサーバーを設定、起動します。 基本的には単独サーバーの設定と同じです。
-
マスターサーバー用設定ファイルを作成
/data/redis/server01/redis.conf
123456789101112131415161718192021########### NETWORK ##########
bind 0.0.0.0
port 6379
########### GENERAL ##########
daemonize no
logfile /data/redis/server01/redis.log
######## SNAPSHOTTING ########
save 900 1
save 300 10
save 60 10000
dir /data/redis/server01/
dbfilename dump.rdb
########## SECURITY ##########
requirepass master-password
##### MEMORY MANAGEMENT ######
maxmemory 100mb
maxmemory-policy allkeys-lru
-
マスターサーバー起動
1# redis-server /data/redis/server01/redis.conf
スレーブ
スレーブサーバーを設定、起動します。
-
スレーブ用設定ファイルを作成
単一サーバーで実行しているので
port
、 フォルダ を変更します。 スレーブとしての設定はrequirepass
の修正、replicaof
とmasterauth
の追加です。/data/redis/server02/redis.conf
12345678910111213141516171819202122232425########### NETWORK ##########
bind 0.0.0.0
port 6380
########### GENERAL ##########
daemonize no
logfile /data/redis/server02/redis.log
######## SNAPSHOTTING ########
save 900 1
save 300 10
save 60 10000
dir /data/redis/server02/
dbfilename dump.rdb
######### REPLICATION ########
replicaof 192.168.1.1 6379
masterauth master-password
########## SECURITY ##########
requirepass slave-password
##### MEMORY MANAGEMENT ######
maxmemory 100mb
maxmemory-policy allkeys-lru
replicaof <MASTER_IP> <MASTER_PORT>
- マスターサーバーのIPアドレス、ポート番号を指定します。
masterauth <MASTER_PASSWORD>
- マスターが認証を有効にしている場合(
requirepass
指定がある場合)、マスターのパスワードを指定します。
-
スレーブサーバー起動
1# redis-server /data/redis/server02/redis.conf
動作確認
マスター→スレーブへのデータ転送
-
マスター接続
123# redis-cli -p 6379
127.0.0.1:6379> auth master-password
OK
-
マスターにデータ書き込み/確認
123456127.0.0.1:6379>
set
key1
"Hello"
OK
127.0.0.1:6379> get key1
"Hello"
127.0.0.1:6379> keys *
1)
"key1"
-
スレーブ接続
123# redis-cli -p 6380
127.0.0.1:6380> auth slave-password
OK
-
スレーブのデータ確認
1234127.0.0.1:6380> get key1
"Hello"
127.0.0.1:6380> keys *
1)
"key1"
マスター障害時にスレーブが昇格しない
-
マスターシャットダウン
1# redis-cli -p 6379 -a master-password shutdown
-
スレーブ接続
1# redis-cli -p 6380 -a slave-password
-
スレーブのデータ確認
1234127.0.0.1:6380> get key1
"Hello"
127.0.0.1:6380> keys *
1)
"key1"
-
スレーブへ書き込み
12127.0.0.1:6380>
set
key2
"World"
(error) READONLY You can't write against a read only replica.
マスター復活時に再接続する
-
マスターを起動
1# redis-server /data/redis/server01/redis.conf
-
マスターに接続
1# redis-client -p 6379 -a master-password
-
マスターに書き込み/確認
1234567127.0.0.1:6379> get key2
"World"
OK
127.0.0.1:6379> get key2
"World"
127.0.0.1:6379> keys *
1)
"key2"
2)
"key1"
-
スレーブに接続
1# redis-client -p 6380 -a slave-password
-
スレーブのデータを確認
12345127.0.0.1:6380> get key2
"World"
127.0.0.1:6380> keys *
1)
"key2"
2)
"key1"
参考記事
今回は「Redisでマスター/スレーブ構成を構築する方法とその動作確認」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!