Redis で Replication を 構築する 方法

0 件のコメント

今回は 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構築

マスターサーバーを設定、起動します。 基本的には単独サーバーの設定と同じです。

  1. マスターサーバー用設定ファイルを作成

    /data/redis/server01/redis.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ########### 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
  2. マスターサーバー起動

    1
    # redis-server /data/redis/server01/redis.conf

スレーブサーバーを設定、起動します。

  1. スレーブ用設定ファイルを作成

    単一サーバーで実行しているので port 、 フォルダ を変更します。 スレーブとしての設定は requirepass の修正、replicaofmasterauth の追加です。

    /data/redis/server02/redis.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    ########### 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 指定がある場合)、マスターのパスワードを指定します。
  2. スレーブサーバー起動

    1
    # redis-server /data/redis/server02/redis.conf

動作確認

  1. マスター接続

    1
    2
    3
    # redis-cli -p 6379
    127.0.0.1:6379> auth master-password
    OK
  2. マスターにデータ書き込み/確認

    1
    2
    3
    4
    5
    6
    127.0.0.1:6379> set key1 "Hello"
    OK
    127.0.0.1:6379> get key1
    "Hello"
    127.0.0.1:6379> keys *
    1) "key1"
  3. スレーブ接続

    1
    2
    3
    # redis-cli -p 6380
    127.0.0.1:6380> auth slave-password
    OK
  4. スレーブのデータ確認

    1
    2
    3
    4
    127.0.0.1:6380> get key1
    "Hello"
    127.0.0.1:6380> keys *
    1) "key1"

  1. マスターシャットダウン

    1
    # redis-cli -p 6379 -a master-password shutdown
  2. スレーブ接続

    1
    # redis-cli -p 6380 -a slave-password
  3. スレーブのデータ確認

    1
    2
    3
    4
    127.0.0.1:6380> get key1
    "Hello"
    127.0.0.1:6380> keys *
    1) "key1"
  4. スレーブへ書き込み

    1
    2
    127.0.0.1:6380> set key2 "World"
    (error) READONLY You can't write against a read only replica.

  1. マスターを起動

    1
    # redis-server /data/redis/server01/redis.conf
  2. マスターに接続

    1
    # redis-client -p 6379 -a master-password
  3. マスターに書き込み/確認

    1
    2
    3
    4
    5
    6
    7
    127.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"
  4. スレーブに接続

    1
    # redis-client -p 6380 -a slave-password
  5. スレーブのデータを確認

    1
    2
    3
    4
    5
    127.0.0.1:6380> get key2
    "World"
    127.0.0.1:6380> keys *
    1) "key2"
    2) "key1"

参考記事

今回は「Redisでマスター/スレーブ構成を構築する方法とその動作確認」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!