Redis集群笔记
首先
阅读Redis集群教程时的笔记。
琐碎的备忘录
-
- 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コマンドを使う。