Redis集群(Cluster)

这篇具有很好参考价值的文章主要介绍了Redis集群(Cluster)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

集群解决的问题

服务器的容量不足或者进行并发写操作的用户过多等情况下可以使用多台Redis集群的方式缓解压力。

注:(高并发的写操作,如果是一主多从模式主服务器承受的压力会很大,因此引入集群)

代理主机和无中心化集群

以电商项目的用户、订单、商品三个模块来演示代理主机和无中心化集群。如下图:

用户信息、订单信息、商品信息分别使用三台Redis服务器存储。 这样一来,相应的操作就会去请求相应的Redis服务器。
Redis集群(Cluster)


问题:客户端通过何种方式知道需要去请求哪个服务?

①代理主机方式通过加一层代理服务器解决此问题(不推荐使用)
Redis集群(Cluster)

  • 访问的时候请求代理服务器,由代理服务器进行分发。

  • 局部可以使用主从模式,如果其中某一台Redis服务器挂掉,从机上位变为主服务器继续提供服务。

可以看到,以代理主机方式按照目前的需求搭建集群,至少需要8台服务器。搭建和后期维护都很不方便,所以不推荐使用此方式创建集群,于是引入了无中心化方式的集群!!!

②无中心化搭建Redis集群方式解决此问题(推荐)

  • 任何一台Redis服务器都可以作为集群的入口。比如要访问订单数据,通过用户服务器进入集群,用户服务器会在集群内部把请求进行转移,直到找到订单服务器。
    Redis集群(Cluster)

无中心化Redis集群搭建方式最少需要6台服务器即可。和代理主机方式相比优势明显。


Redis集群的特点

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

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


Redis集群环境搭建

根据上面介绍,我们了解到无中心化集群搭建方式至少需要6台Redis服务器。接下来演示无中心化Redis集群环境搭建:

接下来演示在一台linux主服务器上模拟六台Redis服务器,演示无中心化Redis集群环境的搭建:

①在Linux服务器中新建一个myredis文件夹。如下图:
Redis集群(Cluster)

②创建6个redis实例,端口号为:6379、6380、6381、6389、6390、6391
如果使用云服务器记得设置这几个端口的安全组
实现:

  • 6379为主机,6389为从机
  • 6380为主机,6390为从机
  • 6381为主机,6391为从机

vim redis6379.conf 创建配置文件并写入如下内容:
Redis集群(Cluster)

复制出其余5个配置文件
Redis集群(Cluster)

依次通过字符串替换修改5个文件内容(下图是修改redis6381.conf的过程,修改其余配置文件操作类似)
Redis集群(Cluster)

③启动6个Redis服务

格式:redis-server redis6379.conf(启动redis6379服务)
Redis集群(Cluster)

通过ll命令查看,确保如下的节点文件生成成功
Redis集群(Cluster)

④一个集群至少要有三个主节点,先组合创建只有三个主节点的集群(6379、6380、6381)

组合之前,务必请确保所有redis实例启动后,nodes-xxxx.conf文件都生成正常。

Redis版本低的话,需要额外装上rubby环境。新版的redis自带了rubby环境,。我使用的是新版本redis7

  • redis安装目录下的src目录中可以看到,,关于rubby的文件
    Redis集群(Cluster)

  • 使用命令进行合并创建集群
    redis-cli --cluster create --cluster-replicas 0 -a 你的redis密码
    47.116.4.200:6379 47.116.4.200:6380 47.116.4.200:6381

    其中参数:

    • ① -replicas 0 表示创建集群的方式,以0个从机的方式创建集群(此处即为创建仅有三个主机的集群)。
    • ②-a参数填写redis服务器的密码(没有设置密码可以不写-a)
    • ③最后面跟的是服务器的ip和端口号。
      Redis集群(Cluster)

⑤启动redis服务后,需要连接Redis。

  • 集群之前的连接redis方式为:redis-cli -p 端口号
  • 集群连接redis方式为:redis-cli -c -p 端口号(使用-c参数表示 采用集群策略连接。因为是无中心化,所以连接任何一个节点(如6379、6380、6381)都可以)

Redis集群(Cluster)

⑥通过 cluster nodes 命令查看集群信息
Redis集群(Cluster)

