Redis Cluster集群
传统Redis集群存在那些问题
Redis哨兵集群模式,每个节点都保存全量同步数据,冗余的数据比较多;而在Redis Cluster模式中集群中采用分片集群模式,可以减少冗余数据,缺点就是构建该集群模式成本非常高
RedisCluster集群数据分片原理
Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.
Redis3.0开始官方推出了集群模式 RedisCluster,原理采用hash槽的概念,预先分配16384个卡槽,并且将该卡槽分配给具体服务的节点;通过key进行crc16(key)%16384 获取余数,余数就是对应的卡槽的位置,一个卡槽可以存放多个不同的key,从而将读或者写转发到该卡槽的服务的节点。 最大的有点:动态扩容、缩容。
传统RedisCluster集群模式环境搭建
摘要:2018年10月 Redis 发布了最新稳定版本 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为使用 C语言编写的 redis-cli的方式,使集群的构建方式复杂度大大降低。
我们先来看一下redis-cluster架构图,如下图所示。可以看到Redis集群是没有统一入口的,采用的是去中心化设计思想,客户端连集群中的哪台设备都行,集群中各个设备之间都定时进行交互,以便知道节点是否还正常工作。
环境搭建开始:
1、安装Redis5.0 安装Redis5.0链接:Linux下安装Redis
2、创建 redis-cluster目录,方便我们管理创建的六个redis实例,并复制一份之前搭建好的redis,重命名为rediscluster
mkdir rediscluster
cd rediscluster/
mkdir redis7000 redis7001 redis7002 redis7003 redis7004 redis7005
3.在文件夹 7000 至 7005 中, 各创建一个 redis.conf 文件,记得将配置中的端口号从 7000 改为与文件夹名字相同的号码。
每个配置文件内容
daemonize yes #后台启动
protected-mode no ; ## 允许外部访问
port 7005 #修改端口号,从7000到7005
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file 7000nodes.conf #自动生成
cluster-node-timeout 15000 #节点通信时间
logfile /usr/rediscluster/redis7005/redis.log
4.启动我们的redis
/usr/redis/bin/redis-server /usr/rediscluster/redis7000/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7001/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7002/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7003/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7004/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7005/redis.conf |
连接一个redis
/usr/redis/bin/redis-cli -h 127.0.0.1 -p 7000 |
(error) CLUSTERDOWN Hash slot not served 说明没有分配hash槽
分配我们hash槽操作:
/usr/redis/bin/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
/usr/redis/bin/redis-cli -h 127.0.0.1 -p 7000 |
修改为Redis的集群方式连接/usr/redis/bin/redis-cli -h 127.0.0.1 -p 7000 –c