简介
解决了redis单机写入的瓶颈问题,即单机的redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素无中心架构的redis cluster机制,在无中心的redis集群当中,其每个节点保存当前节点数据和整个集群状态,每个节点都和其他所有节点连接
特点
1:所有Redis节点使用(PING机制)互联
2:集群中某个节点的失效,是整个集群中超过半数的节点监测都失效才算真正的失效
3:客户端不需要proxy即可直接连接redis,应用程序需要写全部的redis服务器IP。
4:redis cluster把所有的redis node映射到 0-16383个槽位(slot)上,读写需要到指定的redis node上进行操作,因此有多少个reids node相当于redis 并发扩展了多少倍。
5:Redis cluster预先分配16384个(slot)槽位,当需要在redis集群中写入一个key -value的时候,会使用CRC16(key) mod 16384之后的值,决定将key写入值哪一个槽位从而决定写入哪一个Redis节点上,从而有效解决单机瓶颈
架构
基本架构
假如三个主节点分别是:A, B, C 三个节点,采用哈希槽 (hash slot)的方式来分配16384个slot 的话
它们三个节点分别承担的slot 区间可以是:
节点A覆盖 0-5460
节点B覆盖 5461-10922
节点C覆盖 10923-16383
主从架构
Redis cluster的架构虽然解决了并发的问题,但是又引入了一个新的问题,每个Redis master的高可用如何解决?
那就是对每个master 节点都实现主从复制,从而实现 redis 高可用性
部署redis
前期
1.每个redis node节点采用相同的硬件配置、相同的密码、相同的redis版本。
2.每个节点必须开启的参数
cluster-enabled yes #必须开启集群状态,开启后redis 进程会有cluster显示
cluster-config-file nodes-6380.conf #此文件有redis cluster集群自动创建和维护,不需要任何手动操作
3.所有redis服务器必须没有任何数据
4.先启动为单机redis且没有任何key value
环境
192.168.148.158:6379 192.168.148.158:6380
192.168.148.159:6379 192.168.148.159:6380
192.168.148.160:6379 192.168.148.160:6380
集群搭建
redis-cli --cluster create 192.168.148.158:6379 192.168.148.158:6380 192.168.148.159:6379 192.168.148.159:6380 192.168.148.160:6379 192.168.148.160:6380 --cluster-replicas 1
显示集群信息
redis-cli --cluster check 192.168.148.158:6379
16384 槽位
redis-cli --cluster info 192.168.148.158:6379
非交互
redis-cli -p 192.168.148.158 -p 6379 cluster info
生成配置文件
验证集群写入key
192.168.148.158:6379> set key1 value1 经过算法计算,当前key的槽位需要写入指定的node
(error) MOVED 9189 192.168.148.159:6379 槽位不在当前node所以无法写入
192.168.148.159:6379> set key1 values 指定的node就可以写入
OK
192.168.148.159:6379> keys *
1) "key1"