Docker 部署 Redis 集群学习记录

发布于:2025-03-29 ⋅ 阅读:(23) ⋅ 点赞:(0)

Docker 部署 Redis 集群学习记录

日期:2025/03/28


环境准备

  • 服务器:腾讯云 CentOS 7
  • 工具:Docker 已安装
  • 网络模式host 模式(直接使用宿主机网络)

操作步骤与问题记录

1️⃣ 创建 Redis 容器

# 创建三个节点(注意第三个节点名称应为 redis-node03)
docker create --name redis-node01 --net host -v redis-node01:/data redis:latest \
  --cluster-enabled yes --cluster-config-file nodes-node-01.conf --port 6379

docker create --name redis-node02 --net host -v redis-node02:/data redis:latest \
  --cluster-enabled yes --cluster-config-file nodes-node-02.conf --port 6380

docker create --name redis-node03 --net host -v redis-node03:/data redis:latest \
  --cluster-enabled yes --cluster-config-file nodes-node-03.conf --port 6381
参数 说明
docker create 创建容器但不立即启动
--name redis-node01 指定容器名为 redis-node01
--net host 网络模式:直接使用宿主机网络栈
-v redis-node01:/data 卷挂载: - redis-node01:Docker 卷名 - /data:容器内Redis数据目录
redis:latest 使用官方Redis最新镜像
--cluster-enabled yes 关键参数:启用集群模式
--cluster-config-file nodes-node-01.conf 指定集群配置文件路径(自动生成)
--port 6379 指定Redis服务监听端口

✅ 注意

  • --net host 模式简化网络配置,但需确保宿主机端口开放。如何开放宿主机端口请看下文

2️⃣ 启动容器并检查

docker start redis-node01 redis-node02 redis-node03

# 检查容器状态
docker ps -a | grep redis-node

3️⃣进入容器内部并执行容器创建

docker exec -it redis-node01 /bin/bash

# 执行集群创建命令
redis-cli --cluster create 宿主机地址:6379 宿主机地址:6380 宿主机地址:6381 --cluster-replicas 0
参数 说明
redis-cli --cluster create Redis集群创建命令
宿主机地址:6379 节点地址格式: - IP/Domain:Port
--cluster-replicas 0 副本数量设置: - 0表示无副本(纯主节点) - 1表示每个主节点带1个副本

4️⃣ 查询集群信息

root@VM-4-12-centos:/data# redis-cli
127.0.0.1:6379> cluster nodes
ad1c9a3df44045e0e4805eb3f85d43c1c6999a5b 宿主机地址:6380@16380 master - 0 1743129026074 2 connected 5461-10922
0284f37118b72aec004dae663b903bc20dfd48f4 宿主机地址:6381@16381 master - 0 1743129027076 3 connected 10923-16383
ad608bb6a4eac602d99e68fbd67bf98af0ef4af7 10.0.4.12:6379@16379 myself,master - 0 1743129025000 1 connected 0-5460‘

# 直接连接报错
127.0.0.1:6379> set abc 123
(error) MOVED 7638 宿主机地址:6380
127.0.0.1:6379> 

# 使用集群模式连接
root@VM-4-12-centos:/data# redis-cli -c
127.0.0.1:6379> set abc 123
-> Redirected to slot [7638] located at 宿主机地址:6380
OK
宿主机地址:6380> get abc
"123"
宿主机地址:6380> del abc
(integer) 1

	
字段 说明
myself,master 当前连接的节点(6379)是主节点
connected 0-5460 负责哈希槽0-5460
16379/16380/16381 集群总线端口(Redis端口+10000)
遇到的集群特性问题
1、 直接连接报错
redis-cli --cluster check 10.0.4.12:6379

原因:key"abc"的哈希槽7638属于6380节点,非集群模式连接不会自动重定向

2、集群模式解决方案
redis-cli -c  # 使用集群模式连接
127.0.0.1:6379> set abc 123
-> Redirected to slot [7638] located at 宿主机地址:6380
OK

关键点

  • -c 参数启用集群自动重定向
  • 客户端会自动跳转到正确节点执行命令

5️⃣ 配置集群时遇到的问题

错误现象:

  1. Cannot reconnect to [192.168.0.163:6381]: Connection refused: /192.168.0.163:6381
  2. redis 创建集群时,Waiting for the cluster to join… 一直…

解决方案:

  1. 在腾讯云、宝塔开启对应的6379、6380、6381端口,并在服务器中验证这些端口是否打开

    • 检查端口监听

      sudo ss -tulnp | grep 6379 # 无输出,端口未监听

    • 验证防火墙

      sudo systemctl status firewalld # 防火墙活跃 sudo firewall-cmd --list-ports # 无目标端口

    • 开放端口并重载

      sudo firewall-cmd --add-port={6379,6380,6381}/tcp --permanent sudo firewall-cmd --reload sudo firewall-cmd --list-ports | grep 638 # 验证成功

  2. 在尝试使用redis-cli命令创建Redis集群时,如果遇到Waiting for the cluster to join长时间无响应的情况,可能是因为云服务器未正确开启集群所需的端口。除了客户端连接端口,还需要开通每个节点的总线端口,即客户端端口加10000。例如,如果客户端端口是6379,总线端口应为16379。确保所有6个节点的端口和对应总线端口都已开放,包括7001到7006节点及其对应的17001到17006总线端口。在云服务器和宝塔面板上都必须配置这些端口的开放权限,以保证集群的正常通信。

    • 在腾讯云、宝塔中开放对应的端口集群的总线端口,
      例如:redis客户端连接的端口为6379,总线端口即为16379
    • 参考解放方案1完成开放端口