Redis の Sentinel環境 を 構築する 方法

0 件のコメント

今回は Redis の 冗長構成3種類(Replication、Sentinel、Cluster)のうち Sentinel 構成 について、その構築方法と動作確認をまとめます。

概要

Redis Sentinel は Replication だけではできなかった「マスター障害時、自動的に起こったスレーブから任意の1台を選出してマスター昇格させる仕組み」を実現する機能になります。

構成方法のポイントをかいつまんでまとめると「マスターサーバー、スレーブサーバーとは別に Sentinel サーバー を用意します。台数は3台以上の奇数台で配置場所は任意の場所で起動しておきます」となります。 Sentinel はその配置場所によって検出できる障害や復帰できる状態が異なってきます。 なので、構築する環境にあわせて Sentinel の配置場所を考える必要があります。

以下にSentinel配置のサンプルを図示しておきます。

  • Redisサーバーと同じ場所にSentinelを配置する

  • Redisクライアントと同じ場所にSentinelを配置する

  • RedisサーバーとクライアントのすべてにSentinelを配置する

今回は検証用途として「Master 1台、Slave 1台、Sentinel 3台」の構成を1台の実機の中でポートを振り分けて実験してみます。 イメージ的には「Redisクライアントと同じ場所にSentinelを配置する」に近い環境を作っていきます。

Sentinel構築

マスター/スレーブは基本的な設定が単独サーバーとほぼ同じです。 センチネルは独自設定項目が sentinel 接頭辞のついてもので指定できます。

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

    /data/redis/server01/redis.conf

    ########### NETWORK ##########
    bind 0.0.0.0
    port 6379
    
    ########### GENERAL ##########
    daemonize no
    logfile "/data/redis/server01/master.log"
    
    ######## SNAPSHOTTING ########
    save 900 1
    save 300 10
    save 60 10000
    dir "/data/redis/server01"
    dbfilename "dump.rdb"
    
    ######### REPLICATION ########
    masterauth "YOUR-STRONG-PASSWORD"
    replica-announce-ip 127.0.0.1
    replica-announce-port 6379
    
    ########## SECURITY ##########
    requirepass "YOUR-STRONG-PASSWORD"
    
    ##### MEMORY MANAGEMENT ######
    maxmemory 100mb
    maxmemory-policy allkeys-lru
    

    認証を有効化したい場合(requirepass を利用する場合)、マスター/スレーブに関わらず masterauthrequirepass を設定します。

  2. マスターサーバー起動

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

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

    /data/redis/server02/redis.conf

    ########### NETWORK ##########
    bind 0.0.0.0
    port 6380
    
    ########### GENERAL ##########
    daemonize no
    logfile "/data/redis/server02/slave.log"
    
    ######## SNAPSHOTTING ########
    save 900 1
    save 300 10
    save 60 10000
    dir "/data/redis/server02"
    dbfilename "dump.rdb"
    
    ######### REPLICATION ########
    replicaof 127.0.0.1 6379
    masterauth "YOUR-STRONG-PASSWORD"
    replica-announce-ip 127.0.0.1
    replica-announce-port 6380
    
    ########## SECURITY ##########
    requirepass "YOUR-STRONG-PASSWORD"
    
    ##### MEMORY MANAGEMENT ######
    maxmemory 100mb
    maxmemory-policy allkeys-lru
    

    スレーブ側設定として replicaof IP PORT でマスターサーバーのIPアドレスとポート番号を指定します。 また、masterauth PASSWORD でマスターサーバーのパスワードを指定します。

    ポート番号を変更しているので replica-announce-port でポート番号を伝えます。

  2. マスターサーバー起動

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

センチネルはポート違い(5000, 5001, 5002)で3台起動します。

  1. センチネル用設定ファイルを作成

    他のセンチネル設定も同様に作成します。変更箇所はポート番号とフォルダパスです。

    /data/redis/server10/sentinel.conf

    ########### NETWORK ##########
    bind 0.0.0.0
    port 5000
    protected-mode no
    
    ########### GENERAL ##########
    daemonize no
    logfile /data/redis/server10/redis.log
    dir /data/redis/server10
    sentinel announce-ip 127.0.0.1
    sentinel announce-port 5000
    
    ########## SENTINEL ##########
    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel auth-pass mymaster YOUR-STRONG-PASSWORD
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 180000
    sentinel parallel-syncs mymaster 1
    

    ポート番号を変更しているので sentinel announce-port PORT で自身のポート番号を通知します。

    認証を有効化している場合、 sentinel auth-path PASSORD で認証に利用しているパスワードを指定します。

  2. センチネル起動

    # redis-server /data/redis/server10/sentinel.conf --sentinel
    

動作確認

  1. 現状のロールを確認

    # redis-cli -p 6379 -a YOUR-STRONG-PASSWORD info | grep role
    role:master
    # redis-cli -p 6380 -a YOUR-STRONG-PASSWORD info | grep role
    role:slave
    
  2. マスターを停止

    # redis-cli -p 6379 -a YOUR-STRONG-PASSWORD shutdown
    
  3. スレーブ接続、昇格確認

    # redis-cli -p 6380 -a YOUR-STRONG-PASSWORD info | grep role
    role:master
    

  1. 旧マスターを起動

    # redis-server /data/redis/server01/redis.conf
    
  2. ロールの確認

    # redis-cli -p 6379 -a YOUR-STRONG-PASSWORD info | grep role
    role:slave
    # redis-cli -p 6380 -a YOUR-STRONG-PASSWORD info | grep role
    role:master
    

今回は「Redis の Sentinel 構成 の構築方法」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

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