Redis集群

Redis单实例适用于多数场景,但面临写并发和海量数据存储压力,为此发展出Redis集群。集群采用P2P、无中心节点设计,通过哈希槽算法实现数据分布,确保高可用性。每个节点负责一部分哈希槽,节点间通过投票机制检测故障,至少需要3个节点以满足容错。在实际部署中,每个节点通常有从节点以提高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Redis集群的发展:

1、Redis单实例架构简介:

1、Redis是一个开源的键值对(key-value)存储系统,受到广大互联网公司的青睐。

2、单例Redis架构使用场景:(其足以应对大多数使用场景)

    <1>、一主N从 
    <2>、读写分离,可以很好地解决读操作的负载均衡问题
    <2>、Sentinel哨兵机制
    <2>、故障迁移

3、单例Redis架构缓存存在的问题:(针对单实例Redis的这些问题,引入了【Redis集群】的概念)
    
    <1>、写并发:
        Redis单实例读写分离可以解决读操作的负载均衡,但是对于写操作,
则全部集中在master这一个节点上面。在高并发场景下,造成master结点压力过大。
    <2>、海量数据的存储压力:
        单实例Redis本质上只有一台Master作为存储,面对海量数据,一台服务器的话压力很大。

引入Redis之前,简述 Redis单机版搭建过程:

1、下载redis压缩包,然后解压压缩文件;
2、进入到解压缩后的redis文件目录(此时可以看到Makefile文件),编译redis源文件;
3、把编译好的redis源文件安装到/usr/local/redis目录下,如果/local目录下没有redis目录,会自动新建redis目录;

4、进入/usr/local/redis/bin目录,直接./redis-server启动redis(此时为前端启动redis);
5、将redis启动方式改为后端启动,具体做法:把解压缩的redis文件下的redis.conf文件复制到/usr/local/redis/bin目录下,然后修改该redis.conf文件->daemonize:no 改为daemonize:yse;

6、在/bin目录下通过./redis-server redis.conf启动redis(此时为后台启动)。

综上redis单机版安装启动完成。
 

2、Redis集群(Redis Cluster)简介:

1、Redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节
点(本人的理解,即,均匀分布的)

2、Redis集群没有统一的入口,客户端(Client)连接集群时可以连接集群上的任意节
点(Node)即可。因为集群内部节点是互相通信的(采用Ping-Pong机制),每个节点都是
一个Redis实例。

3、判断节点是否挂了:Redis集群容错投票机制【如果集群中超过半数的节点投票认为
某个节点挂了,那么这个节点就挂了(fail)。】

4、判断Redis集群是否挂了:如果集群中任意一个节点挂了,而且该节点没有从节点(备
份节点),那么这个集群也就用不了了。

5、为什么一个节点挂了(没有从节点)会影响整个Redis集群呢?:因集群中设置了16384
个哈希槽(slot),并且把所有的物理节点映射到(0~16383)这16834个哈希槽(slot)上。即,
把这些哈希槽(solt)均匀地分布在各个节点上。 当需要存放一个数据(key-value)时,Redis
会先对这个key进行 公式:CRC16(key)%16384求得余数,最后取到的余数对应16834中的一个
哈希槽,进而定位到所要存储的节点。所以一旦某个节点挂了,该节点对应的哈希槽就没法使用,
从而会导致整个Redis集群无法正常工作。【这里可以类比一致性hash算法中的哈希环】

6、综上分析,每个Redis集群最多有16834个节点。

7、Redis集群至少需要三个节点:
    为了满足容错投票机制(本人理解:超过一半的节点认为某个节点已经挂了,要形成有效判断,
所以至少需要三个节点),需要至少三个节点。两个节点没法构成(满足)集群。

8、为了保证集群在高并发场景下的可用性,每个节点都需要一个从节点(备份节点),所以一个
Redis集群至少需要6台服务器。【注:实际生产环境,没有那么多服务器,也无法启动那么多虚
拟机,的搭建是伪分布式集群,即一代服务器虚拟运行6个Redis实例】

二、与Redis集群相关的数据分布算法:哈希槽算法

1、Redis集群通过分布式存储方式,解决了单节点处理海量数据压力过大的问题。
但是对于分布式系统,更需要考虑如何将数据拆分到不同的Redis服务器上。也就
有了hash算法,一致性hash算法、哈希槽算法等。

2、普通的hash算法:
    将key进行 公式:hash(key)%N,从而实现数据到服务器的定位。

