このセクションでは、 バージョン 5 のRedis を使ったクラスタのフェイルオーバーを構築する方法を紹介します。ここでは、1台のサーバー上に6つのRedis を起動し、3台をマスター、3台をスレーブとする構成を前提に紹介します。

Redis の設定ファイル( /etc/redis.conf )をコピーし、スレーブサーバー用の Redis 設定ファイルを 準備します。ここでは、1台目のスレーブサーバー用の設定ファイルを 6393.conf、 2台目の設定ファイルを 6394.conf 、3台目の設定ファイルを 6395.conf とします。

[root@localhost ~]# cp -rp /etc/redis.conf /etc/redis/cluster/6393.conf
[root@localhost ~]# cp -rp /etc/redis.conf /etc/redis/cluster/6394.conf
[root@localhost ~]# cp -rp /etc/redis.conf /etc/redis/cluster/6395.conf

Redis クラスタリングの設定ファイルを格納しているディレクトリを確認します。ここでは、6390 〜 6392.conf がマスター3台の設定ファイル、6393 〜 6395.conf がスレーブ3台の設定ファイルとなります。

[root@localhost ~]# ls -la /etc/redis/cluster/合計 288
drwxr-xr-x. 2 root  root   108  1月 27 17:48 .
drwxr-xr-x. 3 redis root   126  1月 27 19:24 ..
-rw-r-----. 1 redis root 46895  1月 27 17:47 6390.conf
-rw-r-----. 1 redis root 46895  1月 27 17:47 6391.conf
-rw-r-----. 1 redis root 46809  1月 27 17:48 6392.conf
-rw-r-----. 1 redis root 46784  1月 27 01:17 6393.conf
-rw-r-----. 1 redis root 46783  1月 19 20:38 6394.conf
-rw-r-----. 1 redis root 46783  1月 19 20:38 6395.conf
[root@localhost ~]#

Redis の起動スクリプトファイル( /lib/systemd/system/redis.service )をコピーし、スレーブサーバー用の Redis 起動スクリプトを準備します。ここでは、1台目のスレーブサーバー用の起動スクリプトを redis_6392.service、 2台目の起動スクリプトファイルを redis_6393.service 、3台目の起動スクリプトファイルを redis_6394.service とします。

[root@localhost ~]# cp -p /lib/systemd/system/redis.service /lib/systemd/system/redis_6393.service
[root@localhost ~]# cp -p /lib/systemd/system/redis.service /lib/systemd/system/redis_6394.service
[root@localhost ~]# cp -p /lib/systemd/system/redis.service /lib/systemd/system/redis_6395.service

Redis の起動スクリプトファイルを格納しているディレクトリを確認します。ここでは、redis_6390 〜 6392.service がマスター3台のスクリプトファイル、redis_6393 〜 6395.service がスレーブ3台のスクリプトファイルとなります。

[root@localhost ~]# ls -la /lib/systemd/system/
〜(省略)〜
-rw-r--r--.  1 root root   390  1月 26 17:34 redis_6390.service
-rw-r--r--.  1 root root   390  1月 26 17:51 redis_6391.service
-rw-r--r--.  1 root root   390  1月 26 17:58 redis_6392.service
-rw-r--r--.  1 root root   334  1月 27 01:08 redis_6393.service
-rw-r--r--.  1 root root   390  2月  2 20:01 redis_6394.service
-rw-r--r--.  1 root root   390  2月  2 21:08 redis_6395.service

Redis の停止スクリプトファイル( /usr/libexec/redis-shutdown )をコピーし、スレーブサーバー用の Redis 停止スクリプトを準備します。ここでは、1台目のマスターサーバー用の停止スクリプトを redis-6393-shutdown、 2台目の停止スクリプトファイルを redis-6394-shutdown 、3台目の停止スクリプトファイルを redis-6395-shutdown とします。

