Redis分佈式集羣--Redis Cluster高可用集羣

Redis Cluster

Redis3.0版本之前,可以通過Redis Sentinel(哨兵)來實現高可用 ( HA ),從3.0版本之後,官方推出了Redis Cluster,它的主要用途是實現數據分片(Data Sharding),不過同樣可以實現HA,是官方當前推薦的方案

雖然主從複製和哨兵模式完美的解決了Redis的單機問題,但是Redis仍然存在着以下兩個問題:

1、所有的寫操作都集中到主服務器上,主服務器CPU壓力比較大

2、不管是主服務器還是從服務器,它們都同樣保存了redis的所有數據,隨着數據越來越多,可能會出現內存不夠用的問題

在Redis Sentinel模式中,每個節點需要保存全量數據,冗餘比較多,而在RedisCluster模式中,每個分片只需要保存一部分的數據,對於內存數據庫來說,還是要儘量的減少冗餘。在數據量太大的情況下,故障恢復需要較長時間,另外,內存實在是太貴了

RedisCluster的具體實現細節是採用了Hash槽的概念,集羣會預先分配16384個槽,並將這些槽分配給具體的服務節點,通過對Key進行CRC16(key)%16384運算得到對應的槽是哪一個,從而將讀寫操作轉發到該槽所對應的服務節點。當有新的節點加入或者移除的時候,再來遷移這些槽以及其對應的數據。在這種設計之下,我們就可以很方便的進行動態擴容或縮容

在這裏插入圖片描述

操作流程

添加新節點

加偶數個節點(一主一備),避免單點故障

server1

mkdir /usr/local/redis_cluster

mkdir 700{1..6}

cd 7001

vim redis.conf

port 7001

端口7001,7002,7003,7004,7005,7006

cluster-enabled yes

開啓集羣

cluster-config-file nodes.conf

集羣的配置,配置文件首次啓動自動生成 7001,7002,7003,7004,7005,7006

cluster-node-timeout 15000

請求超時 默認15秒,可自行設置

appendonly yes

aof日誌開啓 有需要就開啓,它會每次寫操作都記錄一條日誌

daemonize yes

redis後臺運行

redis-server ./redis.conf

目錄 7002--7006 上述7001操作,編寫配置文件
ps aux
可查看到 7001--7006 全部開啓

創建redis-cluster集羣

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

yes

redis-cli --cluster check 127.0.0.1:7001

檢查所有node
server2爲masker
server4爲slave

server2

redis-cli -p 7002

shutdown

redis-cli --cluster check 127.0.0.1:7001

slave節點server4自動變爲新的master

如果所保存的數據在server2的哈希槽點上,則我們在server4上面也能查找到數據

如果server4也shutdown,則數據不再顯示

如需要顯示所存在數據,則需要開啓server2或server4

或者從新分配哈希槽點,數據會分配在新的server節點上

指定分配哈希槽數量

server1

redis-cli --cluster reshard 127.0.0.1:7001

100(自定義數量)

指定數量

redis-cli --cluster check 127.0.0.1:7001

查看分配數量

注意:

哈希槽數量大小分配不均勻,可能會導致數據同步不一致

平均分配哈希槽數量

server1

redis-cli --cluster rebalance --cluster -threshold 1 --cluster-use-empty-masters 127.0.0.1:7001

redis-cli --cluster check 127.0.0.1:7001

redis-cli -c -p 7001

info

get dataname
查看數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章