搭建 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 即可,最后确认即可。

相关推荐
红尘散仙2 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记3 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪4 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6164 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364574 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao5 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒6 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰7 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox7 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全