Redis在3.0版正式引入redis-cluster集群這個特性。Redis集群是一個提供在多個Redis間節點間共享數據的程序集。Redis集群是一個分布式(distributed)、容錯(fault-tolerant)的Redis內存K/V服務,集群可以使用的功能是普通單機Redis所能使用的功能的一個子集(subset),比如Redis集群并不支持處理多個keys的命令,因為這需要在不同的節點間移動數據,從而達不到像Redis那樣的性能,在高負載的情況下可能會導致不可預料的錯誤。還有比如set里的并集(unions)和交集(intersections)操作,就沒有實現。通常來說,那些處理命令的節點獲取不到鍵值的所有操作都不會被實現。在將來,用戶或許可以通過使用MIGRATE COPY命令,在集群上用計算節點(Computation Nodes) 來執行多鍵值的只讀操作, 但Redis集群本身不會執行復雜的多鍵值操作來把鍵值在節點間移來移去。Redis集群不像單機版本的Redis那樣支持多個數據庫,集群只有數據庫0,而且也不支持SELECT命令。Redis集群通過分區來提供一定程度的可用性,在實際環境中當某個節點宕機或者不可達的情況下繼續處理命令。
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也存在這種切換場景。
#hosts文件配置
cat >> /etc/hosts << EOF 192.168.5.65 redis65 192.168.5.66 redis65 EOF
一、搭建redis5.0集群
從redis 3.0之后版本支持redis-cluster集群,redis-4.0.0開始支持module,redis-5.0.0開始支持類似于kafka那樣的消息隊列,Redis-Cluster采用無中心結構,每個節點保存數據和整個集群狀態,每個節點都和其他所有節點連接。這樣就可以很好的保證redis的高可用性,下面就來部署個Redis Cluster,在兩臺服務器上部署6個redis節點
IP和端口配置文件名