[root@localhost ~]# cp -p /usr/libexec/redis-shutdown /usr/libexec/redis-6390-shutdown
[root@localhost ~]# cp -p /usr/libexec/redis-shutdown /usr/libexec/redis-6391-shutdown
[root@localhost ~]# cp -p /usr/libexec/redis-shutdown /usr/libexec/redis-6392-shutdown
[root@localhost ~]# 

Redis の停止スクリプトファイルを格納しているディレクトリを確認します。ここでは、redis-6390 〜 6392-shutdown がマスター3台のスクリプトファイル、redis-6393 〜 6395-shutdown がスレーブ3台のスクリプトファイルとなります。

[root@localhost ~]# ls -la /usr/libexec/
〜(省略)〜
-rwxr-xr-x.  1 root root        1129  1月 26 17:38 redis-6390-shutdown
-rwxr-xr-x.  1 root root        1129  1月 26 17:53 redis-6391-shutdown
-rwxr-xr-x.  1 root root        1129  1月 26 19:08 redis-6392-shutdown
-rwxr-xr-x.  1 root root        1129  1月 27 01:11 redis-6393-shutdown
-rwxr-xr-x.  1 root root        1129  2月  2 20:04 redis-6394-shutdown
-rwxr-xr-x.  1 root root        1129  2月  2 21:07 redis-6395-shutdown

1台目のスレーブサーバーの準備

1台目のスレーブサーバー用 Redis 設定ファイル( /etc/redis/cluster/6393.conf )を編集し、以下設定します。1台目のスレーブサーバーは TCP 6393 ポートを使用することにしています。

[root@localhost ~]# vi /etc/redis/cluster/6393.conf 

マスターサーバーの Redis 設定ファイルで パスワード(requirepass)を設定している場合には、masterauth パラメーターにパスワードを指定します。ここでは、パスワードは foobaredとしています。マスターサーバーで設定されていない場合には、masterauth は不要です。

bind 192.168.24.199
port 6393
pidfile /var/run/redis_6393.pid
logfile /var/log/redis/redis_6393.log
dbfilename 6393.rdb
cluster-enabled yes
cluster-config-file nodes-6393.conf
cluster-node-timeout 15000
appendonly yes
masterauth foobared

1台目のスレーブサーバー用 Redis 起動スクリプトファイル( /lib/systemd/system/redis_6393.service )を編集し、以下設定します。

[root@localhost ~]# vi /lib/systemd/system/redis_6393.service 

ExecStart、ExecStop に定義する値を変更します。

ExecStart=/usr/bin/redis-server /etc/redis/cluster/6393.conf --supervised systemd
ExecStop=/usr/libexec/redis-6393-shutdown

1台目のマスターサーバー用 Redis 停止スクリプトファイル( /usr/libexec/redis-6393-shutdown )を編集し、以下設定します。

[root@localhost ~]# vi /usr/libexec/redis-6393-shutdown 

SERVICE_NAME、CONFIG FILE、PORT に定義する値を変更します。

if [ -z "$SERVICE_NAME" ]; then
   SERVICE_NAME=6393
fi

CONFIG_FILE="/etc/redis/cluster/$SERVICE_NAME.conf"

if [ "$SERVICE_NAME" = 6393 ]; then
    PORT=${PORT:-6393}

1台目の Redis サービスを起動します。

■ 起動
[root@localhost ~]# systemctl start redis_6394
[root@localhost ~]# 

■ 起動状態の確認
[root@localhost ~]# systemctl status redis_6394
● redis_6394.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis_6394.service; disabled; vendor preset: disabled)
   Active: active (running) since 土 2019-02-02 20:05:59 JST; 7s ago
 Main PID: 8008 (redis-server)
   CGroup: /system.slice/redis_6394.service
           └─8008 /usr/bin/redis-server 192.168.24.199:6394 [cluster]

 2月 02 20:05:59 localhost.localdomain systemd[1]: Starting Redis persistent...
 2月 02 20:05:59 localhost.localdomain systemd[1]: Started Redis persistent ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# 

1台目の Redis サービスの自動起動を有効化します。

