使用 docker-compose 安装 Redis 集群步骤
创建项目目录
创建一个新的目录来存放 docker-compose.yml 文件:
mkdir redis-cluster-docker && cd redis-cluster-docker
创建配置文件
在 redis-cluster-docker 目录下创建 conf 目录,并在其目录下添加 redis.conf 文件
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
创建 docker-compose 配置文件
在 redis-cluster-docker 目录创建一个名为 docker-compose.yml 的文件
version: '3.8'
services:
redis-cluster-creator:
command:
- redis-cli
- --cluster
- create
- localhost:7001
- localhost:7002
- localhost:7003
- localhost:7004
- localhost:7005
- localhost:7006
- --cluster-yes
- --cluster-replicas
- '1'
depends_on:
redis-node-1:
condition: service_healthy
redis-node-2:
condition: service_healthy
redis-node-3:
condition: service_healthy
redis-node-4:
condition: service_healthy
redis-node-5:
condition: service_healthy
redis-node-6:
condition: service_healthy
image: docker.io/redis:latest
network_mode: host
redis-node-1:
command:
- redis-server
- /conf/redis.conf
- --port
- '7001'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7001'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7001:7000
volumes:
- redis-data-1:/data
- ./conf:/conf
redis-node-2:
command:
- redis-server
- /conf/redis.conf
- --port
- '7002'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7002'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7002:7000
volumes:
- redis-data-2:/data
- ./conf:/conf
redis-node-3:
command:
- redis-server
- /conf/redis.conf
- --port
- '7003'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7003'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7003:7000
volumes:
- redis-data-3:/data
- ./conf:/conf
redis-node-4:
command:
- redis-server
- /conf/redis.conf
- --port
- '7004'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7004'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7004:7000
volumes:
- redis-data-4:/data
- ./conf:/conf
redis-node-5:
command:
- redis-server
- /conf/redis.conf
- --port
- '7005'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7005'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7005:7000
volumes:
- redis-data-5:/data
- ./conf:/conf
redis-node-6:
command:
- redis-server
- /conf/redis.conf
- --port
- '7006'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7006'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7006:7000
volumes:
- redis-data-6:/data
- ./conf:/conf
volumes:
redis-data-1: {}
redis-data-2: {}
redis-data-3: {}
redis-data-4: {}
redis-data-5: {}
redis-data-6: {}
- redis-cluster-creator 主要的作用是将 redis-data-1 到 redis-data-6 实例组合成 Redis 集群。
启动 Redis 容器
运行以下命令来启动所有 Redis 实例:
docker-compose up -d
验证集群
使用以下命令查看集群的状态:
docker exec -it <container_id> redis-cli -p <port>
> CLUSTER INFO
> CLUSTER NODES
例如,使用以下命令进入容器,查看集群详情
docker exec -it redis-cluster-docker-redis-node-2-1 redis-cli -p 7002
> CLUSTER INFO
cluster_state:ok # 集群状态为 OK,表示集群正常运行
cluster_slots_assigned:16384 # 总共分配的槽位数为 16384
cluster_slots_ok:16384 # 正常的槽位数为 16384
cluster_slots_pfail:0 # 潜在故障的槽位数为 0
cluster_slots_fail:0 # 故障的槽位数为 0
cluster_known_nodes:6 # 集群中已知的节点数为 6
cluster_size:3 # 集群的主节点数量为 3
cluster_current_epoch:6 # 当前的集群纪元为 6
cluster_my_epoch:2 # 本节点的纪元为 2
cluster_stats_messages_ping_sent:430 # 已发送的 PING 消息数量为 430
cluster_stats_messages_pong_sent:416 # 已发送的 PONG 消息数量为 416
cluster_stats_messages_meet_sent:1 # 已发送的 MEET 消息数量为 1
cluster_stats_messages_sent:847 # 总发送的消息数量为 847
cluster_stats_messages_ping_received:416 # 已接收的 PING 消息数量为 416
cluster_stats_messages_pong_received:431 # 已接收的 PONG 消息数量为 431
cluster_stats_messages_received:847 # 总接收的消息数量为 847
total_cluster_links_buffer_limit_exceeded:0 # 超过集群链接缓冲区限制的次数为 0
> CLUSTER NODES
d00ec055eb181999722c936072f20bc5d05c8557 ::1:7006@17006 slave 79192a91b73234b56ab7b9579878700046298926 0 1730913702000 3 connected
42e7656087a948ffb29ebea9594bc6dbaf36f409 127.0.0.1:7002@17002 myself,master - 0 0 2 connected 5461-10922
265a9e53f29b90e5d2eef0acd7ae6ed54a70e60f ::1:7005@17005 slave 42e7656087a948ffb29ebea9594bc6dbaf36f409 0 1730913701346 2 connected
79192a91b73234b56ab7b9579878700046298926 ::1:7003@17003 master - 0 1730913702351 3 connected 10923-16383
a1bba3ab668a1f0d5017c1aa44491090ae464bce ::1:7001@17001 master - 0 1730913701000 1 connected 0-5460
98abac595337ff78f0fc12574c089e3119395e24 ::1:7004@17004 slave a1bba3ab668a1f0d5017c1aa44491090ae464bce 0 1730913701849 1 connected
CLUSTER NODES 字段解析:
- d00ec055eb181999722c936072f20bc5d05c8557: 这是节点的唯一标识符(Node ID)。
- **::1: 7006@17006 **: 这是节点的地址信息。
::1是 IPv6 的环回地址,相当于 IPv4 的127.0.0.1。7006是用于客户端连接的端口,17006是用于集群总线通信的端口。 - slave: 这表示该节点的角色是从节点(也就是复制其他节点的数据)。
- 79192a91b73234b56ab7b9579878700046298926: 这是该从节点正在复制的主节点的 ID。
- 0: 这个字段通常是代表 ping-sent 的时间戳(以毫秒为单位),即本节点最后一次 PING 这个节点的时间。在这里是
0,通常意味着没有延迟或还没有发送 PING。 - 1730913702000: 这是 pong-recv 的时间戳(以毫秒为单位),标识最近一次从这个节点接收到 PONG 回复的时间。
- 3: 这是节点的槽位(slots)分配情况。对于从节点,这个值通常表示主节点的槽位分配情况,因为从节点不负责槽位。
- connected: 这个字段表示这个节点的连接状态,
connected意味着该节点目前正常连接并正在工作。

浙公网安备 33010602011771号