Redis Cluster 集群搭建和扩容

FreeGuideOnline 最新 2026-07-08

bash

下载并编译安装

cd /usr/local/src wget https://download.redis.io/releases/redis-6.2.6.tar.gz tar xzf redis-6.2.6.tar.gz cd redis-6.2.6 make && make install

创建配置和数据目录(以节点1为例,其他节点调整端口和路径)

mkdir -p /etc/redis/cluster mkdir -p /var/lib/redis/6379


### 单节点配置

为每个节点创建独立的配置文件。以 `192.168.56.101` 上的端口 `6379` 为例,创建 `/etc/redis/cluster/6379.conf`:

```ini
port 6379
bind 192.168.56.101
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/lib/redis/6379

# 集群配置
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

# 持久化
appendonly yes
appendfilename "appendonly.aof"

其他节点同理,修改 portbindpidfilelogfiledircluster-config-file 中的端口号。在两台机器上共创建 6 个配置文件。

启动所有节点

在两台机器上分别启动各自的 Redis 实例:

# 在 192.168.56.101 上
redis-server /etc/redis/cluster/6379.conf
redis-server /etc/redis/cluster/6380.conf
redis-server /etc/redis/cluster/6381.conf

# 在 192.168.56.102 上
redis-server /etc/redis/cluster/6379.conf
redis-server /etc/redis/cluster/6380.conf
redis-server /etc/redis/cluster/6381.conf

验证启动状态

ps -ef | grep redis

每个节点日志应出现 Cluster mode enabled 字样。

创建 Cluster

使用 redis-cli 的集群创建命令,将一个节点作为种子节点即可自动发现其他成员。

redis-cli --cluster create \
192.168.56.101:6379 \
192.168.56.101:6380 \
192.168.56.101:6381 \
192.168.56.102:6379 \
192.168.56.102:6380 \
192.168.56.102:6381 \
--cluster-replicas 1

参数说明:

  • --cluster create:创建集群
  • --cluster-replicas 1:为每个主节点分配一个从节点

执行后会展示自动分配的主从关系,输入 yes 确认。

预期输出

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica ... to ...
...
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

验证集群状态

连接任意节点检查集群信息:

redis-cli -h 192.168.56.101 -p 6379 cluster nodes

输出会列出所有节点的 ID、地址、角色(master/slave)、槽位范围等。

测试数据读写与重定向:

redis-cli -h 192.168.56.101 -p 6379
> set key1 hello
(error) MOVED 9189 192.168.56.101:6380   # 键被分配到其他节点

# 使用 -c 参数开启集群模式自动重定向
redis-cli -h 192.168.56.101 -p 6379 -c
> set key1 hello
-> Redirected to slot [9189] located at 192.168.56.101:6380
OK
> get key1
"hello"

看到 MOVED 重定向以及自动跳转则说明集群工作正常。

Redis Cluster 扩容

当业务增长需要更多存储容量或更高吞吐时,可以向运行中的集群添加新节点。

添加新节点

假设我们要新增一对主从节点:

  • 新主节点:192.168.56.103:6379
  • 新从节点:192.168.56.103:6380

1. 准备新节点

在新机器(192.168.56.103)上安装 Redis,创建配置,启动两个实例(配置与之前相同,注意端口和 cluster-enabled yes)。

2. 添加新主节点到集群

redis-cli --cluster add-node 192.168.56.103:6379 192.168.56.101:6379
  • 第一个地址是要添加的新节点
  • 第二个地址是集群中任意一个已存在的节点

执行后检查集群节点,发现新节点已加入但尚未分配槽位,也没有负责的哈希槽。

3. 重新分配哈希槽

需要将部分槽位迁移到新主节点,实现数据均匀分布。

redis-cli --cluster reshard 192.168.56.101:6379

交互式选择:

  • How many slots do you want to move?:输入要迁移的槽位数。总槽位 16384,现有 3 主,新增后共 4 主,所以迁移约 4096 个槽。
  • What is the receiving node ID?:输入新主节点的 ID(可通过 cluster nodes 查看)。
  • Source node:输入 all 让集群自动从所有现有主节点均匀抽取槽位,或者逐一指定。

然后确认执行计划,输入 yes 开始在线迁移。迁移过程中集群正常对外服务。

4. 添加从节点

为新主节点分配从节点,提升高可用性:

redis-cli --cluster add-node 192.168.56.103:6380 192.168.56.101:6379 \
  --cluster-slave --cluster-master-id <新主节点ID>
  • --cluster-slave:指定添加的节点为从节点
  • --cluster-master-id:指定要跟随的主节点 ID

验证扩容结果

redis-cli -h 192.168.56.101 -p 6379 cluster nodes
redis-cli -h 192.168.56.101 -p 6379 cluster slots