⑦增加三个从机到集群中去,并设置相应的主机
redis-cli --cluster add-node 47.116.4.200:6389 47.116.4.200:6379 --cluster-slave --cluster-master-id 主机的id (-a Redis密码):增加从节点6389到集群中去,并将其设置为6379主机的从机

  • 此处的47.116.4.200:6389为目标从机及其端口号
  • 此处的47.116.4.200:6379为目标主机及其端口号
  • slave 表示此操作要添加从节点
  • cluster-master-id 主机的id: 要添加到哪一个主节点,集群中主机的id可以通过cluster nodes查看
  • -a :如果设置了redis密码,需要-a参数并填入密码
    Redis集群(Cluster)

以同样的方式,把6390添加为6380的从机;把6391添加为6381的从机。

添加完毕之后通过redis-cli -c -p 6379连接一台集群中的redis服务器。并通过cluster nodes查看节点信息。如下图:
Redis集群(Cluster)

此时可以看到集群中节点已经分为三组:

  • 6379为主机,6389为从机
  • 6380为主机,6390为从机
  • 6381为主机,6391为从机

slots(插槽)

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

  • 插槽用来把值平均分配到不同主机中去,达到分担压力的效果。(比如set k1 v1操作的时候,会计算k1所在插槽值,根据各节点管辖的插槽范围,放入相应的节点中去)

  • 集群使用公式 CRC16(key) % 16384 计算键 key 属于哪个槽

  • 集群中的每个节点负责处理一部分插槽。 如下图:
    Redis集群(Cluster)
    上图中的当前集群有三个主节点, 其中:

    • 节点 6379 负责处理 0 号至 5460 号插槽。
      节点 6380 负责处理 5461 号至 10922 号插槽。
      节点 6381 负责处理 10923 号至 16383 号插槽。


在集群中录入值

①录入单个值
Redis集群(Cluster)
6381管理的插槽范围是10923 号至 16383 号,12706在其范围内。

一开始,请求进入6379,执行set k1 值操作时,计算k1的插槽值,发现k1插槽值不在6379服务器管理范围内,于是会转移请求找到6381服务器并执行set操作。

②尝试录入多个值
Redis集群(Cluster)
无法计算多个key的插槽值。集群中mset不能执行成功。

如果非要在集群中录入多个值,可以使用添加分组的方法

key值后面添加{ 组名 },就可以根据组名计算插槽,而不用再根据key值计算。此方法插入即可成功。如下图:
Redis集群(Cluster)


查询集群中的值

cluster keyslot key:计算key值的插槽数
Redis集群(Cluster)

cluster countkeysinslot 插槽值:计算插槽中有几个key(键)
Redis集群(Cluster)

注意: 虽然当前12706插槽中有一个k1,但12706在 6381节点的管辖的插槽值范围(10923~16383) 内。此命令只能计算当前6380节点管辖的插槽值范围(5461~10922) 内的数据。上图中的12706超出范围,因此返回0。

cluster getkeysinslot 插槽数 个数:返回count个插槽中的key
Redis集群(Cluster)
上图表明,此时的4576插槽中只有一个k3。


故障恢复

此时我们搭建的集群中为三组“一主一从”,如果集群中某台主机挂掉,其从机立马上位接替主机工作,继续提供服务。此即为故障恢复。 如下图:
Redis集群(Cluster)

此时思考:如果此时再次重启6379服务器,6379的角色是什么?

答案是重启6379服务器,6379角色变为6389的从机,上位主机后的6389服务器依然是主机。如下图:
Redis集群(Cluster)

再次思考:如果集群中某台主机挂掉之后,此主机的所有从机也都挂掉了(如下图),整个集还能正常提供服务吗?
Redis集群(Cluster)

答案为不一定。主要要看配置文件。
某一段插槽的主从都挂掉时,集群能否提供服务主要看配置信息(cluster-require-full-coverage )

  • cluster-require-full-coverage 为yes,那么 某一段插槽的主从都挂掉时,整个集群都挂掉
  • cluster-require-full-coverage 为no ,那么 某一段插槽的主从都挂掉时,只是该段插槽数据不能使用,也无法存储;其他段插槽依旧正常提供服务。

Redis集群的优缺点

优点:多台服务器集群可以分摊并发操作压力实现扩容

缺点不支持多键操作(如mset命令会操作失败)、不支持多键的Redis事务、不支持lua脚本.文章来源地址https://www.toymoban.com/news/detail-485038.html

