搭建 Redis 集群【Windows】

Redis 集群是一个分布式存储解决方案,它将数据分布在多个Redis节点上,以提高系统的可伸缩性、可靠性和性能。

1. 集群概念与特点

  • 集群概念:Redis集群是由多个相互独立的 Redis 节点组成,这些节点通过高速网络互联,并作为一个整体对外提供服务。

  • 特点

    1. 高可用性:通过数据分片和数据复制来提供高可用性。当一个节点失败时,集群可以继续工作,并通过数据复制从其他节点获得数据。
    2. 扩展性:支持水平扩展,可以将数据分布在多个节点上,从而提供更高的存储容量和处理能力。
    3. 高性能:可以在多个节点上并行处理请求,提供更高的吞吐量和更低的延迟。

1.1. 集群模式

Redis 集群主要有三种模式:主从模式、Sentinel 模式和 Cluster 模式。其中,Cluster 模式是最常用的模式,它支持多个 master 节点,每个 master 节点可以挂载多个 slave 节点,实现读写分离和数据备份。

1.2. 集群原理与实现

  1. 数据分片:Redis 集群使用分片技术将数据分布在多个节点上。数据被划分为多个槽(slot),每个槽对应一个节点。集群总共有 16384 个槽,每个节点负责管理一部分槽。
  2. 节点通信:节点之间通过 Gossip 协议进行通信,以保持节点之间的状态一致性。
  3. 请求处理:当一个客户端请求访问某个槽的数据时,它会先通过 CRC16 算法计算出该数据属于哪个槽,然后根据槽与节点的映射关系,将请求发送给相应的节点。
  4. 主从复制:每个主节点负责一部分槽的数据,同时也会有一个或多个从节点备份主节点的数据。当主节点故障时,其中一个从节点会被选举为新的主节点,保证系统的高可用性。
  5. 自动故障恢复:Redis 集群实现了自动数据迁移和故障恢复机制。当新增节点或节点故障时,集群会自动进行数据迁移,将槽重新分配给其他节点,以保证数据的均衡和高可用性。

2. 集群搭建

这里搭建的 Redis 集群位于单台主机上,所以 IP 地址均为 127.0.0.1

2.1. 创建配置文件

这里我们将搭建三个主节点,然后每个主节点分配一个从节点,所以一共需要启动六个 Redis 实例。

这里我们将文件命名为 cluster-port.conf,其中 port 是每个 redis 实例的端口。比如:cluster-6379.conf

bash 复制代码
port 6379

cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

dbfilename dump-6379.rdb
appendfilename "appendonly-6379.aof"

# linux 下你还要修改下面这些
daemonize yes
pidfile /var/run/redis-6379.pid

然后为每个端口的 redis 实例都创建一个配置文件。修改其中的端口即可。在 linux 中你可以使用下面的命令快速地创建多个文件。

shell 复制代码
# 这段命令的作用是将 redis-6379.conf 中所有的 6379 替换为 6380 并将结果
# 输出到 redis-6380.conf 文件中
sed 's/6379/6380/g' redis-6379.conf > redis-6380.conf

2.2. 启动集群

在 windows 中使用如下命令创建集群,Redis 会自动设置每个实例的主从关系。不过首先你需要先将全部的 redis 实例启动。像下面这样:

shell 复制代码
# start 作用是让 redis 后台启动
start redis-server.exe cluster-6379.conf

然后我们再通过 redis-cli 创建集群。

shell 复制代码
redis-cli.exe --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1

命令执行结果如下:

最后 redis 会自动配置集群,它会给出主从节点的分配,最后让你确认是否这样分配。输入 yes 之后集群就创建完成了。

2.3. 测试集群

既然集群搭建好了,那可得玩一玩。使用下面的命令连接集群,连接集群中任意一个主从节点均可。

shell 复制代码
# -c 表示连接集群
redis-cli.exe -p 6379 -c

然后我们就可以尝试添加数据、获取数据。由于在 redis 集群中,每个主节点存储着部分槽(slots)的数据,所以让我们添加数据时,如果该数据的键映射到其他的节点的槽位上了,redis-cli 会直接连接到对应的节点。结果如下:

3. 集群管理

Redis 集群还支持增删节点、获取集群状态等操作。

3.1. 获取集群信息

shell 复制代码
# 这里随便指定一个集群中节点即可
redis-cli.exe --cluster info 127.0.0.1:6379

3.2. 平衡槽位数量

shell 复制代码
redis-cli.exe --cluster rebalance 127.0.0.1:6379

3.3. 迁移节点槽位

shell 复制代码
redis-cli.exe --cluster reshard 127.0.0.1:6379

3.4. 删除节点

shell 复制代码
redis-cli.exe --cluster del-node 127.0.0.1:6379 <node-id>

3.5. 添加节点

shell 复制代码
redis-cli.exe --cluster add-node 127.0.0.1:8000 127.0.0.1:6379

添加节点后进行槽位迁移,该新节点加入时默认为主节点。

shell 复制代码
redis-cli.exe --cluster reshard 127.0.0.1:6379

receive ID 为 新加入节点的 nodeID,然后源节点输入 all 即可,最后确认即可。

相关推荐
uzong3 小时前
技术故障复盘模版
后端
GetcharZp4 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程4 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi5 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国6 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy6 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
鼠鼠我捏,要死了捏6 小时前
生产环境Redis缓存穿透与雪崩防护性能优化实战指南
redis·cache
AntBlack6 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9657 小时前
pip install 已经不再安全
后端