Redis——集群的认知 & 搭建

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis——集群的认知 & 搭建

1.集群是什么?


Redis早期的时候,经常会出现容量不够的问题,这也就联想到:redis如何进行扩容?并发写操作, redis如何分摊?

另外,主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。

之前通过代理主机来解决,但是redis3.0中提供了解决方案。就是无中心化集群配置。

Redis集群实现了对Redis的水平扩容,即启动Nredis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N

Redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。

2.Redis集群的搭建


首先需要删除各台redis服务器的持久化数据(rdbaof文件)。使用 rm -rf 命令。

在这里本应该打开6linux虚拟机,但是考虑到电脑性能问题,我就在同一台linux虚拟机中,构造6redis服务器,用来模拟集群操作。

制作6个实例,6379,6380,6381,6389,6390,6391 分别是相应的端口号。

在这6redis服务器的配置文件中配置如下内容:👇👇👇(这里只给出6379的配置,其他5台,把6379改为对应的端口号就可以了。快速修改使用:%s/6379/6380

cluster-enabledyes    打开集群模式

cluster-config-filenodes-6379.conf  设定节点配置文件名

cluster-node-timeout15000   设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换。


下来,依次启动这6redis服务器。


将六个redis节点合成一个redis集群。组合之前,请确保所有redis实例启动后,nodes-xxxx.conf文件都生成正常。

这行命令中的ip地址最好不要用127.0.0.1请用真实IP地址。(因为这里只做模拟,所以是在同一台linux主机上,可以写127.0.0.1。但是未来在企业里肯定是多台linuxip地址都是不一样的。)

--replicas 1 采用最简单的方式配置集群,一台主机,一台从机,正好三组。


集群合成之后,在最后有这样一行代码:[OK] All 16384 slots covered.

一个 Redis 集群包含 16384 个插槽(hash slot),数据库中的每个键都属于这 16384 个插槽的其中一个,

集群使用公式CRC16(key) % 16384 来计算键 key 属于哪个槽,其中 CRC16(key) 语句用于计算键 key CRC16 校验和

集群中的每个节点负责处理一部分插槽。举个例子,如果一个集群可以有主节点,其中:

节点 6379 负责处理 0 号至 5460 号插槽。

节点 6380 负责处理 5461 号至 10922 号插槽。

节点 6381 负责处理 10923 号至 16383 号插槽。

我们使用redis -c -p 6379 -c 采用集群策略连接,设置数据会自动切换到相应的写主机)进入6379这台redis服务器中,使用 cluster nodes 查看一下集群中的节点信息。一个集群至少要有三个主节点

可以看到,上面截图中的命令--replicas 1 采用最简单的方式配置集群,一台主机,一台从机,正好三组。

也就是:63796389是一组(6379为主,6389为从);63806390是一组(6380为主,6390为从);63816391是一组(6381为主,6391为从)。


下面,我们在6379这台redis服务器中,向其中写入数据。

可能直接进入读主机,存储数据时,会出现MOVED重定向操作。所以,应该以集群方式登录。

redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址和端口。

redis-cli客户端提供了–c 参数实现自动重定向

redis-cli  -c–p 6379登入后,再录入、查询键值对可以自动重定向。

关于mset命令报错:不在一个slot下的键值,是不能使用mget,mset等多键操作

关于mset命令报错解决:可以通过{}来定义组的概念,从而使key{}内相同内容的键值对放到一个slot中去。

查询集群中的值:CLUSTER GETKEYSINSLOT <slot><count> 返回 count slot 槽中的键。


3.Redis集群故障恢复


如果主节点下线?从节点能否自动升为主节点?注意:15秒超时

这里,我们让6379这台主服务器宕机,将它shutdown

之后再次使用 cluster nodes 查看集群中的节点信息:可以看到6379已经挂掉了,而原本它的从服务器6389,此时已经转为了主服务器。


主节点恢复后,主从关系会如何?主节点回来变成从机。

我们再次启动6379这台服务器,可以看到重启之后,6379自动成为了6389的从服务器。


如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?

如果某一段插槽的主从都挂掉,而cluster-require-full-coverageyes ,那么,整个集群都挂掉

如果某一段插槽的主从都挂掉,而cluster-require-full-coverageno ,那么,插槽数据全都不能使用,也无法存储。

redis.conf中的参数  cluster-require-full-coverage

相关文章
|
3月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
317 2
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
332 5
|
2月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
7月前
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
277 5
|
4月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
146 5
|
3月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
7月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
8月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
下一篇
oss云网关配置