今回は Redis の 冗長構成3種類(Replication、Sentinel、Cluster)のうち Sentinel 構成 について、その構築方法と動作確認をまとめます。
概要
Sentinelとは
Redis Sentinel は Replication だけではできなかった「マスター障害時、自動的に起こったスレーブから任意の1台を選出してマスター昇格させる仕組み」を実現する機能になります。
構成例
構成方法のポイントをかいつまんでまとめると「マスターサーバー、スレーブサーバーとは別に Sentinel サーバー を用意します。台数は3台以上の奇数台で配置場所は任意の場所で起動しておきます」となります。 Sentinel はその配置場所によって検出できる障害や復帰できる状態が異なってきます。 なので、構築する環境にあわせて Sentinel の配置場所を考える必要があります。
以下にSentinel配置のサンプルを図示しておきます。
本記事での構成
今回は検証用途として「Master 1台、Slave 1台、Sentinel 3台」の構成を1台の実機の中でポートを振り分けて実験してみます。 イメージ的には「Redisクライアントと同じ場所にSentinelを配置する」に近い環境を作っていきます。
Sentinel構築
マスター/スレーブは基本的な設定が単独サーバーとほぼ同じです。
センチネルは独自設定項目が sentinel
接頭辞のついてもので指定できます。
マスター
-
マスターサーバー用設定ファイルを作成
/data/redis/server01/redis.conf
1234567891011121314151617181920212223242526########### 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
を利用する場合)、マスター/スレーブに関わらずmasterauth
とrequirepass
を設定します。 -
マスターサーバー起動
1# redis-server /data/redis/server01/redis.conf
スレーブ
-
スレーブサーバー用設定ファイルを作成
/data/redis/server02/redis.conf
123456789101112131415161718192021222324252627########### 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
でポート番号を伝えます。 -
マスターサーバー起動
1# redis-server /data/redis/server02/redis.conf
センチネル
センチネルはポート違い(5000, 5001, 5002)で3台起動します。
-
センチネル用設定ファイルを作成
他のセンチネル設定も同様に作成します。変更箇所はポート番号とフォルダパスです。
/data/redis/server10/sentinel.conf
123456789101112131415161718########### 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
で認証に利用しているパスワードを指定します。 -
センチネル起動
1# redis-server /data/redis/server10/sentinel.conf --sentinel
動作確認
マスター停止時にスレーブがマスターに昇格
-
現状のロールを確認
1234# 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
-
マスターを停止
1# redis-cli -p 6379 -a YOUR-STRONG-PASSWORD shutdown
-
スレーブ接続、昇格確認
12# redis-cli -p 6380 -a YOUR-STRONG-PASSWORD info | grep role
role:master
停止したマスターは復帰時にスレーブで参画
-
旧マスターを起動
1# redis-server /data/redis/server01/redis.conf
-
ロールの確認
1234# 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 の フォロー」 お願いします!!