Redis Cluster 集群
Redis Cluster 是 Redis 官方提供的分布式解决方案,用于解决单机 Redis 在高并发和大数据量场景下的性能瓶颈和数据存储限制问题。它通过将数据分散到多个节点上,实现数据的分布式存储和高可用性。
基本架构
- 节点(Node):Redis Cluster 由多个 Redis 节点组成,每个节点都是一个 Redis 实例。节点之间通过 Gossip 协议进行通信,用于发现新节点、交换节点状态等。
- 槽(Slot):Redis Cluster 使用槽(Slot)来分配数据。总共有 16384 个槽,每个键根据其哈希值被分配到一个槽中,然后槽被分配到不同的节点上。这样可以实现数据的分布式存储。
- 主从复制:每个节点可以有多个从节点,用于数据的冗余备份。当主节点故障时,从节点可以进行故障转移,接管主节点的工作。
- 故障转移:当某个节点出现故障时,集群会自动进行故障转移,将故障节点的槽重新分配给其他节点,并由从节点接管主节点的工作,保证集群的高可用性。
优势
- 高可用性
- 自动故障转移:当主节点故障时,集群会自动将从节点提升为主节点,并重新分配槽,保证集群的正常运行。整个过程对客户端透明,客户端无需手动干预。
- 冗余备份:通过主从复制机制,每个节点的数据都有多个副本,降低了数据丢失的风险。
- 水平扩展
- 动态扩展:Redis Cluster 支持动态添加和移除节点。当集群的存储容量或计算能力不足时,可以通过添加新的节点来扩展集群。新增节点后,集群会自动将部分槽重新分配到新节点上,实现数据的均衡分布。
- 负载均衡:数据根据槽分配到不同的节点上,客户端请求也会根据槽的分布分散到不同的节点,从而实现负载均衡,避免单个节点成为性能瓶颈。
- 分布式存储
- 数据分片:通过槽机制将数据分散到多个节点上,每个节点只存储一部分数据,从而突破了单机 Redis 的存储限制,可以支持更大的数据量。
- 高吞吐量:多个节点同时处理请求,提高了集群的吞吐量,能够更好地应对高并发场景。
- 容错能力
- 节点故障隔离:集群中的节点是独立的,一个节点的故障不会影响其他节点的正常运行。即使部分节点出现故障,集群仍然可以正常提供服务。
- 自动恢复:当故障节点恢复后,集群会自动将其重新加入,并同步数据,恢复集群的完整性和一致性。
适用场景
Redis Cluster 适用于对数据存储容量和性能要求较高的场景,例如:
- 大规模缓存系统:在高并发的 Web 应用中,作为缓存层存储热点数据,提高系统的读取速度和响应能力。
- 消息队列:用于实现分布式消息队列,支持高并发的消息生产和消费。
- 分布式会话存储:在分布式系统中存储用户会话信息,保证会话数据的高可用性和一致性。
限制
虽然 Redis Cluster 有诸多优势,但也存在一些限制:
- 事务支持有限:Redis Cluster 不支持跨多个键的事务操作,因为这些键可能分布在不同的节点上。如果需要跨节点的事务,需要在客户端实现。
- 性能瓶颈:虽然集群可以扩展,但在某些极端情况下,如大量节点的故障转移或大规模的数据迁移,可能会对集群性能产生一定影响。
- 复杂性增加:相比单机 Redis,Redis Cluster 的架构和运维更加复杂,需要考虑节点的配置、槽的分配、故障转移等多方面的问题。
具体操作步骤如下:
安装包后续会放在博客中
也可以自己下载:
Redis 官方下载页面:https://redis.io/downloads/
不同平台的下载方式
Windows:
可以从 https://github.com/redis-windows/redis-windows/releases 下载适用于 Windows 的 Redis 版本。
也可以从 https://github.com/MicrosoftArchive/redis/releases 下载,这里有 MSI 安装包和免安装的绿色版。
Linux:
可以通过命令行工具(如 wget)从 https://download.redis.io/releases/ 下载源码包,然后进行编译安装。
1.上传将redis整个文件夹上传至/usr/local/中
2.进入rpm文件夹中
执行:rpm -ivh *.rpm
3.解压redis
命令: tar -zxvf redis-7.4.2.tar.gz
4.进入到redis-7.4.2的目录
命令:cd redis-7.4.2
5...编译安装
命令:sudo make install
6.等待安装
安装完成的目录结构如下
7.配置Redis节点
-
创建配置文件目录:
命令:
mkdir -p /etc/redis/{6371,6372,6373,6374,6375,6376}
-
创建配置文件:
为每个节点创建一个
redis.conf
文件:
bash
touch /etc/redis/6371/redis.conf
touch /etc/redis/6372/redis.conf
touch /etc/redis/6373/redis.conf
touch /etc/redis/6374/redis.conf
touch /etc/redis/6375/redis.conf
touch /etc/redis/6376/redis.conf
例如:配置端口6371的配置文件/etc/redis/6371/redis.conf
:
命令vi /etc/redis/6371/redis.conf
模板如下:
bash
port 6371
daemonize yes
pidfile /var/run/redis_6371.pid
logfile /var/log/redis_6371.log
dir /etc/redis/6371
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
为其他端口(6371-6376)重复上述步骤,修改对应的端口号。
8.启动Redis实例
- 启动每个节点:
输入以下命令:
bash
for PORT in {6371..6376}; do
redis-server /etc/redis/$PORT/redis.conf
done

检查端口监听:
命令:netstat -tulnp | grep redis
9.创建集群
- 使用
rediscli
工具创建集群:
bash
redis-cli --cluster create 127.0.0.1:6371 127.0.0.1:6372 127.0.0.1:6373 127.0.0.1:6374 127.0.0.1:6375 127.0.0.1:6376 --cluster-replicas 1

**
注:cluster-replicas 1
表示每个主节点有一个从节点。
如果集群分布在多台机器上,将127.0.0.1
替换为实际的IP地址。
根据提示完成集群创建:系统会提示分配槽位等操作,按提示输入yes
完成创建。
**
10.验证集群
bash
连接集群:
redis-cli -c -p 6371
- 执行命令验证:
CLUSTER INFO会显示集群的状态信息。
输入命令:CLUSTER INFO
CLUSTER NODES会显示所有节点的信息,包括主从关系和槽位分配。
输入命令:CLUSTER NODES
验证数据是否能够在主从节点之间同步。
11.测试数据存储