Redis 5でのCluster構築


Redis 5でのCluster構築

ElastiCacheなんて便利なものがあるんですが、ローカルでフェイルオーバーなどの検証を行おうとしたところ、
構築構築のまとまった情報が少なかったため備忘録を残します。

環境

OS: CentOS 7
Master Node: 3個
Slave Node: 3個

1OS上にMaster1個、Slave1個という形で構築します。

あとMaster2個で作ろうとしたら怒られたので3個にしてます。
ElastiCacheだと2シャードいけるのに。

前提条件

  • firewalldが止まってるか、6379、6380、16379、16380が解放されいる
  • selinuxが無効になっている

インストール

デフォルトのyumリポジトリにはRedis 5はないため、epelとremiのリポジトリを追加します。

yum -y install epel-release
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

redisパッケージのバージョンを確認します。
Versionが5以上になっていれば大丈夫です。

yum info redis --enablerepo=remi

そしてインストール。

yum -y install redis --enablerepo=remi

設定

1サーバー上に2つのredisを立ち上げるため、設定ファイルを2つ用意します。

mkdir -p /opt/redis/6379 /opt/redis/6380

cp -p /etc/redis.conf /opt/redis/6379/
cp -p /etc/redis.conf /opt/redis/6380/

6380ポートで実行できるように設定を上書きします。

sed -i 's/6379/6380/g' /opt/redis/6380/redis.conf

cluster modeをon、listenするネットワークポートの変更を行います。

sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' /opt/redis/6379/redis.conf
sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' /opt/redis/6380/redis.conf
sed -i 's/# cluster-config-file/cluster-config-file/g' /opt/redis/6379/redis.conf
sed -i 's/# cluster-config-file/cluster-config-file/g' /opt/redis/6380/redis.conf

sed -i 's/bind 127.0.0.1/bind {{ listenするIPアドレス }} 127.0.0.1/g' /opt/redis/6379/redis.conf
sed -i 's/bind 127.0.0.1/bind {{ listenするIPアドレス }} 127.0.0.1/g' /opt/redis/6380/redis.conf

必要であればmaxmemoryも設定してください。

起動

特筆することはありません。
systemdで起動のコントロールをしたい人は別の記事を見てください。

redis-server /opt/redis/6379/redis.conf &
redis-server /opt/redis/6380/redis.conf &

クラスターの構築

Masterの構築

まずはMaster Nodeを構築します。
4まではredis-trib.rbを使って構築していたようですが、5からはredis-cliでやります。

redis-cli --cluster create 192.168.10.1:6379 192.168.10.2:6379 192.168.10.3:6379

Can I set the above configuration? (type 'yes' to accept):

とでたらyesと入力します。

状態の確認

現在の状況を確認します。cluster nodesコマンドで3行返却されれば大丈夫です。

redis-cli cluster nodes
b4134b8ae3d45099b89e80f723ffbd6f92802e9d 192.168.10.3:6379@16379 master - 0 1548208242137 3 connected 10923-16383
6db9b1aac4d272849300bb48d63ecd95c4c1ec94 192.168.10.2:6379@16379 master - 0 1548208241129 2 connected 5461-10922
237bbdb084091869e837a3ddf90e10f59f31ee64 192.168.10.1:6379@16379 myself,master - 0 1548208240000 1 connected 0-5460

Slaveの登録

続いてSlaveを登録します。
今回は下記のようにせってします。

192.168.10.1:6379 → 192.168.10.2:6380
192.168.10.2:6379 → 192.168.10.3:6380
192.168.10.3:6379 → 192.168.10.1:6380

redis-cli --cluster add-node 192.168.10.2:6380 192.168.10.1:6379 --cluster-slave
redis-cli --cluster add-node 192.168.10.3:6380 192.168.10.2:6379 --cluster-slave
redis-cli --cluster add-node 192.168.10.1:6380 192.168.10.3:6379 --cluster-slave

状態の確認

もう一度、クラスターの状態を確認します。

redis-cli cluster nodes
237bbdb084091869e837a3ddf90e10f59f31ee64 192.168.10.1:6379@16379 master - 0 1548208917915 1 connected 0-5460
f0255000fa18959cb273e1a1555eb84884e261e9 192.168.10.3:6380@16380 slave 6db9b1aac4d272849300bb48d63ecd95c4c1ec94 0 1548208918921 2 connected
b4134b8ae3d45099b89e80f723ffbd6f92802e9d 192.168.10.3:6379@16379 master - 0 1548208916000 3 connected 10923-16383
6ff367f62dc46a07a8030c2985e1fbcb9f899c68 192.168.10.2:6380@16380 slave 237bbdb084091869e837a3ddf90e10f59f31ee64 0 1548208918000 1 connected
763bff12eea4ca5c821a6a5b9eeafdf8f44bf5b0 192.168.10.1:6380@16380 slave b4134b8ae3d45099b89e80f723ffbd6f92802e9d 0 1548208917000 3 connected
6db9b1aac4d272849300bb48d63ecd95c4c1ec94 192.168.10.2:6379@16379 myself,master - 0 1548208918000 2 connected 5461-10922

参考