■ 自動起動の有効化
[root@localhost ~]# systemctl enable redis_6393
Created symlink from /etc/systemd/system/multi-user.target.wants/redis_6393.service to /usr/lib/systemd/system/redis_6393.service.
[root@localhost ~]# 

■ 自動起動の状態確認
[root@localhost ~]# systemctl is-enabled redis_6393
enabled
[root@localhost ~]# 

2、3台目のスレーブサーバーの準備

1台目のスレーブサーバーの準備と同様手順で、2、3台目のスレーブサーバーを準備します。2台目のマスターサーバーは TCP 6394 ポートを、3台目のマスターサーバーは TCP 6395 ポートを使用することにしています。

● 2台目の設定

[root@localhost ~]# vi /etc/redis/cluster/6395.conf 
bind 192.168.24.199
port 6395
pidfile /var/run/redis_6395.pid
logfile /var/log/redis/redis_6395.log
dbfilename 6395.rdb
cluster-enabled yes
cluster-config-file nodes-6395.conf
cluster-node-timeout 15000
appendonly yes
masterauth foobared
[root@localhost ~]# vi /lib/systemd/system/redis_6394.service 
ExecStart=/usr/bin/redis-server /etc/redis/cluster/6394.conf --supervised systemd
ExecStop=/usr/libexec/redis-6394-shutdown
[root@localhost ~]# vi /usr/libexec/redis-6394-shutdown 
if [ -z "$SERVICE_NAME" ]; then
   SERVICE_NAME=6394
fi

CONFIG_FILE="/etc/redis/cluster/$SERVICE_NAME.conf"

if [ "$SERVICE_NAME" = 6394 ]; then
    PORT=${PORT:-6394}

● 3台目の設定

[root@localhost ~]# vi /etc/redis/cluster/6395.conf 
bind 192.168.24.199
port 6395
pidfile /var/run/redis_6395.pid
logfile /var/log/redis/redis_6395.log
dbfilename 6395.rdb
cluster-enabled yes
cluster-config-file nodes-6395.conf
cluster-node-timeout 15000
appendonly yes
masterauth foobared
[root@localhost ~]# vi /lib/systemd/system/redis_6395.service 
ExecStart=/usr/bin/redis-server /etc/redis/cluster/6395.conf --supervised systemd
ExecStop=/usr/libexec/redis-6395-shutdown
[root@localhost ~]# vi /usr/libexec/redis-6395-shutdown 
if [ -z "$SERVICE_NAME" ]; then
   SERVICE_NAME=6395
fi

if [ "$SERVICE_NAME" = 6395 ]; then
    PORT=${PORT:-6395}
2、3台目の Redis サービスの起動と、自動起動を有効化します。
[root@localhost ~]# systemctl start redis_6394

[root@localhost ~]# systemctl status redis_6394
● redis_6394.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis_6394.service; disabled; vendor preset: disabled)
   Active: active (running) since 土 2019-02-02 20:05:59 JST; 7s ago
 Main PID: 8008 (redis-server)
   CGroup: /system.slice/redis_6394.service
           └─8008 /usr/bin/redis-server 192.168.24.199:6394 [cluster]

 2月 02 20:05:59 localhost.localdomain systemd[1]: Starting Redis persistent...
 2月 02 20:05:59 localhost.localdomain systemd[1]: Started Redis persistent ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# 
[root@localhost ~]# systemctl start redis_6395

[root@localhost ~]# systemctl status redis_6395
● redis_6395.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis_6395.service; disabled; vendor preset: disabled)
   Active: active (running) since 土 2019-02-02 20:06:32 JST; 2s ago
  Process: 8019 ExecStop=/usr/libexec/redis-6390-shutdown (code=exited, status=0/SUCCESS)
 Main PID: 8064 (redis-server)
   CGroup: /system.slice/redis_6395.service
           └─8064 /usr/bin/redis-server 192.168.24.199:6390 [cluster]

 2月 02 20:06:32 localhost.localdomain systemd[1]: Starting Redis persistent...
 2月 02 20:06:32 localhost.localdomain systemd[1]: Started Redis persistent ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# 
