搭建 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 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_2 小时前
敏捷开发流程-精简版
前端·后端
苏打水com3 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧4 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧4 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧4 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧4 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧4 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng6 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6016 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring