返回顶部
首页 > 资讯 > 数据库 >Redis集群的相关详解
  • 646
分享到

Redis集群的相关详解

2024-04-02 19:04:59 646人浏览 八月长安
摘要

注意!要求使用的都是Redis3.0以上的版本,因为3.0以上增加了redis集群的功能。 1.redis介绍 1.1什么是redis Redis是用C语言开发的一个开源的高性能键值对(key-value)

注意!要求使用的都是Redis3.0以上的版本,因为3.0以上增加了redis集群的功能。

1.redis介绍

1.1什么是redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)的非关系型数据库。通过多种键值数据类型来适应不同场景下的存储需求,目前支持的键值数据类型有:
字符串,散列,列表,集合,有序集合

2.2应用场景

缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)

2.Redis集群的介绍

2.1Redis集群的架构

Redis集群的相关详解

Redis集群的相关详解

Redis 集群中内置了 16384 个哈希槽,redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护。当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

2.2 Redis集群的特点

当Redis集群启动后,就自动在多个节点间做好分片,同时提供了分片之间的可用性:即当一部分redis节点故障或者网络中断后,集群还有从节点可以替代主节点继续工作,但如果大面积的节点故障,那集群就不可用了。
Redis集群提供了:
自动将16384个数据槽点切分到多个Redis节点中
当一部分节点故障或不可达,集群依然能继续工作

2.3 Redis集群的TCP端口

集群的每个节点都需要建立两个tcp连接,监听这两个端口:
客户端端口(一般是6379):需要对所有客户端和集群节点开放,用于接收客户端指令,且集群节点需要通过该端口向客户端转移数据。
集群总线端口(一般是6379+10000):只需要对集群中的所有节点开放,用于节点之间通过二进制协议通信。各节点通过集群总线检测故障节点,更新配置等,而客户端是不能使用该端口的。

2.4 Redis集群数据的分片

Redis集群使用的是哈希槽,有16384个哈希槽,决定一个key分配到哪个槽的算法:计算该key的CRC16,结果再模16384.
集群中的每个节点负责一部分哈希槽,比如集群中有3个节点,则:

  1. 节点A存储的哈希槽范围是:0 – 5500
  2. 节点B存储的哈希槽范围是:5501 – 11000
  3. 节点C存储的哈希槽范围是:11001 – 16384

这样的分布方式方便节点的添加和删除。比如,需要新增一个节点D,只需要把A、B、C中的部分哈希槽数据移到D节点。同样,如果希望在集群中删除A节点,只需要把A节点的哈希槽的数据移到B和C节点,当A节点的数据全部被移走后,A节点就可以完全从集群中删除。

因为把哈希槽从一个节点移到另一个节点是不需要停机的,所以,增加或删除节点,或更改节点上的哈希槽,也是不需要停机的。

如果多个key都属于一个哈希槽,集群支持通过一个命令(或事务, 或lua脚本)同时操作这些key。通过“哈希标签”的概念,用户可以让多个key分配到同一个哈希槽。如果key含有大括号”{}”,则只有大括号中的字符串会参与哈希,比如”this{foo}”和”another{foo}”这2个key会分配到同一个哈希槽,所以可以在一个命令中同时操作他们。

2.5 Redis集群的主从模式

每个哈希槽都有一个主节点和多个从节点。
举例:如果有六个节点,则分A,B,C三个为主节点,A1,B1,C1三个为对应的从节点,当A发生故障后,集群会提升A1为主节点,A1会继承A节点的数据,其实A1就相当于A的一个副本,让集群继续工作。

2.5.1 redis-cluster投票:容错

Redis集群的相关详解

(1)投票过程是集群中所有主节点参与,如果半数以上主节点与故障主节点通信超过(cluster-node-timeout),认为当前该主节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)?
a:如果集群任意主节点挂掉,且没有从节点.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态.
b:如果集群超过半数以上主节点挂掉,无论是否有从节点,集群都进入fail状态.
ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。

2.6 Redis集群的一致性保证

Redis集群不能保证强一致性。一些已经向客户端确认写成功的操作,会在某些不确定的情况下丢失。

产生写操作丢失的第一个原因,是因为主从节点之间使用了异步的方式来同步数据。

一个写操作是这样一个流程:

  1. 1)客户端向主节点B发起写的操作
  2. 2)主节点B回应客户端写操作成功
  3. 3)主节点B向它的从节点B1,B2,B3同步该写操作

从上面的流程可以看出来,主节点B并没有等从节点B1,B2,B3写完之后再回复客户端这次操作的结果。所以,如果主节点B在通知客户端写操作成功之后,但同步给从节点之前,主节点B故障了,其中一个没有收到该写操作的从节点会晋升成主节点,该写操作就这样永远丢失了。

节点超时(node timeout):对集群来说非常重要,当达到了这个节点超时的时间之后,主节点被认为已经宕机,可以用它的一个从节点来代替。同样,在节点超时时,如果主节点依然不能联系到其他主节点,它将进入错误状态,不再接受写操作。

2.7 Redis集群的参数配置

在redis.conf中的一些参数说明:

cluster-enabled <yes/no>:
如果配置”yes”则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。

cluster-config-file :
注意:虽然此配置的名字叫“集群配置文件”,但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。

cluster-node-timeout :
这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。

cluster-slave-validity-factor :
如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。

cluster-migration-barrier
:主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。更详细介绍可以看本教程后面关于副本迁移到部分。

