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

在这里插入图片描述

下面是一个用于搭建 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.mzph.cn/bicheng/57723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信雅纳Chimera 100G网络损伤仪助力Parallel Wireless开展5G RAN无线前传网络的损伤模拟

背景介绍 Parallel Wireless 为移动运营商提供唯一全覆盖的(5G/4G/3G/2G)软件支持的本地 OpenRAN (ORAN) 解决方案。该公司与全球 50 多家领先运营商合作,并被 Telefonica 和 Vodafone 评为表现最佳的供应商。Parallel Wireless 在多技术、开放式虚拟化…

从头学PHP之运算符

关于运算符的图片均来自网络,主要是自己写太麻烦了,程序是个简化自己工作量的方式,能复制粘贴就不要手写了(建议初期还是多写写,加深下记忆)在这里我就偷个懒,图片涉及到侵权及时,请…

安全见闻(3)——开阔眼界,不做井底之蛙

内容预览 ≧∀≦ゞ 安全见闻三:脚本程序与病毒声明导语脚本语言BAT/PowerShell脚本木马与宏病毒脚本病毒BIOS病毒 结语 安全见闻三:脚本程序与病毒 声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只…

死循环等待 vs 同步锁

在Java并发编程中,破坏占用且等待条件是一种避免死锁的策略。关于你提到的方法和synchronized(Account.class)的比较,这里有一些点需要考虑: 死循环等待 vs 同步锁: 使用死循环等待(while(!actr.apply(this, target))&#xff09…

实现酒店搜索框自动补全

前言 现在,hotel索引库还没有设置拼音分词器,需要修改索引库中的配置。但是知道索引库是无法修改的,只能删除然后重新创建。 另外,需要添加一个字段,用来做自动补全,将brand、suggestion、city等都放进去…

小程序无法获取头像昵称以及手机号码

用户在使用小程序的时候,登录弹出获取昵称头像或者个人中心点击默认头像弹窗获取头像昵称的时候,点击弹窗中的头像昵称均无反应, 这个是因为你的小程序隐私政策没有更新,或者老版本没有弹窗让用户同意导致的 解决办法&#xff1…

SpringBoot:举例说明如何使用@ControllerAdvice处理全局异常

使用RestController开发web接口时,需要处理Controller层未捕获的异常,提高系统的健壮性。 一般常用的方式是采用ControllerAdvice和ExceptionHandler,举例如下: ControllerAdvice public class ControllerAdvice {ExceptionHand…

UML外卖系统报告(包含具体需求分析)

1、系统背景 随着互联网技术的快速发展,外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制,而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来&#xff0c…

面试经典算法题62-位1的个数

面试经典算法题62-位1的个数 公众号:阿Q技术站 LeetCode.191 问题描述 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。 示…

截屏工具,

1,pc端的shiftwins,或者是prtsc按钮,但是有时候容易失效 2,第三方工具:Snipaste Snipaste - 截图 贴图 用户手册见Snipaste **常用F2或者是F3快捷键,切换桌面,而不是下端一个一个点击窗口页面…

论文阅读与写作入门

文章目录 1.阅读第一篇论文(1)论文结构(2)目标 2.使用GPT辅助论文的阅读与写作3.专有名词(1)架构(2)网络(3)机器学习 4.文献翻译软件5.从哪里下载文献?6.如何判断(你自己的)研究工作的价值or贡献【论文精读李沐】7.经典论文(1)AlexNet 2012(2)FCN 全卷积 2014(3)Res…

perl批量改文件后缀

perl批量改文件后缀 如题&#xff0c;perl批量改文件后缀&#xff0c;将已有的统一格式的文件后缀&#xff0c;修改为新的统一的文件后缀。 #!/bin/perl use 5.010;print "Please input file suffix which U want to rename!\n"; chomp (my $suffix_old <>)…

【Go语言】语法基础之变量、数据类型详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Go语言探索之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Go语言简介 2、Go语言特点 二、变量 1、变量的声明与初始化 2、变量…

【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的讲解

文章目录 前言 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助&#xff01…

时序数据库 TDengine 支持集成开源的物联网平台 ThingsBoard

Thingsboard 中“设备配置”和“设备”的关系是一对多的关系&#xff0c;通过设备配置为每个设备设置不同的配置&#xff0c;每个设备都会有一个与其关联的设备配置文件。等等&#xff0c;这不就是TDengine 中超级表的概念&#xff1a; 超级表是一种特殊的表结构&#xff0c;用…

AI正在取代程序猿?

AI现状、影响、未来&#xff1f; 方向一&#xff1a;AI工具现状 当前市场上&#xff0c;AI开发工具正在迅速发展&#xff0c;旨在提高开发者的生产力和效率。以下是几个主流的AI辅助开发工具及其特点&#xff1a; GitHub Copilot&#xff1a; 功能&#xff1a;GitHub Copilot是…

【功能安全】汽车功能安全个人认证证书

目录 1、证书 2、课程信息 &#x1f4d6; 推荐阅读 1、证书 汽车功能安全工程师去拿类似莱茵、SGS、南德颁发的证书&#xff0c;如下&#xff1a; 2、课程信息 一般上什么课程了&#xff0c;课程信息大概如下&#xff1a; 汽车功能安全工程师认证课 &#xff08;3天&#…

数据库作业2

建立并使用mydb8_worker&#xff0c;并在其中建表&#xff1a; &#xff08;1&#xff09;显示所有职工的基本信息 &#xff08;2&#xff09;去重查询 &#xff08;3&#xff09;所有职工人数 &#xff08;4&#xff09;最高最低工资 &#xff08;5&#xff09;平均工资和总工…

对Android的Binder机制的了解

Android的Binder机制详解 Android的Binder机制是Android系统中用于进程间通信&#xff08;IPC&#xff09;的核心机制&#xff0c;它提供了一种高效、安全、稳定的进程间通信方式。以下将对Binder机制的基本概念、工作原理、应用场景、优势以及实现细节进行详细的阐述。 一、…

2024“龙信杯“电子数据取证竞赛-手机取证题目Writeup

文章关键词&#xff1a;电子数据取证、电子物证、手机取证、服务器取证、介质取证 案情介绍 近期&#xff0c;某公安机关正式受理了一起受害者报案案件。受害者陈述称&#xff0c;其通过微信平台结识了一名自称为相亲中介服务的客服人员。该客服人员诱骗受害者参与所谓的“相亲…