本地虚拟机部署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
相关推荐
ConardLi1 小时前
开源我的 GPT-Image2 生图 Skill,附大量玩法指南
前端·人工智能·后端
我是Superman丶1 小时前
Antigravity Retry 自动重试脚本
前端·javascript·vue.js
一叶龙洲1 小时前
Ubuntu开机无法用向日葵远程控制
linux·运维·ubuntu
是大强2 小时前
nvm安装node成功npm失败
前端·npm·node.js
coderlin_2 小时前
Langgraph项目三 agent搭建
java·数据库·redis
\xin2 小时前
pikachu自编CSRF(GET),CSRF(POST),CSRF(token)
前端·csrf
是大强2 小时前
前端一个项目用node20 一个项目用node14 怎么切换
前端
不老刘2 小时前
Git Cherry-Pick:微前端架构下的“精准医疗”与最佳实践
前端·git
Komorebi_99992 小时前
前端开发|18 个高频易错知识点汇总(HTML+CSS+JS+Vue)面试 & 开发通用
javascript·css·html