初始化 Redis 集群
在这一步中,你将使用 redis-cli --cluster create
命令初始化 Redis 集群。此命令简化了设置功能性 Redis 集群的过程。
什么是 Redis 集群?
Redis 集群是一种分布式设置,可以自动将数据分配到多个 Redis 节点上。这使你可以水平扩展 Redis 部署,并管理比单个 Redis 实例可以处理的更大的数据集。
为什么使用 redis-cli --cluster create
?
redis-cli --cluster create
命令提供了一种直接的方式来创建、管理 Redis 集群并与之交互。它可以自动完成初始配置和节点发现,从而简化了集群的创建。
步骤:
-
启动 Redis 实例:
首先,你需要配置并启动多个 Redis 实例。在这个实验中,我们将使用 6 个实例,它们运行在 7000 到 7005 端口上。每个实例都需要配置 cluster-enabled yes
。
为此,你可以使用以下命令来创建配置文件并启动 Redis 实例。请注意,这些命令仅用于演示目的。设置脚本已经为你配置并启动了这些实例。
REDIS_CONF="/etc/redis/redis.conf"
for port in 7000 7001 7002 7003 7004 7005; do
CONF_FILE="/etc/redis/redis-${port}.conf"
sudo cp "$REDIS_CONF" "$CONF_FILE"
sudo sed -i "s/^port 6379/port ${port}/g" "$CONF_FILE"
sudo sed -i "s/^#cluster-enabled yes/cluster-enabled yes/g" "$CONF_FILE"
sudo sed -i "s/^#cluster-config-file nodes.conf/cluster-config-file nodes-${port}.conf/g" "$CONF_FILE"
sudo sed -i "s/^#cluster-node-timeout 15000/cluster-node-timeout 15000/g" "$CONF_FILE"
sudo sed -i "s/^#appendonly no/appendonly yes/g" "$CONF_FILE"
sudo redis-server "$CONF_FILE" &
done
sleep 5
-
创建集群:
现在,使用 redis-cli --cluster create
命令来创建集群。此命令需要初始节点的 IP 地址和端口。
打开你的终端并执行以下命令:
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
redis-cli --cluster create
:启动集群创建过程。
127.0.0.1:7000 127.0.0.1:7001 ... 127.0.0.1:7005
:Redis 实例的地址和端口。
--cluster-replicas 1
:指定每个主节点应具有 1 个副本(replica)。
-
确认集群创建:
redis-cli
工具将要求你确认集群创建。键入 yes
并按 Enter 键。
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
>>> Master[0] -> Slots 0 - 5460
>>> Master[1] -> Slots 5461 - 10922
>>> Master[2] -> Slots 10923 - 16383
>>> Adding replica node to Master[0]
>>> Adding replica node to Master[1]
>>> Adding replica node to Master[2]
>>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
>>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001
slots:[5461-10922] (5462 slots) master
>>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002
slots:[10923-16383] (5461 slots) master
>>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003
replicates 49a4928719291928192819281928192819281928
>>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004
replicates 9281928192819281928192819281928192819281
>>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005
replicates 19281928192819281928192819281928192819281
>>> Can I set the above configuration? (type 'yes' to accept): yes
>>> Slots 0-5460 assigned to node 49a4928719291928192819281928192819281928
>>> Slots 5461-10922 assigned to node 9281928192819281928192819281928192819281
>>> Slots 10923-16383 assigned to node 19281928192819281928192819281928192819281
>>> Adding replica 81928192819281928192819281928192819281928 to 49a4928719291928192819281928192819281928
>>> Adding replica 28192819281928192819281928192819281928192 to 9281928192819281928192819281928192819281
>>> Adding replica 928192819281928192819281928192819281928192 to 19281928192819281928192819281928192819281
>>> [OK] All nodes agree about the cluster configuration.
>>> >>> Check cluster info
>>> >>> Nodes
>>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
>>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
>>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
>>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003
replicates 49a4928719291928192819281928192819281928
>>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004
replicates 9281928192819281928192819281928192819281
>>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005
replicates 19281928192819281928192819281928192819281
>>> [OK] All nodes agree about the cluster configuration.
>>> All 16384 slots covered.
此输出显示了槽到每个主节点的分配以及副本的分配。
-
连接到集群:
使用 redis-cli
连接到 Redis 集群。这使你可以针对集群执行命令。
redis-cli -h 127.0.0.1 -p 7000
-
退出 redis-cli
:
退出 redis-cli
会话以确保该命令已记录。
exit
你现在已经成功初始化了一个 Redis 集群。在接下来的步骤中,我们将探讨如何添加节点、检查集群健康状况以及重新分片槽。