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

Redis集群使用指南相关推荐

  1. 超详细的 Redis Cluster 官方集群搭建指南

    转载自  超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集 ...

  2. 超详细的 Redis Cluster 官方集群搭建指南,适用于 redis 5.x, 6.x

    今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 旧版本使用 redis-trib.rb ruby 脚本安装集群,5.0版本redis-cli 已经自带 ...

  3. 转:Redis 集群搭建详细指南

    转自: https://www.cnblogs.com/mafly/p/redis_cluster.html [README] 非常棒的一篇文章,感谢作者的分享: 先有鸡还是先有蛋? 最近有朋友问了一 ...

  4. 【Redis集群专题】「集群技术三部曲」介绍一下常用的Redis集群机制方案的原理和指南(入门篇)

    集群化的方案 Redis的Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis ...

  5. Docker Compose——搭建Redis集群

    环境配置 Docker 18.x Docker-Compose 3.7 Redis 6.2.5 主从(Master-Slave)模式 主从复制模式中包含一个主数据库实例(master)与一个或多个从数 ...

  6. docker 完成 redis集群搭建

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  7. (六)Redis集群搭建

    1. 原理 redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态.每个节点都和其他所有节 ...

  8. docker redis 删除集群_基于Docker的Redis集群实践

    单机版的Redis相信大家都比较熟悉了,这里介绍几种Redis的集群模式,并结合Docker来进行实践操作 abstract.png 准备工作 通过Docker下载最新的Redis镜像 # 获取red ...

  9. redis集群拓扑_Redis拓扑

    redis集群拓扑 Redis - an open-source in-memory data structure store, is a very significant piece in mode ...

最新文章

  1. 面向切面编程-日志切面应用
  2. IO:Reactor设计模式
  3. 【python数据挖掘课程】二十四.KMeans文本聚类分析互动百科语料
  4. MFC——在视图窗口加载背景图片
  5. CenOS 配置C/C++语言
  6. 【华为云技术分享】从自建MongoDB聊聊云数据库MongoDB的蓬勃张力
  7. 【汇编语言】进制转换
  8. 【Flutter】微信项目实战【08】 聊天界面搭建(上)
  9. Svn常见问题及相关原因
  10. (转)Django ==== 实战学习篇十三 分页(Paginator)处理;Django使用内置的admin
  11. dstwo linux 模拟器,dstwo gba 模拟器-TempGBA下载V1.44 最新版-西西游戏下载
  12. 互联网共享图书馆+自习室商业计划书
  13. 算法竞赛入门经典(刘汝佳)——常用STL数据结构总结
  14. 学习|Android使用TTS语音合成
  15. 计算机软件工程课程设计感想,软件课程设计心得体会.docx
  16. 金明的预算budget题解
  17. CSDN开发云-优雅使用云容器服务
  18. 关于“硬件工程师工资不高”的几个真相
  19. 【组队学习】Task06:FOR、IF、以及while
  20. 如何debug Vue源码

热门文章

  1. Python 快速入门学习
  2. 设置了监视哨的顺序查找算法效率高?你确定吗?
  3. Lake Shore M91快速霍尔测量仪
  4. MIUI10国际版系统自定义字体设置办法
  5. 你是否了解AR技术?AR技术就在我们身边
  6. 中国民营医疗产业经营管理模式与“十四五”发展规划建议报告2021-2027年版
  7. pod的调度策略、定向调度、亲和性调度、污点、容忍污点
  8. oracle常用函数number,Oracle 常用函数介绍
  9. 利用libxml2解析xml文件
  10. Kaggle教程 机器学习中级7 数据泄露