Redis:Redis集群模式(Cluster)原理
1.前言
由于Redis主從復(fù)制模式和Redis哨兵模式采用的都是復(fù)制Master節(jié)點(diǎn)的數(shù)據(jù),實(shí)現(xiàn)讀寫分離。但是這種設(shè)計(jì)存在一個(gè)嚴(yán)重的問題,它沒有真正意義上實(shí)現(xiàn)數(shù)據(jù)分片。兩個(gè)模式都有一個(gè)問題,不能水平擴(kuò)容,并且這兩個(gè)模式的高可用特性都會(huì)受到Master主節(jié)點(diǎn)內(nèi)存的限制。Redis較難支持在線擴(kuò)容,在集群容量達(dá)到上限時(shí)在線擴(kuò)容會(huì)變得很復(fù)雜。所有Redis集群模式就是用來解決這個(gè)問題。
2. Redis Cluster集群模式
Redis Cluster是一種服務(wù)器Sharding技術(shù),3.0版本開始正式提供。Redis集群搭建的方式有多種,例如使用zookeeper等,但從redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用無中心結(jié)構(gòu),每個(gè)節(jié)點(diǎn)保存數(shù)據(jù)和整個(gè)集群狀態(tài),每個(gè)節(jié)點(diǎn)都和其他所有 節(jié)點(diǎn)連接。其redis-cluster架構(gòu)圖如下:
在這個(gè)圖中,每一個(gè)藍(lán)色的圈都代表著一個(gè)redis的服務(wù)器節(jié)點(diǎn)。它們?nèi)魏蝺蓚€(gè)節(jié)點(diǎn)之間都是相互連通的。客戶端可以與任何一個(gè)節(jié)點(diǎn)相連接,然后就可以訪問集群中的任何一個(gè)節(jié)點(diǎn)。對其進(jìn)行存取和其他操作。
其結(jié)構(gòu)特點(diǎn):
2.1 Redis集群數(shù)據(jù)分片
在redis的每一個(gè)節(jié)點(diǎn)上,都有這么兩個(gè)東西,一個(gè)是插槽(slot)可以理解為是一個(gè)可以存儲兩個(gè)數(shù)值的一個(gè)變量這個(gè)變量的取值范圍是:0-16383。還有一個(gè)就是cluster,可以理解為是一個(gè)集群管理的插件。當(dāng)我們的存取的key到達(dá)的時(shí)候,redis會(huì)根據(jù)crc16的算法得出一個(gè)結(jié)果,然后把結(jié)果對 16384 求余數(shù),這樣每個(gè) key 都會(huì)對應(yīng)一個(gè)編號在 0-16383 之間的哈希槽,通過這個(gè)值,去找到對應(yīng)的插槽所對應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作。
如果Redis是Redis Cluster的話,是有好多個(gè)redis一起工作的,那么,就需要這個(gè)集群不是那么容易掛掉,所以呢,理論上就應(yīng)該給集群中的每個(gè)節(jié)點(diǎn)至少一個(gè)備用的Slave redis服務(wù)。這個(gè)備用的redis稱為從節(jié)點(diǎn)(slave)。
2.2 Redis Cluster 備份容錯(cuò)機(jī)制
每一個(gè)節(jié)點(diǎn)都存有這個(gè)集群所有主節(jié)點(diǎn)以及從節(jié)點(diǎn)的信息。
它們之間通過互相的ping-pong判斷是否節(jié)點(diǎn)可以連接上。如果有一半以上的節(jié)點(diǎn)去ping一個(gè)節(jié)點(diǎn)的時(shí)候沒有回應(yīng),集群就認(rèn)為這個(gè)節(jié)點(diǎn)宕機(jī)了,然后去連接它的備用節(jié)點(diǎn)。如果某個(gè)節(jié)點(diǎn)和所有從節(jié)點(diǎn)全部掛掉,我們集群就進(jìn)入Fail狀態(tài)。還有就是如果有一半以上的主節(jié)點(diǎn)宕機(jī),那么我們集群同樣進(jìn)入Fail狀態(tài)。這就是我們的redis的投票機(jī)制,具體原理如下圖所示:
- 投票過程是集群中所有master參與,如果半數(shù)以上master節(jié)點(diǎn)與master節(jié)點(diǎn)通信超時(shí)(cluster-node-timeout),認(rèn)為當(dāng)前master節(jié)點(diǎn)掛掉.
總結(jié)
以上是生活随笔為你收集整理的Redis:Redis集群模式(Cluster)原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis:哨兵模式(Sentinel)
- 下一篇: Redis:一致性Hash算法