當前位置:商標查詢大全網 - 健康百科 - Redis-Cluster

Redis-Cluster

是壹種去中心化的集群架構

Redis Cluster 的性能與單節點部署是同級別的。

多主節點、負載均衡、讀寫分離

Redis Cluster 支持標準的 主從復制配置來保障高可用和高可靠。

failover (故障轉移)

Redis Cluster 也實現了壹個類似 Raft 的***識方式,來保障整個集群的可用性。

向 Redis Cluster 中添加新節點,或者移除節點,都是透明的,不需要停機。

水平、垂直方向都非常容易擴展。

數據分區,海量數據存儲

部署 Redis Cluster 不需要其他的代理或者工具,而且 Redis Cluster 和單機 Redis 幾乎完全兼

容。

角色: master、slave

Redis Cluster 由多個Redis節點組構成,是壹個P2P(point to point)無中心節點的集群架構,依靠Gossip協議傳播集群

Gossip協議是壹個通信協議,壹種傳播消息的方式。

思想啟發於:病毒傳播

這些收到信息的節點接下來會做同樣的事情,即把這些信息傳遞給其他壹些隨機選擇的節點。

信息會周期性的傳遞給N個目標節點。這個N被稱為fanout(扇出)

gossip協議包含多種消息,包括meet、ping、pong、fail、publish等等

通過gossip協議,cluster可以提供 集群間狀態同步更新 選舉自助failover 等重要的集群功能。

分布式架構設計中,核心問題即為如何分片數據。在技術的更替中出現過以下分布式hash算法:

redis-cluster把所有的物理節點映射到[0-16383]個slot上,基本上采用平均分配和連續分配的方式。

slot槽必須在節點上連續分配,如果出現不連續的情況,則RedisCluster不能工作。

采用 raft 協議(參照Paxos算法 /p/40c658c9dcc2 )

當slave 收到過半的master 同意時,會成為新的master。此時會以最新的Epoch 通過PONG 消息廣播自己成為master,讓Cluster 的其他節點盡快的更新拓撲結構(node.conf)。

就是上面講的從節點選舉

人工故障切換是預期的操作,而非發生了真正的故障,目的是以壹種安全的方式(數據無丟失)將當前master節點和其中壹個slave節點(執行cluster-failover的節點)交換角色

1、向從節點發送cluster failover 命令(slaveof no one)

2、從節點告知其主節點要進行手動切換(CLUSTERMSG_TYPE_MFSTART)

3、主節點會阻塞所有客戶端命令的執行(10s)

4、從節點從主節點的ping包中獲得主節點的復制偏移量

5、從節點復制達到偏移量,發起選舉、統計選票、贏得選舉、升級為主節點並更新配置

6、切換完成後,原主節點向所有客戶端發送moved指令重定向到新的主節點

以上是在主節點在線情況下。

如果主節點下線了,則采用cluster failover force或cluster failover takeover 進行強制切換。

擴容

擴容節點數據必須為空

縮容

只能刪除數據為空的節點

我們知道在壹主壹從的情況下,如果主從同時掛了,那整個集群就掛了。

為了避免這種情況我們可以做壹主多從,但這樣成本就增加了。

Redis提供了壹種方法叫副本漂移,這種方法既能提高集群的可靠性又不用增加太多的從機。

Master1宕機,則Slaver11提升為新的Master1

集群檢測到新的Master1是單點的(無從機)

集群從擁有最多的從機的節點組(Master3)中,選擇節點名稱字母順序最小的從機(Slaver31)漂移

到單點的主從節點組(Master1)。

具體流程如下(以上圖為例):

1、將Slaver31的從機記錄從Master3中刪除

2、將Slaver31的的主機改為Master1

3、在Master1中添加Slaver31為從節點

4、將Slaver31的復制源改為Master1

5、通過ping包將信息同步到集群的其他節點