首页 > 数据库 >Redis集群

Redis集群

时间:2023-08-28 09:15:25浏览次数:52  
标签:Cluster Redis redis 故障 集群 节点

 

Redis集群

一、Redis集群

Redis集群是一种使用分布式技术将数据分散存储在多个节点上的解决方案。它可以提供高可用性、扩展性和性能的优势。

Redis集群通过分片(Sharding)来存储数据。数据被平均分配到多个节点上,每个节点负责存储一部分数据。这样可以将负载分散到多个节点上,并提高整体的读写性能和存储容量。

在Redis集群中,存在以下几个关键的组件和概念:

1.节点(Node):

Redis集群由多个节点组成,每个节点都是一个独立运行的Redis实例。每个节点都有一个唯一的节点ID。

2.主节点(Master):

每个节点中的一个Redis实例被选举为主节点,负责处理写操作,并将数据同步到从节点。

3.从节点(Slave):

每个节点中的其他Redis实例作为从节点,只能进行读操作,并通过异步复制的方式从主节点获取数据更新。

4.握手(Handshake):

当一个Redis客户端连接到集群时,它会与集群进行握手,从而了解集群中所有的节点信息。

5.数据分片(Data Sharding):

集群将数据划分为多个槽位(Slots),默认有16384个槽位。每个节点被分配一部分槽位来存储数据。

6.槽位迁移(Slots Migration):

当节点加入或离开集群时,槽位的分配会发生变化,Redis集群会自动进行槽位迁移,将槽位重新分配给合适的节点。

7.故障转移(Failover):

当主节点发生故障时,Redis集群会自动进行故障转移,选举一个从节点作为新的主节点,确保系统的可用性。

二、  Redis集群有几种模式

Redis集群分三种模式:主从模式、sentinel模式、Redis Cluster

三种方式详解:

https://www.cnblogs.com/coolops/p/12809893.html

1.主从复制模式:

在主从复制模式中,存在一个主节点(Master)和多个从节点(Slave)。主节点负责处理写操作,并将数据同步到从节点。从节点只能进行读操作,并通过异步复制的方式从主节点获取数据更新。这种模式可以提供一定程度的高可用性和读扩展性,但主节点故障时需要手动切换到一个从节点作为新的主节点。

2.  sentinel(哨兵)模式:

哨兵模式是一种基于主从复制的高可用解决方案,用于监控和管理Redis集群中的主节点的故障转移

在哨兵模式中,有一个或多个哨兵节点(Sentinel)实例运行在独立的进程上。哨兵节点负责监控Redis集群中的主节点和从节点,并在主节点故障时自动执行故障转移操作。

具体工作流程如下:

● 哨兵节点通过发送命令和接收响应来监控Redis节点的状态,包括主节点和从节点。

● 当主节点失效(无法访问)时,哨兵节点会通过投票机制选举一个从节点作为新的主节点。

● 选举出的新主节点会通知其他哨兵节点和Redis客户端更新主节点信息,并进行故障转移操作。

● 故障转移完成后,其他从节点会自动切换到新的主节点并重新执行复制操作。

哨兵模式提供以下优势:

● 高可用性:当主节点发生故障时,哨兵可以自动发现故障,并选择一个新的主节点来继续提供服务,从而实现快速的故障转移。

● 自动化管理:哨兵节点能够自动监控和管理Redis集群中的节点,包括故障检测、选举和故障转移等操作,减轻了管理员的负担。

● 配置管理:通过哨兵模式,可以动态管理Redis主节点的变更和配置更新,如添加新的从节点、删除节点或修改配置。

哨兵模式通常适用于中小规模的Redis部署,对主从切换和自动化故障转移有较为简单的需求。

3.  Redis Cluster模式:

Redis Cluster详细:

https://www.cnblogs.com/jian0110/p/14002555.html

Redis Cluster是Redis官方提供的原生分布式解决方案。在Redis Cluster模式中,数据被分散存储在多个节点上,每个节点都持有部分数据槽(Slots)。集群使用Gossip协议进行节点间的信息交换和数据迁移。Redis Cluster提供了自动化的故障转移、节点管理和数据重定向等功能,以实现高可用性和水平扩展。这种模式是推荐的分布式部署方式。

Redis Cluster特点

● 多主多从,去中心化:从节点作为备用,复制主节点,不做读写操作,不提供服务

● 不支持处理多个key:因为数据分散在多个节点,在数据量大高并发的情况下会影响性能;

● 支持动态扩容节点;

