Redis Cluster 覚え書き

More than 3 years have passed since last update.

Redis Cluster についてのメモ。

Redis 3.0 で正式に追加された機能。

実験的な実装としては以前からあった。


公式情報


概要

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 とか。


更に仕様を詳しく知りたい人へ


ざっと掴みたい人向け


参考記事


チュートリアルやってみた記事


その他参考記事


個人的に気になる点


  • 仕様について


    • 非クラスタのRedisをクラスタ版に置き換える場合、これまでのRedisクライアントは書き替える必要がある?


      • リダイレクトが発生するので、ありそうな話。



    • ある master の系統が slave 含めて全滅したときは勝手にリシャーディングしてくれる?


      • これまで読んだドキュメントの情報だと、クラスタがダウンしそう。

      • たぶん手動で MIGRATE 操作を行って、クラスタのノード数を減らすことはできる






最後に

メモですが、誤りなどありましたらお知らせ下さい。

不定期に更新するかもしれません。