[root@localhost ~]# systemctl enable redis_6394
Created symlink from /etc/systemd/system/multi-user.target.wants/redis_6394.service to /usr/lib/systemd/system/redis_6394.service.

[root@localhost ~]# systemctl enable redis_6395
Created symlink from /etc/systemd/system/multi-user.target.wants/redis_6395.service to /usr/lib/systemd/system/redis_6395.service.

[root@localhost ~]# systemctl is-enabled redis_6394
enabled

[root@localhost ~]# systemctl is-enabled redis_6395
enabled

マスターサーバーの設定編集

マスターサーバーの Redis 設定ファイルでパスワード(requirepass)を設定している場合には、masterauth パラメーターにパスワードを指定します。ここでは、パスワードは foobaredとしています。マスターサーバーで requirepass を設定していない場合には、masterauth は不要です。もし、requirepass が設定され masterauth が設定されていないと、障害などでスレーブに降格したマスターサーバーがマスターに昇格したスレーブサーバー障害時に再度マスターに昇格することができなくなってしまいます。

[root@localhost ~]# vi /etc/redis/cluster/6390.conf 
masterauth foobared

[root@localhost ~]# vi /etc/redis/cluster/6391.conf 
masterauth foobared

[root@localhost ~]# vi /etc/redis/cluster/6392.conf 
masterauth foobared

マスターサーバーを再起動します。

[root@localhost ~]# systemctl restart redis_6390 redis_6391 redis_6392

[root@localhost ~]# systemctl status redis_6390 redis_6391 redis_6392
● redis_6390.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis_6390.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2019-02-02 23:15:50 JST; 5s ago
  Process: 3795 ExecStop=/usr/libexec/redis-6390-shutdown (code=exited, status=0/SUCCESS)
 Main PID: 3841 (redis-server)
   CGroup: /system.slice/redis_6390.service
           └─3841 /usr/bin/redis-server 192.168.24.199:6390 [cluster]

 2月 02 23:15:50 localhost.localdomain systemd[1]: Stopped Redis persistent ...
 2月 02 23:15:50 localhost.localdomain systemd[1]: Starting Redis persistent...
 2月 02 23:15:50 localhost.localdomain systemd[1]: Started Redis persistent ...

● redis_6391.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis_6391.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2019-02-02 23:15:50 JST; 5s ago
  Process: 3796 ExecStop=/usr/libexec/redis-6391-shutdown (code=exited, status=0/SUCCESS)
 Main PID: 3839 (redis-server)
   CGroup: /system.slice/redis_6391.service
           └─3839 /usr/bin/redis-server 192.168.24.199:6391 [cluster]

 2月 02 23:15:50 localhost.localdomain systemd[1]: Stopped Redis persistent ...
 2月 02 23:15:50 localhost.localdomain systemd[1]: Starting Redis persistent...
 2月 02 23:15:50 localhost.localdomain systemd[1]: Started Redis persistent ...

● redis_6392.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis_6392.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2019-02-02 23:15:50 JST; 5s ago
  Process: 3797 ExecStop=/usr/libexec/redis-6392-shutdown (code=exited, status=0/SUCCESS)
 Main PID: 3838 (redis-server)
   CGroup: /system.slice/redis_6392.service
           └─3838 /usr/bin/redis-server 192.168.24.199:6392 [cluster]

 2月 02 23:15:50 localhost.localdomain systemd[1]: Stopped Redis persistent ...
 2月 02 23:15:50 localhost.localdomain systemd[1]: Starting Redis persistent...
 2月 02 23:15:50 localhost.localdomain systemd[1]: Started Redis persistent ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# 

クラスタリングのファイルオーバーの構成

1台目の Redis サーバーに接続し、マスター3台、スレーブ3台のクラスタリングを構成します。途中で、実行したクラスタリングの構成を設定するか確認されるので、yes と入力します。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared --cluster create 192.168.24.199:6390 192.168.24.199:6391 192.168.24.199:6392 192.168.24.199:6393 192.168.24.199:6394 192.168.24.199:6395 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.24.199:6393 to 192.168.24.199:6390
Adding replica 192.168.24.199:6394 to 192.168.24.199:6391
Adding replica 192.168.24.199:6395 to 192.168.24.199:6392
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390
   slots:[0-5460] (5461 slots) master