● 节点之间相互通信,相互选举,不再依赖sentinel:准确来说是主节点之间相互“监督”,保证及时故障转移

● 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法

● 每个Redis集群理论上最多可以有16384个节点

三、  主从复制模式和Redis Cluster模式的区别

1.相比较sentinel模式,多个master节点保证主要业务(比如master节点主要负责写)稳定性,不需要搭建多个sentinel实例监控一个master节点;

2.相比较一主多从的模式,不需要手动切换,具有自我故障检测,故障转移的特点;

3.相比较其他两个模式而言,对数据进行分片(sharding),不同节点存储的数据是不一样的;

4.从某种程度上来说,Sentinel模式主要针对高可用(HA),而Cluster模式是不仅针对大数据量,高并发,同时也支持HA。

5.  主从复制模式适用于较小规模的部署和读写分离、负载均衡需求。Redis Cluster模式适用于大规模的分布式部署、高可用性和水平扩展需求

四、  Redis Cluster中,节点之间的通信

在Redis Cluster中,节点之间的通信使用的是Gossip协议。

Gossip协议是一种去中心化的通信协议,它允许节点通过相互交换信息来达成共识。在Redis Cluster中,每个节点都会与其他节点进行定期的Gossip通信,以实现集群的管理和数据分片的均衡。

具体的通信流程如下:

● 每个节点都会维护一个关于集群状态的本地视图,其中包含有关其他节点的信息。

● 节点定期进行Gossip通信,将本地视图中的信息发送给其他节点,并接收其他节点的信息。

● 当节点接收到其他节点的信息时,它会将接收到的信息与本地视图进行比较,并根据一定的规则来更新本地视图。

● 更新后的本地视图会用于集群的管理操作,如故障检测、故障转移、数据迁移等。

通过Gossip协议,Redis Cluster中的节点可以相互了解彼此的状态,并进行动态的集群管理。当有新节点加入或节点出现故障时,节点会通过Gossip通信来传播和更新集群状态,从而实现节点的动态扩缩容和故障恢复。

Gossip协议的优势在于它的去中心化特性,使得节点之间的通信更为灵活和高效。每个节点都具备相同的角色,没有中心节点或集中式的决策机制,从而提高了系统的可伸缩性和容错性。

需要注意的是,Redis Cluster中的Gossip通信是基于TCP协议进行的,节点之间通过互相发现和建立TCP连接来实现通信。

 

五、  Redis Cluster搭建:

1.准备工作:

● 下载redis对应版本(版本必需要3.0以上)

Windows安装Redis:

https://blog.csdn.net/weixin_44893902/article/details/123087435

Redis官网:

https://redis.io/

● 下载并安装Ruby语言环境

下载地址:https://rubyinstaller.org/downloads/

如果你的电脑是64位,选择x64下载;否则,32位选择x86下载。这里选择倒数第二个下载

下载完成后,打开文件,启动 Ruby 安装向导。

点击 Next,继续向导,记得勾选 Add Ruby executables to your PATH,直到 Ruby 安装程序完成 Ruby 安装为止。

(注意:安装路径必须是英文)

如果您的安装没有适当地配置环境变量,接下来您可能需要进行环境变量的配置,

● 下载ruby环境下Redis的驱动

在当前ruby目录下,打开cmd终端,输入gem install redis (下载的是最新版本)

路径:

执行结果:

● 下载Redis官方提供的创建Redis集群的ruby脚本文件redis-trib.rb

下载地址:https://redis.io/download/

 

(注意,要选择和自己安装的Redis版本一致)

查看版本号:

● 将解压后的redis文件夹复制n份(n为集群节点数)到目标文件夹RedisCluster并将文件夹重命名

● 修改每个文件夹下的 redis.windows.conf

 修改以下集群配置信息:(端口号可以一键替换)

1.  port 7000 —端口号

2.  cluster-enabled yes —避免在使用JedisCluster集群代码获取时报错

3.  cluster-config-file nodes-7000.conf —该节点的配置信息,服务启动后会在同目录下生成nodes-端口号.conf文件

4.  cluster-node-timeout 15000 —时间调整为15000,在创建集群时不会超时

5.   appendonly yes

