Redis Cluster についてのメモ。
Redis 3.0 で正式に追加された機能。
実験的な実装としては以前からあった。
公式情報
- (release) Redis 3.0.0 is out. - Google グループ ... Redis 3.0.0 リリースアナウンス。
- Redis Cluster Specification ... 仕様詳細
- Redis cluster tutorial ... クラスタ機能を試すことができるチュートリアル
概要
Redis Cluster 機能を使うと、Redis インスタンスをクラスタリングすることができる。
通常のレプリケーション構成ではなく、複数の master ノードを束ねて協調動作させ、クラスタ全体で保持するデータ量をスケールアウトさせることができる。
特徴
- Redis の単一キーのコマンドはすべてサポート
- Redis の複数キーのコマンドはキーがすべて同じノードにあれば OK
- 全ノードがクライアントからのリクエストを受け付ける
- 自分がデータを持ってない場合、エラーを返して正しいノードにリダイレクトさせる
- リクエストを正しいノードにプロキシすることはしない
- 自分がデータを持ってない場合、エラーを返して正しいノードにリダイレクトさせる
- 全ノードがお互いに通信する
- Gossip プロトコル
- master/slave, フェールオーバー
- 各masterに1つ以上のslaveをレプリケーションさせることができる
- master ダウン時は slave にフェールオーバーする
- slave が1台もいなくなった場合、他の master の slave が複数いれば、slave を譲り受けることができる。Replica Migration
- リシャーディング機能
- ノードを追加してデータを再配置し、スケールアウトすることができる
- 設計思想
- 1000ノードオーダーでスケールアウト可能
- 書き込み安全性、可用性も担保する
他の分散KVSとの違い
以下が特徴的だと思う。
- ノードに master/slave の role があること
- リクエストに対するデータを持っていないノードに問い合わせたとき、正しいノードにリダイレクトされる。
他の分散KVSだと、ノードに role の区別はなく、データの在り処を内部的に解決して返してくれる、というものが多いような気がする。
Cassandra とか、 Riak とか。
更に仕様を詳しく知りたい人へ
ざっと掴みたい人向け
- Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barcelona 2014 ... 2014年11月に発表された作者によるクラスタ機能解説のスライド(31P)
- Redisのクラスタリング — redis 2.0.3 documentation ... もうだいぶ古くなってしまった情報ですが、概念はあまり変わってないと思います。参考程度に。
参考記事
-
Redis Cluster の構築と利用(Redis 3.0.0) - ALBERT Engineer Blog
- チュートリアルの内容に加えて、基本的な仕様の解説がまとまっていると思います
-
Redis Cluster のリシャーディングとorphaned masterの話 - CyberAgent エンジニア Advent Calendar 2014 2日目
- 昨年12月の記事。Redis のバージョンは 3.0.0 RC1 と 3.0.0 beta-3
- リシャーディング機能、レプリカ・マイグレーションについて実際に動かしたときの挙動を詳しく解説している
-
[WIP] Redis Cluster Specification を翻訳してみる
- 公式仕様を最初の3割ぐらい日本語化してみたもの
チュートリアルやってみた記事
- redis clusterの作り方 - Qiita
-
RedisClusterをちょっとだけ試してみる。 - peropero
- 2013年12月なので、ちょっと古い。このときは unstable だったことが伺える。
その他参考記事
-
Redis cluster, no longer vaporware. - Antirez weblog
- 2014年10月ごろの作者によるブログ投稿記事
- 2011年3月から始まった Redis Cluster 開発の歴史について
個人的に気になる点
- 仕様について
- 非クラスタのRedisをクラスタ版に置き換える場合、これまでのRedisクライアントは書き替える必要がある?
- リダイレクトが発生するので、ありそうな話。
- ある master の系統が slave 含めて全滅したときは勝手にリシャーディングしてくれる?
- これまで読んだドキュメントの情報だと、クラスタがダウンしそう。
- たぶん手動で MIGRATE 操作を行って、クラスタのノード数を減らすことはできる
- 非クラスタのRedisをクラスタ版に置き換える場合、これまでのRedisクライアントは書き替える必要がある?
最後に
メモですが、誤りなどありましたらお知らせ下さい。
不定期に更新するかもしれません。