LoginSignup
2
2

More than 5 years have passed since last update.

Redis Replication検証

Last updated at Posted at 2018-01-25

はじめに

他の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できるようになる)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2