Redis 集群教程:入门级的Redis集群使用指南

Redis Cluster集群

传统Redis集群存在那些问题

Redis哨兵集群模式,每一个节点都保存全量同步数据,冗余的数据比较多;而在Redis Cluster模式中集群中采用分片集群模式,能够减小冗余数据,缺点就是构建该集群模式成本很是高node

RedisCluster集群数据分片原理

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.redis

Redis3.0开始官方推出了集群模式 RedisCluster,原理采用hash槽的概念,预先分配16384个卡槽,而且将该卡槽分配给具体服务的节点;经过key进行crc16(key)%16384 获取余数,余数就是对应的卡槽的位置,一个卡槽能够存放多个不一样的key,从而将读或者写转发到该卡槽的服务的节点。 最大的有点:动态扩容、缩容服务器

传统RedisCluster集群模式环境搭建

 摘要:2018年10月 Redis 发布了最新稳定版本 5.0 版本,推出了各类新特性,其中一点是放弃 Ruby的集群方式,改成使用 C语言编写的 redis-cli的方式,使集群的构建方式复杂度大大下降架构

咱们先来看一下redis-cluster架构图,以下图所示。能够看到Redis集群是没有统一入口的,采用的是去中心化设计思想,客户端连集群中的哪台设备都行,集群中各个设备之间都定时进行交互,以便知道节点是否还正常工做。ui

环境搭建开始:spa

一、安装Redis5.0      安装Redis5.0连接:Linux下安装Redis.net

二、建立 redis-cluster目录,方便咱们管理建立的六个redis实例,并复制一份以前搭建好的redis,重命名为rediscluster设计

mkdir rediscluster3d

cd rediscluster/code

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

相关文章
相关标签/搜索