はじめに
Redis cluster tutorialを読んだときのメモ。
雑多なメモ
- Redisのクラスタは、以下の機能を提供する。
- 複数のノード間でデータセットを自動的に分割する。
- ノードが障害に直面したり残りのクラスタと通信できなくなったときに、操作を継続する。
- ただし、マスターノードの大部分がダウンしているような状況では、Clusterは停止する。
- 二つのTCPポートを使用する。一つは、クライアントとの対話のための通常のポート、もう一つはノード間のクラスタバス通信で使用する。
- クラスタバス通信は、誤り検出や、設定更新などの目的で行う。
- クライアントとの対話のためのポート番号が
6379
の場合、クラスタバスのポートは16379
となる。 - オフセットは
10000
固定である。
- Redisクラスタは、一貫性のあるハッシュは使わないが、ハッシュスロットと呼ばれるシャーディング形式を使う。
- ハッシュスロットは、
16384
個ある。 - ノードは、簡単に追加や削除が可能である。
- ノードを削除する場合は、削除するノードのハッシュスロットを他のノードに割り当てることにより、削除することが出来る。
- ダウンタイム無しに、ノードの操作することができる。
-
ハッシュタグ
と呼ばれる概念を使うことにより、複数キーを強制的に同じスロットに割り当てることが出来る。- ハッシュタグとは、
{}
で囲まれた部分文字列である。 - 例えば、
this{foo}key
とanother{foo}key
は、同じハッシュスロットに割り当てられることが保証される。
- ハッシュタグとは、
- マスターノードの一部が落ちたり、大部分のノードと通信できなくなったとき、継続して利用できるように、Redisクラスタは、マスタースレーブモデルを利用する。全てのハッシュスロットは、1(マスターノード)からN(スレーブノード)のレプリカを持つ。
- 例えば、マスター
B
のスレーブをB1
とすると、B
が落ちた場合、B1がマスターに昇格する。 - ただし、
B
とB1
が同時に落ちた場合は、処理を継続することはできない。
- 例えば、マスター
- Redisクラスタは、強い一貫性を担保することは出来ない。つまり、特定の条件において、Redisクラスタは書き込みに失敗する。それは、非同期レプリケーションを利用するためである。
- 例えば、あるデータのスレーブへの書き込みが失敗し、その後、そのスレーブがマスターに昇格した場合は、そのデータは永遠に失われる。
- 速度と一貫性のトレードオフである。どうしても同期書き込みを使いたい場合は、
WAIT
コマンドを使う。