Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

RedisのReplicationをEC2で構築する

■概要

AWS使えるけどElastiCache使えない残念なお仕事です。ならばEC2に自力でRedisを構築するしかないわけですが、Replicationを構築する際にちょっとハマったので手順を残しておきます。

■構築

1. EC2インスタンス起動

今回はAmazon Linux 2のAMIを利用します。
インスタンスタイプはt3.smallを2台、セキュリティグループはtcp/6379を開けます。

2. Redisインストール

master/slave両方
sudo amazon-linux-extras install redis4.0

下記の記事を参考にしました。
AWS EC2にredisをインストールする
https://qiita.com/stoshiya/items/b8c1d2eb41770f92ffcf

3. redis.conf修正

master/slave両方
sudo vi /etc/redis.conf

3.1. bindの設定

(修正前)
bind 127.0.0.1
(修正後)
#bind 127.0.0.1
コメントアウトする

3.2. protected-modeの設定

(修正前)
protected-mode yes
(修正後)
protected-mode no

3.3. slaveの設定 ※slaveのみ※

(修正前)
# slaveof
(修正後)
# slaveof
slaveof aa.bb.cc.dd 6379
※aa.bb.cc.ddにはmasterのプライベートIPを指定する

4. Redis起動

master/slave両方
sudo redis-server /etc/redis.conf &

■動作確認

5. Replicationが設定されていることを確認

5.1. それぞれのサーバでredis-cli起動

master/slave両方
redis-cli

5.2. それぞれのサーバでinfo表示

master/slave両方
127.0.0.1:6379> info
(master側)
# Replication
role:master
(slave側)
# Replication
role:slave
※slave側でrole:masterと表示される場合は、正しくReplication設定できていないので、構築手順を見直す。

6. masterを更新してslaveに反映されることを確認

6.1. masterで値セット

master側
127.0.0.1:6379> set key1 value1
=> OK

6.2. slaveで値を確認

slave側
127.0.0.1:6379> get key1
=> "value1"
ちゃんとmaster=>slave間でレプリケーションされていることが確認できましたね。

7. slaveは更新できないことを確認

slave側
127.0.0.1:6379> set key2 value2
=> (error) READONLY You can't write against a read only slave.

8. slaveがmasterに昇格できることを確認

8.1. slaveをmasterに昇格

slave側
127.0.0.1:6379> SLAVEOF NO ONE
=> OK

8.2. 確認

slave側
127.0.0.1:6379> info
# Replication
role:master

8.3. 値が設定できる

slave側
127.0.0.1:6379> set key2 value2
=> OK

8.4. master側で値を設定してもslaveに反映しない

master側
127.0.0.1:6379> set key2 value3
=> OK
slave側
127.0.0.1:6379> get key2
=> "value2"

9. slaveに復帰

9.1. slaveホストをmasterのslaveノードとして復帰

slave側
127.0.0.1:6379> slaveof 172.30.1.71 6379
=> OK

9.2. key2を取ってみる

127.0.0.1:6379> get key2
=> "value3"
※masterが持っていた値に上書きされた

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?