cluster-require-full-coverage
<yes/no>:在部分key所在的节点不可用时,如果此参数设置为”yes”(默认值),
则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作。

以上所述是小编给大家介绍的Redis集群的相关详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文档:

--结束END--

本文标题: Redis集群的相关详解

本文链接: https://lsjlt.com/news/51001.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis集群的相关详解
    注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了redis集群的功能。 1.redis介绍 1.1什么是redis Redis是用C语言开发的一个开源的高性能键值对(key-value)...
    99+
    2024-04-02
  • redis集群规范详解
    本文档翻译自 http://redis.io/topics/cluster-spec 。 引言 这个文档是正在开发中的 Redis 集群功能的规范(specification)文档, 文档分为两个部分: ...
    99+
    2022-06-04
    集群 详解 redis
  • Redis群集部署详解
    博文大纲:一、Redis群集相关概念二、部署Redis群集 1、部署环境 2、配置Redis实例 3、配置node06主机的多Redis实例 4、主机node01安装配置ruby的运行环境,便于管理Re...
    99+
    2024-04-02
  • Redis高可用集群redis-cluster详解
    哨兵模式主要解决了手动切换主从节点的问题 1 , 哨兵模式的缺陷 .主从节点切换的时候存在访问瞬断,等待时间较长, .只有一个master节点提供写,slave节点提供读,尽管写的效...
    99+
    2024-04-02
  • 详解redis集群的三种方式
    目录主从复制基本原理持久化开关配置哨兵模式基本原理启动配置故障迁移Cluster集群键分布模型配置cluster集群启动集群Redis三种集群方式:主从复制,哨兵模式,Cluster集群。 主从复制 基本原理 当新建立...
    99+
    2022-07-25
    redis集群 redis集群方式
  • 详解redis集群选举机制
    概要 当redis集群的主节点故障时,Sentinel集群将从剩余的从节点中选举一个新的主节点,有以下步骤: 故障节点主观下线 故障节点客观下线 Sentinel集群选...
    99+
    2024-04-02
  • Redis三种集群模式详解
    目录三种集群模式一、主从复制1、reids主从模式2、redis复制原理 3、redis主从复制原理 4、redis主从复制优缺点二、Sentinel 哨兵模式1、Sentinel系...
    99+
    2024-04-02
  • 【MySQL】MGR集群相关简介
    1.MGR简介 MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供。MGR基于分布式paxos协议,实现组复...
    99+
    2024-04-02
  • 关于docker compose安装redis集群的问题(集群扩容、集群收缩)
    目录一、redis 配置信息模板二、编写批量生成配置文件脚本三、批量生成配置文件四、编写 docker-compose 文件五、做集群、分配插槽六、测试:七、手动扩容八、添加主从节点...
    99+
    2024-04-02
  • 怎样关闭redis Cluster集群
    Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redi...
    99+
    2024-04-02
  • 详解Redis集群搭建的三种方式
    目录一、单节点实例二、主从模式(master/slaver)三、sentinel 模式四、cluster 模式一、单节点实例 单节点实例还是比较简单的,平时做个测试,写个小程序如果需...
    99+
    2024-04-02
  • Redis进行相关优化详解
    目录前言内存维度控制key的长度避免存储bigkey如何查询bigkey选择合适的数据类型采用高效的序列化和压缩方法设置Redis最大内存和淘汰策略控制Redis实例的大小定时清除内存碎片性能维度禁止使用KEYS、FLU...
    99+
    2022-08-08
    Redis进行相关优化 Redis优化
  • 玩转Redis搭建集群之Sentinel详解
    前言 Redis作为内存数据库,需要具备高可用的特点,不然如果服务器宕机,还在内存里的数据就会丢失。我们最常用的高可用方法就是搭建集群,master机器挂了,可以让slave机器顶上,继续提供服务。但是Re...
    99+
    2024-04-02
  • redis集群实现清理前缀相同的key
    目录redis集群清理前缀相同的key原来的定期清理脚本的逻辑redis集群(jedis)批量删除同一前缀redis集群清理前缀相同的key 最近经常收到redis集群告警,每天收到...
    99+
    2024-04-02
  • Redis集群的关闭与重启操作
    Redis集群关闭与重启 1、注意 [root@master bin]# ./redis-cli --cluster create 192.168.230.21:7001 192...
    99+
    2024-04-02
  • Linux集群的相关知识点有哪些
    今天小编给大家分享一下Linux集群的相关知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、 目前网站架构一般分...
    99+
    2023-06-26
  • redis中多样的数据类型及集群相关的知识有哪些
    这篇文章主要介绍了redis中多样的数据类型及集群相关的知识有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis中多样的数据类型及集群相关的知识有哪些文章都会有所收获...
    99+
    2024-04-02
  • redis集合相关命令介绍
    这篇文章将为大家详细讲解有关redis集合的相关命令,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Redis 的 Set 是 String 类型的无序集合。...
    99+
    2024-04-02
  • 详细分析Redis集群故障
    故障表象: 业务层面显示提示查询redis失败 集群组成: 3主3从,每个节点的数据有8GB 机器分布: 在同一个机架中, xx.x.xxx.199 xx.x.xxx.200 xx.x.xxx....
    99+
    2022-06-04
    集群 故障 详细
  • Redis集群原理详细分析
    目录一致性哈希Redis 集群一致性哈希 节点的增加和减少,大部分节点的 Hash一致 package consistenthash import ( "hash/crc32" ...
    99+
    2022-12-19
    Redis集群 Redis集群原理 Redis集群模式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作