(注意:这些前面的#要去掉,不能有多余的空格)

● 编写每个Redis节点启动方式:

  1.编写一个 bat 来启动 redis,在每个节点目录下建立 startup.bat,内容如下:

title redis_8081

redis-server.exe redis.windows.conf

(title是cmd窗口名 根据个人爱好输入.)

  2.或者可以把Redis的每个节点升级为服务

用管理员打开命令提示符:

redis-server.exe --service-install redis.windows.conf --service-name redis7001

启动Redis服务:

redis-server --service-start --service-name redis7001

停止Redis服务:

redis-server --service-stop --service-name redis7001

重启Redis服务:

redis-server --service-rewrite-config --service-name redis7001

redis-server --service-stop --service-name redis7001

redis-server --service-start --service-name redis7001

 

● 启动每个节点双击每个节点下的 startup.bat,执行集群构建脚本或者启动每个redis服务

●  到目标文件夹RedisCluster中打开命令窗口(比如进入6379文件夹),输入以下指令:

ruby redis-trib.rb create --replicas 1 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 127.0.0.1:7006

上述命令  --replicas 1 表示每个主节点拥有从节点个数为1。

master节点(主节点)不能少于3个,所以我们用了6个redis(3主+3从)

● 中途有个地方需要手动输入yes即可

1.查看当前集群信息

cluster info

2.查看集群里有多少个节点

cluster nodes

标签:Cluster,Redis,redis,故障,集群,节点
From: https://www.cnblogs.com/qibaidao/p/17661336.html

相关文章

  • Docker安装redis、redis设置密码、挂载配置文件并以配置文件方式启动(避坑)
    1.拉取redis镜像:拉取最新版:dockerpullredis拉取指定版本,以6.2.7为例:dockerpullredis:6.2.72.在Linux环境中创建需要挂载的目录mkdir/usr/local/software/redis/6379/confmkdir/usr/local/software/redis/6379/datamkdir/usr/local/software/redis/6379/log3......
  • Redis存取多维对象或数组
    最近阅读tp5的底层类的实现,看到了大神的Redis类的实现,觉得非常的简洁明了,而且统一了所有的get,set,在更新一下,非常值得参考/***读取缓存*@accesspublic*@paramstring$name缓存变量名*@parammixed$default默认值*@returnmixed......
  • 20.集群因子(Clustering Factor)
    集群因子用于判断索引回表需要消耗的物理I/O次数。这里在测试表test上创建一个索引:createindexidx_idontest(object_id);selectowner,index_name,clustering_factorfromdba_indexeswhereowner='TEST'andindex_name='IDX_ID';结果展示:OWNER......
  • Redis哨兵
    哨兵的作用和原理Redis提供了哨兵机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:监控:sentinel会不断检查你的master和slave是否按预期工作自动故障恢复:如果master故障,sentinel会将一个slave提升位master。当故障实例恢复后也以新的master为主通知:sentinel充当redi......
  • Redis集群
    Redis主从集群主从复制模式就是,部署多台redis节点,其中只有一台节点是主节点(master),其他的节点都是从节点(slave),也叫备份节点(replica)。只有master节点提供数据的事务性操作(增删改),slave节点只提供读操作。所有slave节点的数据都是从master节点同步过来的。该模式的架构图如下:共包含......
  • 架构师必读:揭秘Redis五大数据类型及超实用应用场景!
    大家好,我是你们的小米!今天我们要来聊聊一个在面试中经常被问到的话题:Redis的五种数据类型及其应用场景。作为一名热爱技术的小伙伴,对于这个话题,我们可是要深入挖掘一下哦!String(字符串)String(字符串)类型是Redis最简单的数据类型之一,它不仅可以存储字符串,还可以存储整数和浮点数。在......
  • Redis持久化机制
    Redis的持久化指的是将内存中的数据持久化到磁盘上,以便在Redis服务器重启或宕机时能够恢复数据。Redis支持两种持久化方式:RDB和AOF。RDB持久化RDB全称RedisDatabaseBackupfile(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘......
  • redis 基础
    随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈与其他内存型数据库相比,Redis具有以下特点:Redis不仅可以将数据完全保存在内存......
  • Linux下安装Redis
    Linux安装Redis首先,在官网上下载安装包接着使用xftp上传安装包到home目录接着解压缩安装包到opt目录使用tar-zxvfredis-5.0.14(2).tar.gz命令解压解压完成接着我们安装C++的编译器yuminstallgcc-c++安装完成检查版本gcc-v接着执行make命令make执行完成之......
  • Redis.js用法
    Redis.js是一个用于连接和操作Redis数据库的JavaScript库。以下是一些常用的方法及其详细参数说明: 1.创建Redis客户端实例: ```javascriptconstredis=require('redis');constclient=redis.createClient({ host:'localhost',//Redis服务器地址 port:6379,......