Redis Clusterを運用する際のコマンド集

Redis Clusterを運用する際のコマンド集


こんにちは。イノベーションラボの坂村ともうします。MyRefer (https://i-myrefer.jp)というリファーラルリクルーティングサービスの開発を担当しています。

今回は、Redis3.0から導入されたRedis Clusterを運用するうえで、クラスター操作系のコマンドをピックアップしてご紹介したいと思います。

さきほどあげましたMyReferではWEBのセッション管理などでRedis Clusterを使っています。こんな感じ。

redis_dgl

Redis Clusterの仕様上、クラスタリングを組むのにマスターが3インスタンス必要で、さらに各マスターに対してスレーブを割り当てると、構成はどこもこんな感じで落ち着くんではないでしょうか。

セットアップについてはALBERTさんのエントリーが参考になります。

 

Redis Clusterに接続(前準備)

redis-cli -c -p ポート番号

-c     cluster構成では-cをつけて接続します。

-p     ポート指定。デフォルトでは6379に接続するので必須ではないんですが、同一サーバーに複数インスタンスをポートを変えて起動するような場合は、接続するときにポートを指定する必要があります。

 

状態を確認する

cluster info

cluster全体の状態を確認できます。

127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:20
cluster_my_epoch:18
cluster_stats_messages_sent:2372539
cluster_stats_messages_received:2369185

問題があるとcluster_stateがfailと表示されます。ただし、マスターがダウンして対応するスレーブが昇格してる場合は、クラスターの構成自体は問題ないのでok表示のままなので注意が必要です。その場合次のcluster nodesで各ノード(クラスターを構成するインスタンス)を確認します。

cluster nodes

各ノードの情報が表示されます。

左から4つが構成上の情報です。

  • ノードID
  • サーバー:ポート
  • スレーブ/マスター
  • スレーブの場合は対応するマスターのノードID(マスターは「-」)
127.0.0.1:6379> cluster nodes
9683f726a2a22c93c85f3a1e6d6def830383e3c8 192.168.30.10:7002 slave 793e365f92b70de819be0bee00042e021d1e1840 0 1454411294013 16 connected
d58d5346169075ec8d8713e917393da61a0ab366 192.168.30.12:6379 master,fail - 1454411255705 1454411254906 20 disconnected
793e365f92b70de819be0bee00042e021d1e1840 192.168.30.13:6379 master - 0 1454411295519 16 connected 10923-16383
b7bbd0fc1ae02227200c973840924c20095da75b 192.168.30.10:7000 slave c2ef80adfa2c2a3029c0f816c4a42ba4f94daac5 0 1454411295017 18 connected
ce35c0df71fd9074ee465fbabaf41d9fb743e55c 192.168.30.10:7001 master - 0 1454411295017 21 connected 5461-10922
c2ef80adfa2c2a3029c0f816c4a42ba4f94daac5 192.168.30.11:6379 myself,master - 0 0 18 connected 0-5460

ためしにd58d5346169075ec8d8713e917393da61a0ab366のインスタンスを落としてみました。failと表示されています。myselfと表示されているのはredis-cli -cを実行して接続したノードになります。

cluster slaves マスターnode

マスターとスレーブの対応を手っ取り早く知りたいときはこのコマンドを使います。

127.0.0.1:6379> cluster slaves 793e365f92b70de819be0bee00042e021d1e1840
1) “9683f726a2a22c93c85f3a1e6d6def830383e3c8 192.168.30.10:7002 slave 793e365f92b70de819be0bee00042e021d1e1840 0 1454412272104 16 connected”

これがempty setと返ってくると、障害時にクラスターダウンになるので後述のcluster replicateで対応するスレーブを設定します。

 

スレーブをマスターに昇格させる

マスターがダウンしているのにスレーブが昇格されなくてcluster downになる場合は即座に手運用で対応する必要があります。(なんで昇格できないのかは調査中です。)

cluster failover force スレーブnode

cluster全体の整合性を担保した上でスレーブをマスターにする。これでも昇格できなかったらtakeoverモードを試します。

cluster failover takeover スレーブnode

有無を言わさず指定のスレーブをマスターにします。これを実行するとマスターとスレーブの関係が崩れてしまうので後述のcluster replicateコマンドでスレーブを設定させる必要があります。

 

マスターにスレーブを登録する

cluster replicate node

強制的にレプリケートしたり構成変更したときにマスターとスレーブの関係を再設定してやります。このコマンドを実行して、cluster nodesコマンドやcluster slavesコマンドでスレーブに登録されたか確認して問題なければ再設定完了です。

 

その他

http://redis.io/commands/

こちらに英語ですがすべてのコマンドが網羅されています。cluster操作系のコマンドは「cluster」から始まるやつですね。

 

まだ使い始めて半年くらいですが、今後も使える情報がありましたらブログで公開していきたと思います。