Redis 分布式方案Redis Cluster
https://redis.io/topics/cluster-tutorial/
Redis Cluster 是在Redis 3.0 的版本正式推出的,用來解決分布式的需求,同時也可以實現(xiàn)高可用。跟Codis 不一樣,它是去中心化的,客戶端可以連接到任意一個可用節(jié)點。
數(shù)據(jù)分片有幾個關(guān)鍵的問題需要解決:
1、數(shù)據(jù)怎么相對均勻地分片
2、客戶端怎么訪問到相應(yīng)的節(jié)點和數(shù)據(jù)
3、重新分片的過程,怎么保證正常服務(wù)
?
架構(gòu)
Redis Cluster 可以看成是由多個Redis 實例組成的數(shù)據(jù)集合。客戶端不需要關(guān)注數(shù)據(jù)的子集到底存儲在哪個節(jié)點,只需要關(guān)注這個集合整體。
以3 主3 從為例,節(jié)點之間兩兩交互,共享數(shù)據(jù)分片、節(jié)點狀態(tài)等信息。
搭建
https://gper.club/articles/7e7e7f7ff7g5egc7g6d
配置
啟動
進入客戶端:
redis-cli -p 7291
redis-cli -p 7292
redis-cli -p 7293
批量插入數(shù)據(jù)
| 集群 | cluster info :打印集群的信息 cluster nodes :列出集群當(dāng)前已知的所有節(jié)點(node),以及這些節(jié)點的相關(guān)信息。 |
| 節(jié)點 | cluster meet <ip> <port> :將ip 和port 所指定的節(jié)點添加到集群當(dāng)中,讓它成為集群的一份子。 cluster forget <node_id> :從集群中移除node_id 指定的節(jié)點(保證空槽道)。 cluster replicate <node_id> :將當(dāng)前節(jié)點設(shè)置為node_id 指定的節(jié)點的從節(jié)點。 cluster saveconfig :將節(jié)點的配置文件保存到硬盤里面。 |
| 槽(slot) | cluster addslots <slot> [slot ...] :將一個或多個槽(slot)指派(assign)給當(dāng)前節(jié)點。 cluster delslots <slot> [slot ...] :移除一個或多個槽對當(dāng)前節(jié)點的指派。 cluster flushslots :移除指派給當(dāng)前節(jié)點的所有槽,讓當(dāng)前節(jié)點變成一個沒有指派任何槽的節(jié)點。 cluster setslot <slot> node <node_id> :將槽slot 指派給node_id 指定的節(jié)點,如果槽已經(jīng)指派給另一個 節(jié)點,那么先讓另一個節(jié)點刪除該槽>,然后再進行指派。 cluster setslot <slot> migrating <node_id> :將本節(jié)點的槽slot 遷移到node_id 指定的節(jié)點中。 cluster setslot <slot> importing <node_id> :從node_id 指定的節(jié)點中導(dǎo)入槽slot 到本節(jié)點。 cluster setslot <slot> stable :取消對槽slot 的導(dǎo)入(import)或者遷移(migrate)。 |
| 鍵 | cluster keyslot <key> :計算鍵key 應(yīng)該被放置在哪個槽上。 cluster countkeysinslot <slot> :返回槽slot 目前包含的鍵值對數(shù)量。 cluster getkeysinslot <slot> <count> :返回count 個slot 槽中的鍵 |
問題:Cluster 解決分片的問題,數(shù)據(jù)怎么分布?
數(shù)據(jù)分布
如果是希望數(shù)據(jù)分布相對均勻的話,我們首先可以考慮哈希后取模。
?
總結(jié)
以上是生活随笔為你收集整理的Redis 分布式方案Redis Cluster的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis中的代理Sharding
- 下一篇: Redis数据分布哈希后取模