Redis Cluster
#Redis #あとで書く
概要
deno-redisにRedis Clusterのクライアント実装を追加するにあたって、色々調べてみたので内容をまとめてみます。(#235)
用語
ハッシュスロット
リダイレクションについて
ハッシュスロットの状態について
CLUSTER SETSLOTコマンドでハッシュスロットの状態を変更できます。
MIGRATING
問い合わせされたキーが実際に存在する場合は、クエリを受け入れます。
キーが存在しないときは-ASKリダイレクションエラーを返却します。
IMPORTING
ASKINGコマンドに続けて対象のハッシュスロットが問い合わせられたときのみクエリを受け入れます。
そうでなければ-MOVEDリダイレクションエラーを返却します。
ハッシュスロットの移動
1. 移動先ノードでCLUSTER SETSLOTを実行し、対象ハッシュスロットをIMPORTING状態に設定する
2. 移動元ノードでCLUSTER SETSLOTを実行し、対象ハッシュスロットをMIGRATING状態に設定する
3. CLUSTER GETKEYSINSLOTコマンドで対象ハッシュスロットのキーを取得する
4. MIGRATEコマンドを使って、3で返却されたキーを移動元ノードから移動先ノードへ移動する
5. マイグレーションが完了したら、移動元ノードと移動先ノードへCLUSTER SETSLOTを送信する(CLUSTER SETSLOT <slot> NODE <node-id> 形式)
公式ドキュメント
https://redis.io/topics/cluster-spec
https://redis.io/topics/cluster-tutorial
クライアント実装
ioredis
https://github.com/gosquared/redis-clustr
node-redisベース
go-redis
参考情報
RubyのRedis Client LibraryをCluster Modeに対応させた話