Redis三種集群模式-Cluster集群模式
一、 在之前有看到過redis集群部署的三種方案,不過性能最高的還是redis官方推薦的redis-cluster,性能最高,下面介紹一下redis-cluster這種模式。
1、redis-cluster
A、采用去中心化的思想,沒有中心節點的說法,它使用hash slot方式將16348個hash slot覆蓋到所有節點上,對於存儲的每個key值,使用CRC16(KEY)&16348=slot得到他對應的hash slot,
並在訪問key的時候就去找他的hash slot在哪一個節點上,然后由當前訪問節點從實際被分配了這個hash slot的節點去取數據,節點之間使用輕量協議通信 減少帶寬占用 性能很高,
自動實現負載均衡與高可用,自動實現failover並且支持動態擴展。
B、其內部中也需要配置主從,並且內部也是采用哨兵模式,如果有半數節點發現某個異常節點,共同決定更改異常節點的狀態,如果改節點是主節點,則對應的從節點自動頂替為主節點,當原先的主節點上線后,則會變為從節點。
如果集群中的master沒有slave節點,則master掛掉后整個集群就會進入fail狀態,因為集群的slot映射不完整。如果集群超過半數以上的master掛掉,無論是否有slave,集群都會進入fail狀態。
C、根據官方推薦 集群部署至少要3台以上的master節點。那么接下來就開始部署吧
2、在每一路徑下我們添加一下配置文件
都為: redis.conf
二、集群配置
cd /usr/software/redis/redis-cluster/
1.創建目錄
/usr/software/redis/redis-cluster/1001
/usr/software/redis/redis-cluster/1002
/usr/software/redis/redis-cluster/1003
/usr/software/redis/redis-cluster/1004
/usr/software/redis/redis-cluster/1005
/usr/software/redis/redis-cluster/1006
2.修改redis.conf
cd /usr/software/redis/redis-cluster/1001
vim redis.conf
#修改如下鍵值對
################################## NETWORK ##################################### #bind 127.0.0.1 protected-mode no port 1001 ################################# GENERAL ##################################### daemonize yes pidfile "/var/run/redis_1001.pid" logfile "/usr/software/redis/redis-cluster/1001/log/redis.log" ################################ SNAPSHOTTING ################################ dir "/usr/software/redis/redis-cluster/1001/data" ################################ REDIS CLUSTER ############################### cluster-enabled yes cluster-config-file nodes-1001.conf cluster-node-timeout 15000 ################################## SECURITY ################################### requirepass "ww"
其他幾個實例的配置文件修改以下配置即可(需要自己創建log,data目錄):
port 100x pidfile "/var/run/redis_100x.pid"
logfile "/usr/software/redis/redis-cluster/100x/log/redis.log" dir "/usr/software/redis/redis-cluster/100x/data" cluster-config-file nodes-100x.conf
三、集群啟動
1、使用redis-server /usr/software/redis/redis-cluster/1001/redis.conf ...將所有節點啟動

2、啟動后我們就可以創建集群啦
注意:在redis5.0后 創建集群統一使用redis-cli,之前的版本使用redis-trib.rb,但是需要安裝ruby軟件相對復雜,相比之前的版本5.0不需要安裝額外的軟件,方便。具體的可以參照redis官方網站查看 https://redis.io/topics/cluster-tutorial
創建集群命令:其中 cluster-replicas 1 代表 一個master后有幾個slave,1代表為1個slave節點
redis-cli --cluster create 127.0.0.1:1001 127.0.0.1:1002 127.0.0.1:1003 127.0.0.1:1004 127.0.0.1:1005 127.0.0.1:1006 --cluster-replicas 1 -a ww
第一次由於沒有設置 -a ww 添加密碼,集群創建失敗,
過程中會提示以下內容,輸入 yes 繼續;
Can I set the above configuration? (type 'yes' to accept): yes
集群自動分配結果如下:
3、驗證集群是否創建成功
首先查看一下主從配對情況
執行 :redis-cli -c -p 1001 -a ww
數據自動分配到1002節點,連接也轉移到1002 節點
4、驗證故障轉移
結論是主節點故障后,下掛從節點會升級成主節點,並接替主節點的槽位。舊主節點上線后,也只能作為其從節點。
kill 掉1001 ,發現其從節點1004轉為了master
重新啟動1001,其變成slave節點