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
Redis集群配置参数
cluster-enabled
<yes/no>
:如果yes:则在特定的Redis实例中启用Redis Cluster支持。no:该实例将像往常一样作为独立实例启动。cluster-config-file
<filename>
:请注意,尽管有此选项的名称,但它不是用户可编辑的配置文件,而是Redis Cluster节点每次发生更改时都会自动持久保存集群配置的文件(状态,基本上是状态),为了能够在启动时重新阅读它。该文件列出了诸如群集中其他节点之类的内容,它们的状态,持久变量等等。通常,由于收到某些消息,此文件将被重写并刷新到磁盘上。cluster-node-timeout
<milliseconds>
:Redis群集节点不可用的最长时间(不将其视为失败)。如果主节点无法访问的时间超过指定的时间长度,则它的从节点将对其进行故障转移。此参数控制Redis Cluster中的其他重要事项。值得注意的是,在指定的时间内无法到达大多数主节点的每个节点都将停止接受查询。cluster-slave-validity-factor
<factor>
:如果设置为零,则从服务器将始终尝试对主服务器进行故障转移,而不管主服务器和从服务器之间的链接保持断开状态的时间长短。如果该值为正,则将最大断开时间计算为节点超时值乘以此选项提供的系数,如果节点是从节点,则如果断开主链接的时间超过指定的时间,它将不会尝试启动故障转移。例如,如果节点超时设置为5秒,而有效性因子设置为10,则从服务器与主服务器断开连接超过50秒将不会尝试对其主服务器进行故障转移。请注意,如果没有从属能够对其进行故障转移,则任何非零的值都可能导致Redis群集在主服务器发生故障后不可用。在这种情况下,只有当原始主服务器重新加入集群后,集群才会返回可用状态。cluster-migration-barrier
<count>
:一个主机将保持连接的最小数量的从机,以便另一个从机迁移到不再被任何从机覆盖的主机。有关更多信息,请参见本教程中有关副本迁移的相应部分。cluster-require-full-coverage
<yes/no>
:如果设置为yes,默认情况下,如果某个节点未覆盖一定比例的密钥空间,集群将停止接受写入。如果该选项设置为no,即使仅可以处理有关密钥子集的请求,群集仍将提供查询。
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
热门技术内容:
01、
02、
03、
04、
05、
06、
07、
08、
09、
10、
11、
12、
13、
14、
15、
有趣的技术在等你
好文章,我在看❤️