使用docker-compose搭建redis7集群-3主3从

news/2024/10/25 1:58:43/

在这里插入图片描述

dockercomposeyml__6__Redis_3___3__Redis__1">下面是一个用于搭建 Redis 集群的 docker-compose.yml 示例文件,它会启动 6 个 Redis 节点(3 主节点 + 3 从节点)来构成一个最小的 Redis 集群。

同一个容器内网通讯没问题,但是你要是需要暴露到外网你需要用第二个yml

内网的

version: '3.8'
services:redis-node1:image: redis:7.0container_name: redis-node1command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "redis-node1", "--cluster-announce-port", "6379", "--cluster-announce-bus-port", "16379"]ports:- "6379:6379"- "16379:16379"volumes:- ./data/redis-node1:/datanetworks:- redis-clusterredis-node2:image: redis:7.0container_name: redis-node2command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "redis-node2", "--cluster-announce-port", "6379", "--cluster-announce-bus-port", "16379"]ports:- "6380:6379"- "16380:16379"volumes:- ./data/redis-node2:/datanetworks:- redis-clusterredis-node3:image: redis:7.0container_name: redis-node3command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "redis-node3", "--cluster-announce-port", "6379", "--cluster-announce-bus-port", "16379"]ports:- "6381:6379"- "16381:16379"volumes:- ./data/redis-node3:/datanetworks:- redis-clusterredis-node4:image: redis:7.0container_name: redis-node4command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "redis-node4", "--cluster-announce-port", "6379", "--cluster-announce-bus-port", "16379"]ports:- "6382:6379"- "16382:16379"volumes:- ./data/redis-node4:/datanetworks:- redis-clusterredis-node5:image: redis:7.0container_name: redis-node5command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "redis-node5", "--cluster-announce-port", "6379", "--cluster-announce-bus-port", "16379"]ports:- "6383:6379"- "16383:16379"volumes:- ./data/redis-node5:/datanetworks:- redis-clusterredis-node6:image: redis:7.0container_name: redis-node6command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "redis-node6", "--cluster-announce-port", "6379", "--cluster-announce-bus-port", "16379"]ports:- "6384:6379"- "16384:16379"volumes:- ./data/redis-node6:/datanetworks:- redis-clusternetworks:redis-cluster:driver: bridge

外网的

