docker实现redis-cluster模式集群部署

前言

记录docker实现redis-cluster模式集群部署,需要快速跑通验证直接跳到快速部署即可。

通过网盘分享的文件:redis集群部署.zip

链接: https://pan.baidu.com/s/14bs6sC6hbTyq1knjCvoEJw?pwd=jpy3 提取码: jpy3

四步快速部署

步骤一:下载压缩包解压

将 redis集群部署\ip\redis-cluster 文件夹上传到对应服务器 /home 文件夹下

步骤二:修改 /home/redis-cluster/端口号/conf/redis.conf 文件

步骤三:进入三台服务器对应目录:/home/redis-cluster 执行命令

docker-compose up -d 或 docker compose up -d

部署四:执行命令

在 任意一台机器执行:

docker exec -it redis-7001 redis-cli --cluster create \

172.16.10.80:7001 \

172.16.10.98:7001 \

172.16.10.97:7001 \

172.16.10.80:7002 \

172.16.10.98:7002 \

172.16.10.97:7002 \

--cluster-replicas 1

然后输入:

yes

验证部署是否成功命令

docker exec -it redis-7001 redis-cli -c -p 7001

cluster nodes

cluster info

具体操作步骤

我现在有三台服务器:

172.16.10.80

172.16.10.98

172.16.10.97

一、整体架构(先让你脑子里有图)

每台机器跑 2个实例(1主1从),交叉主从:

172.16.10.80 → M1 + S2

172.16.10.98 → M2 + S3

172.16.10.97 → M3 + S1

最终结构:

M1 → S2

M2 → S3

M3 → S1

👉 好处:

  • 任意一台机器挂掉,不会同时丢主+从
  • 满足高可用

二、每台机器准备目录

在 三台机器都执行:

mkdir -p /home/redis-cluster/{7001,7002}/{data,conf}


三、redis.conf(通用模板)

路径:

/home/redis-cluster/7001/conf/redis.conf

/home/redis-cluster/7002/conf/redis.conf

内容👇(关键!!):

7002那个改成7002

port 7001

bind 0.0.0.0

protected-mode no

daemonize no

appendonly yes

dir /data

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

⭐️关键(跨机器必须)

每台机器改成自己的IP

cluster-announce-ip 172.16.10.80

对应端口

cluster-announce-port 7001

= port + 10000

cluster-announce-bus-port 17001

👉 7002 要改成:

port 7002

cluster-announce-port 7002

cluster-announce-bus-port 17002

四、docker-compose.yml(每台机器一份)

🔹 172.16.10.80

version: '3.8'

services:

redis-7001:

image: redis:7.0.12

container_name: redis-7001

network_mode: host

volumes:

  • /home/redis-cluster/7001/conf/redis.conf:/usr/local/etc/redis/redis.conf

  • /home/redis-cluster/7001/data:/data

command: redis-server /usr/local/etc/redis/redis.conf

redis-7002:

image: redis:7.0.12

container_name: redis-7002

network_mode: host

volumes:

  • /home/redis-cluster/7002/conf/redis.conf:/usr/local/etc/redis/redis.conf

  • /home/redis-cluster/7002/data:/data

command: redis-server /usr/local/etc/redis/redis.conf


🔹 172.16.10.98 / 172.16.10.97

👉 完全一样,只改:

cluster-announce-ip

五、启动所有节点

三台机器分别执行:

docker-compose up -d


六、创建集群(只需要执行一次🔥)

在 任意一台机器执行:

docker exec -it redis-7001 redis-cli --cluster create \

172.16.10.80:7001 \

172.16.10.98:7001 \

172.16.10.97:7001 \

172.16.10.80:7002 \

172.16.10.98:7002 \

172.16.10.97:7002 \

--cluster-replicas 1

然后输入:

yes


七、验证集群

redis-cli -c -h 172.16.10.80 -p 7001

cluster nodes

cluster info


八、必须检查的坑(重点)

1️⃣ 防火墙

开放:

复制代码
7001-7002
17001-17002

2️⃣ 端口说明

端口 用途
7001/7002 客户端
17001/17002 集群通信

3️⃣ 一定要配置 cluster-announce-ip

否则:

❌ 集群会用 Docker 内网 IP

👉 直接导致节点互相连不上


九、一键初始化脚本(帮你省事🔥)

你可以保存为:

init-cluster.sh

#!/bin/bash

docker exec -it redis-7001 redis-cli --cluster create \

172.16.10.80:7001 \

172.16.10.98:7001 \

172.16.10.97:7001 \

172.16.10.80:7002 \

172.16.10.98:7002 \

172.16.10.97:7002 \

--cluster-replicas 1 <<EOF

yes

EOF

扩展

安装Another-Redis-Desktop-Manager-win-1.7.1-x64 客户端验证redis连接

yml配置

复制代码
redis:
  cluster:
#只配置6个节点只配置三个主节点 不配置从节点防止客户端直连和同步未完成时被访问
    nodes:
      - 172.16.10.80:7001
      - 172.16.10.98:7001
      - 172.16.10.97:7001
    max-redirects: 3
  # Redis服务器连接密码(默认为空)
  password:
  # 连接超时时间(毫秒)
  timeout: 2000
  lettuce:
    # 连接池最大连接数(使用负值表示没有限制)
    pool:
      max-active: 5000
      # 连接池最大阻塞等待时间(使用负值表示没有限制)
      max-wait: 30000
      # 连接池中的最大空闲连接
      max-idle: 10
      # 连接池中的最小空闲连接
      min-idle: 5
相关推荐
蛋蛋的就会顺顺的5 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8265 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡5 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
骇客野人6 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
伯恩bourne7 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_8 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs8 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲8 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
程序员老赵9 小时前
Docker 部署 Wiki.js:轻松搭建私有化维基知识库
docker·容器·开源