本地虚拟机部署redis集群

1. 查看虚拟机 IP(重要)

复制代码
ip addr show | grep "inet " | grep -v 127.0.0.1

假设输出的 IP 是 192.168.1.100后面所有命令中都要替换成你的实际 IP


2. 关闭防火墙(测试阶段)

复制代码
sudo ufw disable

3. 创建工作目录并进入

复制代码
mkdir -p /opt/redis-cluster
复制代码
cd /opt/redis-cluster

4. 生成 docker-compose.yml(所有节点使用外部宣告地址)

复制代码
cat > docker-compose.yml <<EOF
version: '3.8'
services:
  redis-node-1:
    image: redis:7-alpine
    container_name: redis-node-1
    restart: always
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --bind 0.0.0.0 --protected-mode no --cluster-announce-ip 192.168.1.100 --cluster-announce-port 7001 --cluster-announce-bus-port 17001
    ports:
      - "7001:6379"
      - "17001:16379"
    networks:
      - redis-net
    volumes:
      - node1-data:/data
  redis-node-2:
    image: redis:7-alpine
    container_name: redis-node-2
    restart: always
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --bind 0.0.0.0 --protected-mode no --cluster-announce-ip 192.168.1.100 --cluster-announce-port 7002 --cluster-announce-bus-port 17002
    ports:
      - "7002:6379"
      - "17002:16379"
    networks:
      - redis-net
    volumes:
      - node2-data:/data
  redis-node-3:
    image: redis:7-alpine
    container_name: redis-node-3
    restart: always
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --bind 0.0.0.0 --protected-mode no --cluster-announce-ip 192.168.1.100 --cluster-announce-port 7003 --cluster-announce-bus-port 17003
    ports:
      - "7003:6379"
      - "17003:16379"
    networks:
      - redis-net
    volumes:
      - node3-data:/data
  redis-node-4:
    image: redis:7-alpine
    container_name: redis-node-4
    restart: always
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --bind 0.0.0.0 --protected-mode no --cluster-announce-ip 192.168.1.100 --cluster-announce-port 7004 --cluster-announce-bus-port 17004
    ports:
      - "7004:6379"
      - "17004:16379"
    networks:
      - redis-net
    volumes:
      - node4-data:/data
  redis-node-5:
    image: redis:7-alpine
    container_name: redis-node-5
    restart: always
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --bind 0.0.0.0 --protected-mode no --cluster-announce-ip 192.168.1.100 --cluster-announce-port 7005 --cluster-announce-bus-port 17005
    ports:
      - "7005:6379"
      - "17005:16379"
    networks:
      - redis-net
    volumes:
      - node5-data:/data
  redis-node-6:
    image: redis:7-alpine
    container_name: redis-node-6
    restart: always
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --bind 0.0.0.0 --protected-mode no --cluster-announce-ip 192.168.1.100 --cluster-announce-port 7006 --cluster-announce-bus-port 17006
    ports:
      - "7006:6379"
      - "17006:16379"
    networks:
      - redis-net
    volumes:
      - node6-data:/data
networks:
  redis-net:
    driver: bridge
volumes:
  node1-data:
  node2-data:
  node3-data:
  node4-data:
  node5-data:
  node6-data:
EOF

5. 启动所有节点

复制代码
docker compose up -d

6. 检查容器状态(6 个都要 Up)

复制代码
docker compose ps

7. 创建集群(IP 必须改成你自己的

复制代码
docker exec -it redis-node-1 redis-cli --cluster create 192.168.1.100:7001 192.168.1.100:7002 192.168.1.100:7003 192.168.1.100:7004 192.168.1.100:7005 192.168.1.100:7006 --cluster-replicas 1 --cluster-yes

看到 [OK] All 16384 slots covered. 表示集群创建成功。


8. 验证集群拓扑(确认 IP 都是外部地址)

复制代码
docker exec -it redis-node-1 redis-cli -c -h 192.168.1.100 -p 7001 cluster nodes

9. 修改你的 Nacos 配置(在 Windows 上)

复制代码
spring:
  ccreate-redis:
    cluster:
      nodes:
        - 192.168.1.100:7001
        - 192.168.1.100:7002
        - 192.168.1.100:7003
        - 192.168.1.100:7004
        - 192.168.1.100:7005
        - 192.168.1.100:7006
      max-redirects: 5

同时必须确保 Java 代码中 RedissonNatMapper 禁用或移除,避免它自动把地址转为 localhost。


10. 在 Windows 上测试连通性

复制代码
Test-NetConnection -ComputerName 192.168.1.100 -Port 7001

返回 TcpTestSucceeded : True 即可。


可能出现的问题:

1.阿里云镜像加速地址 https://registry.cn-hangzhou.aliyuncs.com 已无法从公网访问。根据公开信息,自2024年7月起,阿里云等国内云厂商的容器镜像加速器普遍调整为仅限本云内网使用。因此,从Ubuntu虚拟机发起请求会失败,Docker便自动回退到默认的官方仓库 registry-1.docker.io,并最终因服务器位于海外且网络环境不稳定而报错。

解决方案:更换可用的公开加速镜像

你可以将之前配置的镜像地址替换为以下由社区或企业维护的、当前仍可公网访问的加速器。

1. 修改 Docker 配置文件

复制代码
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://proxy.1panel.live",
    "https://docker.1panel.top",
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://docker.ketches.cn"
  ]
}
EOF

这个新配置会提供一个国内的镜像加速地址列表,Docker将按顺序尝试。

2. 重启Docker

复制代码
sudo systemctl daemon-reload
复制代码
sudo systemctl restart docker

3. 验证配置是否生效

复制代码
docker info | grep -A 10 "Registry Mirrors"

这个命令可以查看Docker当前加载的镜像加速配置是否已更新。我们在已经打开的搜索结果中找到了相关的验证方法,你可以用它来确认配置是否成功。

4. 现在,重新拉取 Redis 镜像

确认配置生效后,可以手动拉取一下镜像来验证网络是否通畅:

复制代码
docker pull redis:7-alpine

如果看到镜像开始下载,就说明网络问题已经解决了。


验证成功后

5. 返回项目目录

复制代码
cd /opt/redis-cluster

6. 用docker compose启动所有Redis节点

复制代码
docker compose up -d

7. 等待启动完毕,创建集群,把 IP 换成你的真实虚拟机IP

复制代码
docker exec -it redis-node-1 redis-cli --cluster create 192.168.1.100:7001 192.168.1.100:7002 192.168.1.100:7003 192.168.1.100:7004 192.168.1.100:7005 192.168.1.100:7006 --cluster-replicas 1 --cluster-yes
相关推荐
何智超1 分钟前
AI 微前端性能优化之旅(上):复盘
前端·vibecoding
许我半盏清茶4 分钟前
前端路由:理解 hash 路由和 history 路由原理
前端·react.js
XIAOHEZIcode5 分钟前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
胡萝卜术10 分钟前
从暴力到Z字形消元:力扣240「搜索二维矩阵II」的降维打击之路
前端·javascript·面试
比老马还六14 分钟前
Bipes-Blockly项目二次开发/Coze智能体(十)
前端·嵌入式
16 分钟前
Vue 3 组件封装与使用:保姆级教程
前端
星辰20 分钟前
深入浅出 Android AOA 协议:通信流程与设备切换附着机制解析
前端
恋猫de小郭38 分钟前
Amper 正式转正 Kotlin Toolchain ,Gradle 未来何去何从
android·前端·flutter
敲代码的彭于晏1 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
IT_陈寒1 小时前
Redis内存飙升的锅,原来是我没搞懂这个过期策略
前端·人工智能·后端