Redis Cluster
- 它是Redis的分布式解決方案,在Redis 3.0版本正式推出的,有效解決了Redis分布式方面的需求。當遇到單機內存、并發、流量等瓶頸時,可以采用Cluster架構達到負載均衡的目的。
- 數據分布理論: 分布式數據庫首要解決把整個數據集按照分區規則映射到多個節點的問題,即把數據集劃分到多個節點上,每個節點負責整個數據的一個子集。常見的分區規則有哈希分區和順序分區。Redis Cluster采用哈希分區規則,因此接下來會討論哈希分區規則。
- 常見的哈希分區有以下幾種: 節點取余分區;一致性哈希分區;虛擬槽分區
順序分區
- 可以順序訪問
- 數據分散,容易傾斜
- 舉例:HBase和bigtable
哈希分布
節點取余
- 數據節點關系變化很大,導致數據遷移,遷移的數量和添加節點有關
- 最好翻倍擴容
一致性哈希分區
- 只影響相鄰節點,但還是會有數據遷移
?
redis采用的虛擬槽分區
- 每一個槽都會映射一個數據子集
- key會根據CRC16(哈希函數)來計算槽范圍
?
redis集群功能限制
- key批量操作支持有限。如:MSET``MGET,目前只支持具有相同slot值的key執行批量操作
- key事務操作支持有限。支持多key在同一節點上的事務操作,不支持分布在多個節點的事務功能
- key作為數據分區的最小粒度,因此不能將一個大的鍵值對象映射到不同的節點。如:hash、list
- 不支持多數據庫空間。單機下Redis支持16個數據庫,集群模式下只能使用一個數據庫空間,即db 0
集群安裝 配置
- 需要最少六臺redis節點,其中三臺用來設置槽的范圍(6380、6381、6382),其余三臺用于Redis cluster(638{3-5})
- 6380,6381,6382作為主節點,6383,6384,6385作為從節點
- 和以往操作一樣,新建一個文件夾,mkdir cluster作為集群安裝的基礎文件夾,在里面以端口進行文件夾的創建
- mkdir -pv {6380,6381,6382,6383,6384,6385}/{conf,data,logs}以端口建文件夾,以及對應的conf、data和logs配套文件夾
- 在6380的文件夾下的conf文件夾下,新建redis.conf文件,輸入的內容如下
daemonize yespidfile /usr/local/redis-4.0.14/cluster/6380/redis.pidport 6380loglevel noticeprotected-mode nologfile "/usr/local/redis-4.0.14/cluster/6380/logs/redis.log"dir /usr/local/redis-4.0.14/cluster/6380/data## 集群模式配置cluster-enabled yescluster-node-timeout 15000cluster-config-file /usr/local/redis-4.0.14/cluster/6380/nodes.conf
- 將其拷貝到其余的集群文件所對應的文件夾下,cp 6380/conf/redis.conf 6381/conf/,此刻是在cluster的文件目錄內進行此操作
- 將redis.conf里面的端口信息使用命令進行修改,別的不需要改變,sed -i 's/6380/6381/g' 6381/conf/redis.conf,以上的兩個操作適用于全部的端口文件
- 在src目錄下,啟動所有的集群服務redis-server /usr/local/redis-4.0.14/cluster/6380/conf/redis.conf,其余的類似
- 使用命令查看狀態ps -ef|grep redis,可以看到,redis的后年會標有【cluster】的標志
- 使用命令,連接到6380接口,redis-cli -p 6380
- ?使用info命令查看相關信息,在redis-cli里面進行操作
- CLUSTER nodes查看集群的節點,前面的字符串是集群ID,在redis-cli里面進行操作
- cluster meet 192.168.33.130 6381,將其余的節點加入到集群中,在redis-cli里面進行操作
- 給每一個集群的節點分配槽,使用命令redis-cli -p 6380 cluster addslots {0..5461},需要退出redis-cli進行操作
- redis-cli -p 6381?cluster addslots {5462..10922}
- redis-cli -p 6382?cluster addslots {10923..16383}
- ?將6383作為6380的從節點,redis-cli -p 6383 cluster replicate 6380的序列號
- 同理將6384和6385配置成為6381和6382的從節點
- 可以使用ruby可以簡化集群配置的流程
集群模式的要求
- 安裝ruby(大于2.2.2)
- 安裝redis 集群配置
- 安裝gem
- 安裝ruby的redis包
- redis-trib.rb構建集群