M: 2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391
   slots:[5461-10922] (5462 slots) master
M: e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392
   slots:[10923-16383] (5461 slots) master
S: 2ba4d782571bf97a68aa1f98670f4cbb207b840f 192.168.24.199:6393
   replicates ca443c4f54618f40e8682269bbca4033f98cb6d1
S: ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 192.168.24.199:6394
   replicates 2637035585cf77bdf997ddec83455f4c349178ff
S: ddf10a66a459ef277d0aa54ce68feea21fc48a32 192.168.24.199:6395
   replicates e582ec767bced7cbbc75427947e504d790f2cd03
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
......
>>> Performing Cluster Check (using node 192.168.24.199:6390)
M: ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 192.168.24.199:6394
   slots: (0 slots) slave
   replicates 2637035585cf77bdf997ddec83455f4c349178ff
M: e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 2ba4d782571bf97a68aa1f98670f4cbb207b840f 192.168.24.199:6393
   slots: (0 slots) slave
   replicates ca443c4f54618f40e8682269bbca4033f98cb6d1
S: ddf10a66a459ef277d0aa54ce68feea21fc48a32 192.168.24.199:6395
   slots: (0 slots) slave
   replicates e582ec767bced7cbbc75427947e504d790f2cd03
M: 2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost ~]# 

1台目の Redis サーバーに接続し、クラスタリングのノード状態を確認します。ここでは、192.168.24.199:6390 〜 6392 が master、192.168.24.199:6393 〜 6395 が slave であることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
ddf10a66a459ef277d0aa54ce68feea21fc48a32 192.168.24.199:6395@16395 slave e582ec767bced7cbbc75427947e504d790f2cd03 0 1549117359000 6 connected
2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391@16391 master - 0 1549117359364 11 connected 5461-10922
2ba4d782571bf97a68aa1f98670f4cbb207b840f 192.168.24.199:6393@16393 slave ca443c4f54618f40e8682269bbca4033f98cb6d1 0 1549117359564 4 connected
ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390@16390 myself,master - 0 1549117358000 1 connected 0-5460 [8818-<-2637035585cf77bdf997ddec83455f4c349178ff]
e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392@16392 master - 0 1549117359000 3 connected 10923-16383
ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 192.168.24.199:6394@16394 slave 2637035585cf77bdf997ddec83455f4c349178ff 0 1549117360365 11 connected
[root@localhost ~]# 

マスターサーバーの情報を確認します。役割( role )が master、スレーブ接続( connected_slaves )が 1台であることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.24.199,port=6393,state=online,offset=462,lag=1
master_replid:c32f600edf8ec9add6f4f1a31376ce845811046d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:462
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:462
[root@localhost ~]# 

スレーブサーバーの情報を確認します。役割( role )が slave、マスターへのリンク状態( master_link_status )が Up していることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6393 -a foobared info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.24.199
master_port:6390
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:476
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c32f600edf8ec9add6f4f1a31376ce845811046d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:476
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:476
[root@localhost ~]# 

ファイルオーバーの動作確認

2台目のマスターサーバー( redis_6391 )を停止します。

[root@localhost ~]# systemctl stop redis_6391
[root@localhost ~]# 

1台目の Redis サーバーに接続し、クラスタリングのノード状態を確認します。ここでは、2台目のマスターサーバー( 192.168.24.199:6391 )の状態がfail になり、2台目のスレーブサーバー( 192.168.24.199:6394 )の状態が master に昇格していることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
ddf10a66a459ef277d0aa54ce68feea21fc48a32 192.168.24.199:6395@16395 slave e582ec767bced7cbbc75427947e504d790f2cd03 0 1549111486195 6 connected
ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390@16390 myself,master - 0 1549111484000 1 connected 0-5460
ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 192.168.24.199:6394@16394 master - 0 1549111485592 8 connected 5461-10922
2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391@16391 master,fail - 1549111464326 1549111464125 7 disconnected
e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392@16392 master - 0 1549111485192 3 connected 10923-16383
2ba4d782571bf97a68aa1f98670f4cbb207b840f 192.168.24.199:6393@16393 slave ca443c4f54618f40e8682269bbca4033f98cb6d1 0 1549111487197 4 connected
[root@localhost ~]# 

