Redis
CentOS
CentOS6.x

Redis Replication検証

はじめに

他のRedis構築に関するページは以下をご参考ください。
Redis構築のまとめ

参考)http://memocra.blogspot.jp/2013/01/redis.html

レプリケーションとは、マスタに書き込んだデータをスレーブにコピーすることで、
書き込みはマスタ、読み取りはスレーブと担当を分けることで負荷を分散させる。
読み取りにはマスタも参加することもある。

環境

CentOS 6.8
Redis 3.2.5(当時の安定バージョン)

検証方法

クラスタ構成では各サーバの設定が必要なので、2台のマスター/スレーブ構成で検証する

構成

IPアドレス 役割 ポート番号
192.168.56.111 master 6379
192.168.56.112 slave 6379

検証結果

・マスターが落ちると機能しなくなる
・スレーブはマスターに昇格しない
・マスターは書き込み専用・スレーブは読み込み専用で使用する

クラスタ構成と比べて

・クラスタはマスターが1台落ちるとそこでsetした値はgetできなくなる
→Redisからのデータ参照時に不整合が起きる可能性がある
・レプリケーションの場合はマスターが落ちたとしても、マスターでsetした値はスレーブから参照することができる
・データ不整合を考慮しなければクラスタ構成の方が負荷分散・可用性が高い

検証内容詳細

Redisの設定ファイルを修正する

設定するのはslave側の「192.168.56.112」

$ vim /etc/redis/6379.conf
slaveof 192.168.56.111 6379

※この時、cluster-enableはnoにしておくこと

マスターで値をsetする

マスター/スレーブを起動してマスターで値をsetする

$ service redis start

$ redis-cli -h 192.168.56.111
192.168.56.111:6379>set num1 1
OK

その後スレーブで値をgetしてみる

$ redis-cli -h 192.168.56.112
192.168.56.112:6379>get num1
"1"

マスターでsetした値がスレーブにも反映されている

マスターを落とす

マスターを落としてみる。
落とす方法はserviceコマンドでredisを停止したり、サーバ毎落としても可

192.168.56.112:6379> get num2
"2"
192.168.56.112:6379> set num3
(error) ERR wrong number of arguments for 'set' command

マスターが落ちてもスレーブでgetはできる。ただしsetは読み取り専用のためできない
→クラスタのようにマスターに昇格はされない
マスターが復活すると問題なくマスター/スレーブの関係に戻る

スレーブを落とす

スレーブを落としてからマスターでsetを行う

192.168.56.111:6379> set num3 3
OK

その後スレーブを復活させてgetする

192.168.56.112:6379> get num3
"3"

問題なくgetすることができた。

※なお、スレーブが落ちる→マスターでnum5をset→マスターが落ちる→スレーブ復活→スレーブでnum5をgetしてもマスターでsetした値は取り出せない(マスターが復活すればnum5をgetできるようになる)