介紹
redis自3.0版本以來支持主從模式的集群,可用哨兵監控集群健康狀態,但這種方式的集群很不成熟,數據備份需要全量拷貝。在之后的版本才真正支持集群分片。
在redis5.0中去除了以redis-trib.rb作為搭建集群的工具,全部整合到了redis-cli中,這極大地簡化了集群環境的搭建,特別是對不懂ruby語言的小伙伴們(但是ruby以及zlib還是需要安裝的)。
Redis集群的優點:
無中心架構,分布式提供服務。數據按照slot存儲分布在多個redis實例上。增加slave做standby數據副本,用於failover,使集群快速恢復。實現故障auto failover,節點之間通過gossip協議交換狀態信息;投票機制完成slave到master角色的提升。支持在線增加或減少節點。降低硬件成本和運維成本,提高系統的擴展性和可用性。
Redis集群的缺點:
client實現復雜,驅動要求實現smart client,緩存slots mapping信息並及時更新。目前僅JedisCluster相對成熟,異常處理部分還不完善,比如常見的“max redirect exception”。客戶端的不成熟,影響應用的穩定性,提高開發難度。節點會因為某些原因發生阻塞(阻塞時間大於clutser-node-timeout),被判斷下線。這種failover是沒有必要,sentinel也存在這種切換場景。
redis.conf的基本配置
但是注意每台服務器要根據不同的端口進行修改redis.conf:
#這里的bind指的是只有指定的網段才能遠程訪問這個redis,注釋掉后,就沒有這個限制了。 #bind 127.0.0.1 #開啟遠程訪問 protected-mode no #修改端口 port 7001 #設置后台運行 daemonize yes #設置pidfile存放在 run目錄下的文件名 pidfile /var/run/redis_7001.pid #設置redis集群密碼 注意:所有節點的密碼都必須一致,masterauth也要加 masterauth 123456 requirepass 123456
#集群下只支持單數據庫,這個配置需要注意
#databases 16
#設置開啟AOF模式 appendonly yes #設置啟用集群模式 cluster-enabled yes,開啟配置文件cluster-config-file nodes.conf 注意不同端口節點修改不同文件名稱,超時時間 cluster-node-timeout 5000 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000
首先,我們來看一下創建集群命令中 --replicas 1,這個代表什么意思呢?1其實代表的是一個比例,就是主節點數/從節點數的比例。那么想一想,在創建集群的時候,哪些節點是主節點呢?哪些節點是從節點呢?答案是將按照命令中IP:PORT的順序,先是3個主節點,然后是3個從節點。這一點可以通過上面的2張圖片印證。
其次,注意到圖中slot的概念。slot對於Redis集群而言,就是一個存放數據的地方,就是一個槽。對於每一個Master而言,會存在一個slot的范圍,而Slave則沒有。在Redis集群中,依然是Master可以讀、寫,而Slave只讀。數據的寫入,實際上是分布的存儲在slot中,這和以前1.X的主從模式是不一樣的(主從模式下Master/Slave數據存儲是完全一致的),因為Redis集群中3台Master的數據存儲並不一樣。這一點將在后續的實驗中得到驗證。
容災和自動恢復
學習連接