1台目の Redis サーバーに接続し、クラスタリングの key 配置状況を確認します。ここでは、2台目のマスターサーバー( 192.168.24.199:6391 )の替わり 2台目のスレーブサーバー( 192.168.24.199:6394 )がマスターに昇格し key が配置が引き継がれていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared --cluster info 192.168.24.199:6390
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Could not connect to Redis at 192.168.24.199:6391: Connection refused
*** WARNING: 192.168.24.199:6394 claims to be slave of unknown node ID 2637035585cf77bdf997ddec83455f4c349178ff.
192.168.24.199:6390 (ca443c4f...) -> 1 keys | 5461 slots | 1 slaves.
192.168.24.199:6392 (e582ec76...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 2 masters.
0.00 keys per slot on average.
[root@localhost ~]# 


[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared --cluster info 192.168.24.199:6390 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. Could not connect to Redis at 192.168.24.199:6391: Connection refused 192.168.24.199:6390 (ca443c4f...) -> 1 keys | 5461 slots | 1 slaves. 192.168.24.199:6392 (e582ec76...) -> 1 keys | 5461 slots | 1 slaves. 192.168.24.199:6394 (ad86810b...) -> 1 keys | 5462 slots | 0 slaves. [OK] 3 keys in 3 masters. 0.00 keys per slot on average. [root@localhost ~]#

今度は、先程停止した2台目のマスターであったサーバー( redis_6391 )を起動します。

[root@localhost ~]# systemctl start redis_6391

1台目の Redis サーバーに接続し、クラスタリングのノード状態を確認します。ここでは、2台目のマスターであったサーバー( 192.168.24.199:6391 )はスレーブとなり、マスターに昇格した2台目のスレーブサーバー( 192.168.24.199:6394 )の状態が master のままであることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
ddf10a66a459ef277d0aa54ce68feea21fc48a32 192.168.24.199:6395@16395 slave e582ec767bced7cbbc75427947e504d790f2cd03 0 1549118537171 6 connected
2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391@16391 slave ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 0 1549118537071 15 connected
2ba4d782571bf97a68aa1f98670f4cbb207b840f 192.168.24.199:6393@16393 slave ca443c4f54618f40e8682269bbca4033f98cb6d1 0 1549118536000 4 connected
ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390@16390 myself,master - 0 1549118536000 1 connected 0-5460 [8818-<-2637035585cf77bdf997ddec83455f4c349178ff]
e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392@16392 master - 0 1549118536000 3 connected 10923-16383
ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 192.168.24.199:6394@16394 master - 0 1549118536170 15 connected 5461-8817 8819-10922
[root@localhost ~]# 

1台目の Redis サーバーに接続し、クラスタリングの key 配置状況を確認します。ここでは、マスターに昇格した 2台目のスレーブサーバー( 192.168.24.199:6394 )に key が配置されたままの状態であることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared --cluster info 192.168.24.199:6390
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.24.199:6390 (ca443c4f...) -> 1 keys | 5461 slots | 1 slaves.
192.168.24.199:6392 (e582ec76...) -> 1 keys | 5461 slots | 1 slaves.
192.168.24.199:6394 (ad86810b...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.
[root@localhost ~]# 

今度は、マスターに昇格した 2台目のスレーブサーバー( redis_6394 )を停止します。

[root@localhost ~]# systemctl stop redis_6394

1台目の Redis サーバーに接続し、クラスタリングのノード状態を確認します。ここでは、スレーブに降格した2台目のマスターサーバー( 192.168.24.199:6391 )がマスターに昇格し、マスターに昇格していた2台目のスレーブサーバー( 192.168.24.199:6394 )の状態が fail になっていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
ddf10a66a459ef277d0aa54ce68feea21fc48a32 192.168.24.199:6395@16395 slave e582ec767bced7cbbc75427947e504d790f2cd03 0 1549119323000 6 connected
2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391@16391 master - 0 1549119324769 16 connected 5461-8817 8819-10922
2ba4d782571bf97a68aa1f98670f4cbb207b840f 192.168.24.199:6393@16393 slave ca443c4f54618f40e8682269bbca4033f98cb6d1 0 1549119323768 4 connected
ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390@16390 myself,master - 0 1549119323000 1 connected 0-5460 [8818-<-2637035585cf77bdf997ddec83455f4c349178ff]
e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392@16392 master - 0 1549119323000 3 connected 10923-16383
ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 192.168.24.199:6394@16394 master,fail - 1549119316444 1549119314538 15 disconnected
[root@localhost ~]# 

1台目の Redis サーバーに接続し、クラスタリングの key 配置状況を確認します。ここでは、2台目のマスターサーバー( 192.168.24.199:6391 )に key が配置されていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared --cluster info 192.168.24.199:6390
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Could not connect to Redis at 192.168.24.199:6394: Connection refused
*** WARNING: 192.168.24.199:6391 claims to be slave of unknown node ID ad86810b4fbda0c16caa23a3e0909110ecd5c6dd.
192.168.24.199:6390 (ca443c4f...) -> 1 keys | 5461 slots | 1 slaves.
192.168.24.199:6392 (e582ec76...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 2 masters.
0.00 keys per slot on average.
[root@localhost ~]# 

↓

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared --cluster info 192.168.24.199:6390
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Could not connect to Redis at 192.168.24.199:6394: Connection refused
192.168.24.199:6390 (ca443c4f...) -> 1 keys | 5461 slots | 1 slaves.
192.168.24.199:6391 (26370355...) -> 1 keys | 5462 slots | 0 slaves.
192.168.24.199:6392 (e582ec76...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.
[root@localhost ~]# 

最後に、停止した 2台目のスレーブサーバー( redis_6394 )を起動します。

[root@localhost ~]# systemctl start redis_6394

1台目の Redis サーバーに接続し、クラスタリングのノード状態を確認します。ここでは、2台目のマスターサーバー( 192.168.24.199:6391 )の状態が master のままで、2台目のスレーブサーバー( 192.168.24.199:6394 )の状態が slave になっていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
ddf10a66a459ef277d0aa54ce68feea21fc48a32 192.168.24.199:6395@16395 slave e582ec767bced7cbbc75427947e504d790f2cd03 0 1549119608532 6 connected
2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391@16391 master - 0 1549119609033 16 connected 5461-8817 8819-10922
2ba4d782571bf97a68aa1f98670f4cbb207b840f 192.168.24.199:6393@16393 slave ca443c4f54618f40e8682269bbca4033f98cb6d1 0 1549119607000 4 connected
ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390@16390 myself,master - 0 1549119608000 1 connected 0-5460 [8818-<-2637035585cf77bdf997ddec83455f4c349178ff]
e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392@16392 master - 0 1549119608000 3 connected 10923-16383
ad86810b4fbda0c16caa23a3e0909110ecd5c6dd 192.168.24.199:6394@16394 slave 2637035585cf77bdf997ddec83455f4c349178ff 0 1549119607029 16 connected
[root@localhost ~]#

1台目の Redis サーバーに接続し、クラスタリングの key 配置状況を確認します。ここでは、2台目のマスターサーバー( 192.168.24.199:6391 )に key が配置されたままの状態であることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 -a foobared --cluster info 192.168.24.199:6390
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.24.199:6390 (ca443c4f...) -> 1 keys | 5461 slots | 1 slaves.
192.168.24.199:6391 (26370355...) -> 1 keys | 5462 slots | 1 slaves.
192.168.24.199:6392 (e582ec76...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.
[root@localhost ~]#