到了这里,关于Redis集群(Cluster)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开启redis服务后,无法远程连接服务器上的redis的问题解决办法(Connection refused: no further information)

    远程连接在服务器上的redis服务时,总是会报错Connection refused: no further information,通过一顿查资料后,我总结了一下几个解决步骤。 1.首先通过通过命令vim ****/redis.conf打开***目录下的redis配置文件 2.对bind设置,将bind 127.0.0.1注释掉. 3.将保护模式关闭,由yes设置成no.  4.reids4.5以

    2024年02月10日
    浏览(58)
  • 概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理

    Top 案例1:搭建redis服务器 案例2:常用命令限 案例3:部署LNP+Redis 案例4:创建redis集群 1.1 具体要求如下 在主机redis64运行redis服务 修改服务运行参数 ip 地址192.168.88.64 服务监听的端口6364 redis服务的连接密码为 tarenaplj 1.2 方案 准备1台新虚拟机,要求如表-1所示。   1.3 步骤 实

    2024年02月12日
    浏览(84)
  • Spring boot连接Redis服务器报Unable to connect to Redis问题分析与解决

    1.Unable to connect to Redis:翻译:无法连接到Redis 很明显是Redis服务未被连接 比如我这个,是因为打连接不上本地端口:6379。 呢么就有两种可能: 1.查看Spring boot的yml文件,看是否连接的是6379端口 如下: 没问题是 本地的6379,呢么就只有一种情况是因为本地的服务没打开。 打

    2024年02月14日
    浏览(56)
  • 一台服务器上部署 Redis 伪集群

    哈喽大家好,我是咸鱼 今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从) redis-trib.rb 是一个基于 Ruby 编写的脚本,其功能涵盖了创建、管理以及维护 Redis 集群的各个方面 值得注意的是,随着时间的推移,一些较新版

    2024年02月11日
    浏览(87)
  • C++集群聊天服务器 nginx+redis安装 笔记 (中)

    一、nginx安装 nginx: download 下载nginx安装包 二、redis安装 Install Redis on Linux | Redis 集群聊天服务器推荐和参考文章,下文部分文字来自这篇文章: 集群聊天服务器:三、集群代码实现_网络编程多服务端集群怎么实现-CSDN博客 https://blog.csdn.net/qq_42441693/article/details/129167974?spm=100

    2024年02月19日
    浏览(51)
  • Redis持久化说明及其单台Linux服务器搭建Redis集群架构

    说明:RDB快照主要以二进制文件的形式进行存储数据,主要以文件名dump.rdb进行存储,主要设置redis.conf里面设置’save 60 1000’命令可以开启, 表示在60秒内操作1000次进行一次备份数据。在客户端执行save(同步)和bgsave(异步操作)。 redis.conf 启动redis相关命令 说明:主要把文件生

    2024年02月10日
    浏览(59)
  • 基于ssm+shiro+redis+nginx tomcat服务器集群管理项目

    毕业设计——基于ssm+shiro+redis+nginx tomcat服务器集群管理项目 完整项目地址:https://download.csdn.net/download/lijunhcn/88430549 1.搭建一个最简洁,模块划分最明确的ssm+swargger+shiro+redis+nginx整合项目,采用maven作为构建工具,在有新项目开发时可以借助此demo快速构建项目 2.实现shiro的授

    2024年02月03日
    浏览(66)
  • 远程服务器,使用docker搭建redis集群提示:SlaveConnectionPool no available Redis entries

    1、部署条件:         1.1 远程服务器         1.2 docker部署:参考 https://blog.csdn.net/qq_42971035/article/details/128171542  2、出现问题:         2.1 服务器部署服务,连接redis集群,会提示\\\"SlaveConnectionPool no available Redis entries\\\"。         2.2 本地连接远程服务器,提示\\\"connection 

    2024年02月15日
    浏览(68)
  • Redis Cluster 集群故障排查与解决方案

    Redis是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构(如字符串、哈希表、列表、集合等)和功能(如事务、分布式锁、Lua脚本等),能够满足不同场景的需求。 Redis Cluster是Redis提供的分布式解决方案,主要由以下几个组成部

    2024年02月14日
    浏览(37)
  • 云服务器上使用Docker Compose创建Redis三主三从集群

    云服务器 Ubuntu20.4 Dokcer 24.0.2 目录结构是这样: 绿色的目录是用来存储容器中的文件,不需要我们手动创建,将路径配置在配置文件中即可。黑色的目录和文件需要自己手动创建。  我们一共创建7个容器: redis1~redis6是集群节点,redis_cluster是用来搭建主从关系的一个容器,搭

    2024年02月09日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包