version: '3.3'
services:redis-node1:image: rediscontainer_name: redis-node1command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "你的外网ip或者域名", "--cluster-announce-port", "6379", "--cluster-announce-bus-port", "16379"]ports:- "26379:6379"- "16379:16379"volumes:- ./data/redis-node1:/datanetworks:- redis-cluster-composeredis-node2:image: rediscontainer_name: redis-node2command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "你的外网ip或者域名", "--cluster-announce-port", "6380", "--cluster-announce-bus-port", "16380"]ports:- "26380:6379"- "16380:16379"volumes:- ./data/redis-node2:/datanetworks:- redis-cluster-composeredis-node3:image: rediscontainer_name: redis-node3command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "你的外网ip或者域名", "--cluster-announce-port", "6381", "--cluster-announce-bus-port", "16381"]ports:- "26381:6379"- "16381:16379"volumes:- ./data/redis-node3:/datanetworks:- redis-cluster-composeredis-node4:image: rediscontainer_name: redis-node4command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "你的外网ip或者域名", "--cluster-announce-port", "6382", "--cluster-announce-bus-port", "16382"]ports:- "26382:6379"- "16382:16379"volumes:- ./data/redis-node4:/datanetworks:- redis-cluster-composeredis-node5:image: rediscontainer_name: redis-node5command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "你的外网ip或者域名", "--cluster-announce-port", "6383", "--cluster-announce-bus-port", "16383"]ports:- "26383:6379"- "16383:16379"volumes:- ./data/redis-node5:/datanetworks:- redis-cluster-composeredis-node6:image: rediscontainer_name: redis-node6command: ["redis-server", "--port", "6379", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--cluster-node-timeout", "5000", "--appendonly", "yes", "--cluster-announce-ip", "你的外网ip或者域名", "--cluster-announce-port", "6384", "--cluster-announce-bus-port", "16384"]ports:- "26384:6379"- "16384:16379"volumes:- ./data/redis-node6:/datanetworks:- redis-cluster-composenetworks:redis-cluster-compose:driver: bridge

使用步骤:

  1. 创建目录:
    在你想放置 docker-compose.yml 文件的目录下创建数据目录,例如:
mkdir -p ./data/redis-node1 ./data/redis-node2 ./data/redis-node3 ./data/redis-node4 ./data/redis-node5 ./data/redis-node6
  1. 启动集群:
    docker-compose.yml 文件所在的目录中运行:
docker-compose up -d
  1. 初始化 Redis 集群: 启动所有 Redis 容器后,你需要使用 redis-cli 创建集群:
docker exec -it redis-node1 redis-cli --cluster create \redis-node1:6379 redis-node2:6379 redis-node3:6379 \redis-node4:6379 redis-node5:6379 redis-node6:6379 \--cluster-replicas 1
  1. 验证 Redis 集群:
    你可以通过以下命令来验证 Redis 集群是否成功创建:
docker exec -it redis-node1 redis-cli -c cluster nodes

这会列出集群中的所有节点及其状态。

搭建中遇到的问题

Node redis-node2:6379 replied with error:
ERR Invalid node address specified: redis-node1:6379
在这里插入图片描述
问题的原因可能是 redis-cli --cluster create 命令中的节点地址 redis-node1:6379 这样的主机名在 Redis 集群内部可能无法被解析。这种情况通常发生在 Docker 容器中,因为每个容器有自己的网络配置,而 Redis 集群要求节点间能通过 IP 地址相互通信。
要解决这个问题,可以尝试以下步骤:
**解决方法:**替换成容器的内网ip就行了
获取IP方法

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node1
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node2
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node3
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node4
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node5
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node6

重要提示:

  • Redis 集群使用多个节点,因此你需要确保每个节点的端口(如 6379, 6380, 6381 等)在宿主机上可用。
  • 如果需要持久化数据,确保在 ./data 目录下有写权限,并且这些目录可以正确映射到容器中的 /data 路径。

http://www.ppmy.cn/news/1541718.html

相关文章

了解python tutor-一个学习(教学)辅助工具

python tutor 核心功能 a) 代码可视化 内存模型展示:Python Tutor能够直观地展示代码执行过程中的内存状态,包括变量、对象和数据结构。变量状态追踪:用户可以看到每一步执行后变量值的变化。对象引用关系:清晰地展示对象之间的…

Threejs 实现3D 地图(02)创建3d 地图

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" 地图数据来源&#xff1a; DataV.GeoAtlas地理小工具系列 <script setup> import {onMounted, ref} from vue import * as THREE from three im…

el-table修改指定列字体颜色 ,覆盖划过行的高亮显示文字颜色

修改指定列字体颜色 ,覆盖划过行的高亮显示文字颜色 代码如下&#xff1a; <div class"c1"><el-table:data"tableData"striperow-class-name"custom-table-row"style"width:100%"cell-mouse-enter"lightFn"cell-…

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

github pages + hugo 搭建静态博客网站

体验地址 1. 起因&#xff0c; 目的: 其实6年前&#xff0c;我就写过这个。 项目代码 博客地址 最近想改写一下。 github 推荐的主题是 Jekyll&#xff0c; 我当时用的就是这个&#xff0c;感觉很麻烦。尤其是文章命名。 新的主题 hugo 用起来还行。 2.过程: 过程记录&am…

nerdctl 安装

nerdctl 是一个轻量级的 Docker CLI 兼容工具&#xff0c;它用于操作 containerd 容器运行时。下面是如何在 CentOS 上安装和配置 nerdctl 的详细步骤。 1. 前置条件 需要 containerd 作为容器运行时&#xff0c;如果尚未安装&#xff0c;请先安装 containerd。需要 runc 作为…

如何利用 OCR 和文档处理,快速提高供应商管理效率 ?

在当今瞬息万变的商业环境中&#xff0c;有效的供应商管理通常需要处理大量实物文档&#xff0c;这带来了巨大的挑战。手动提取供应商名称、编号和其他关键信息等关键细节非常耗时、容易出错&#xff0c;并且会降低整体效率。 为了应对这些挑战&#xff0c;组织正在逐步采用自…

【AI创新】优化ChatGPT提示词Prompt设计:释放AI的无限潜能

【AI创新】优化ChatGPT提示词Prompt设计&#xff1a;释放AI的无限潜能 文章目录 &#x1f31f; 引言&#x1f31f; 第一性原理在Prompt设计中的应用系统与用户信息的深度融合实际应用案例分析结论 &#x1f31f; 系统信息与用户信息的协同作用系统信息&#xff08;SYSTEM Infor…