3、一致性hash算法:
    为每一个节点分配一个token(唯一标识),构成一个hash环。查找时,根据key计算hash值,
然后顺时针找到大于该hash值的Token结点,从而实现数据到服务器节点的定位。【优点:加入
和删除节点,只影响相邻两个节点;缺点:加减节点会造成数据吴发命中,所以很适合于节点量
很大的场景,扩容一般增加一倍节点,保障数据的负载均衡】

4、Redis集群采用的算法是哈希槽分区算法:
    Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16384),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作。

5、默认情况下,redis集群的读和写都是到master上去执行的,不支持slave节点读和写,跟Redis主从复制下读写分离不一样,因为redis集群的核心的理念,主要是使用slave做数据的热备,以及master故障时的主备切换,实现高可用的。Redis的读写分离,是为了横向任意扩展slave节点去支撑更大的读吞吐量。而redis集群架构下,本身master就是可以任意扩展的,如果想要支撑更大的读或写的吞吐量,都可以直接对master进行横向扩展。

推荐博文1:

(2条消息) Redis集群原理详解_张维鹏的博客-CSDN博客_redis集群原理

推荐博文2:(2条消息) redis集群搭建(非常详细,适合新手)_橙子君的博客-CSDN博客_redis集群搭建

### Redis 集群的搭建与配置 #### 一、Redis 集群简介 Redis 是一种高性能的键值存储系统,支持多种数据结构操作。通过集群模式可以实现分布式存储和高可用性。Redis 集群允许多个 Redis 实例协同工作,提供更高的吞吐量和更强的数据持久化能力。 --- #### 二、环境准备 在开始之前,需确认以下条件已满足: - 所有服务器的操作系统版本一致(如 CentOS 7 或 Windows),并安装了相同版本的 Redis 软件。 - 已关闭防火墙或开放必要的端口(默认 Redis 使用 6379 及其衍生端口)。 - 每台服务器上至少有两个 Redis 实例运行,分别作为主节点和从节点[^1]。 --- #### 三、具体步骤 ##### 1. 下载并解压 Redis 文件 下载指定版本的 Redis 压缩包(如 Redis 6.2.5 或更高版本),将其解压到目标路径下。例如,在 Linux 中执行以下命令: ```bash wget http://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5.tar.gz cd redis-6.2.5 make ``` ##### 2. 创建多个实例目录 为每个 Redis 实例创建独立的工作目录,并复制 `redis.conf` 至对应文件夹中。例如: ```bash mkdir -p /service/redis/{6379,6380} cp redis.conf /service/redis/6379/ cp redis.conf /service/redis/6380/ ``` ##### 3. 修改配置文件 编辑每个实例下的 `redis.conf` 文件,设置不同的监听端口号和其他必要参数。以下是关键配置项: - 设置绑定 IP 地址:`bind 0.0.0.0` - 关闭保护模式:`protected-mode no` - 开启集群功能:`cluster-enabled yes` - 指定集群配置文件位置:`cluster-config-file nodes-{port}.conf` - 设定日志级别:`loglevel notice` ##### 4. 启动 Redis 实例 依次启动各个 Redis 实例。例如: ```bash redis-server /service/redis/6379/redis.conf redis-server /service/redis/6380/redis.conf ``` 如果是在多台物理机上部署,则需要远程登录每台机器重复上述过程[^2]。 ##### 5. 构建集群拓扑 利用 `redis-cli` 的集群管理工具完成初始化操作。假设当前存在六个节点分布在三台主机上,则可输入如下指令构建集群关系: ```bash redis-cli --cluster create \ 192.168.x.y:6379 192.168.x.z:6379 ... \ --replicas 1 ``` 其中 `--replicas` 参数表示每个主节点分配几个副本[^4]。 ##### 6. 验证集群状态 最后可以通过以下方式验证集群是否正常运作: ```bash redis-cli -c -h {任意IP} -p {任一口号} CLUSTER INFO CLUSTER NODES PING SET key value GET key ``` --- #### 四、注意事项 - 如果使用 Docker 容器来部署 Redis 集群,请确保容器间网络互通良好。 - 对于 Windows 平台上的开发测试场景,可通过批处理脚本来简化服务启动流程[^3]。 --- #### 五、示例代码片段 下面展示了一个简单的 Python 程序用于连接至 Redis 集群并向其中写入一条记录: ```python import redis r = redis.StrictRedisCluster(startup_nodes=[{"host": "127.0.0.1", "port": "6379"}], decode_responses=True) r.set('foo', 'bar') print(r.get('foo')) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值