docker搭建redis集群(三主三从)
本篇文章不包含理论解释,直接开始集群(三主三从)搭建
环境
centos7
docker 26.1.4
redis latest (7.4.2)
服务器搭建以及环境配置
请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker
相关博客:
vagrant+virtualbox实现centos7安装
Linux安装Docker教程(详解)
一. 环境准备
docker pull redis

# 查看拉取的docker镜像
docker images

创建docker网络,保证所有redis容器可以互通
docker network create redis-cluster-network
二. redis配置文件创建
- 三台机器上都创建好文件夹 用来存放配置文件 每个文件夹里都建好data文件夹作为工作目录

- 设置六个配置文件,三主三从
- 主节点1配置文件 (redis-master-6379.conf) - 在机器101上
# 端口
port 6379
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6379.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 启用AOF作为持久化方式
appendonly yes
# redis密码 protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
- 从节点1配置文件 (redis-slave-6382.conf) - 在机器101上
# 端口
port 6382
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6382.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 启用AOF作为持久化方式
appendonly yes
# redis密码 protected-mode只会在无密码时生效,设置了密码就无需再修
改protected-mode为no
requirepass 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配>置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
- 主节点2配置文件 (redis-master-6380.conf) - 在机器102上
# 端口
port 6380
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6380.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 启用AOF作为持久化方式
appendonly yes
# redis密码 protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
- 从节点2配置文件 (redis-slave-6383.conf) - 在机器101上
# 端口
port 6383
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6383.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 启用AOF作为持久化方式
appendonly yes
# redis密码 protected-mode只会在无密码时生效,设置了密码就无需再修
改protected-mode为no
requirepass 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配>置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
- 主节点3配置文件 (redis-master-6381.conf) - 在机器101上
# 端口
port 6381
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6381.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 启用AOF作为持久化方式
appendonly yes
# redis密码 protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
- 从节点3配置文件 (redis-slave-6384.conf) - 在机器101上
# 端口
port 6384
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6384.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 启用AOF作为持久化方式
appendonly yes
# redis密码 protected-mode只会在无密码时生效,设置了密码就无需再修
改protected-mode为no
requirepass 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配>置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
三. 启动所有redis节点
- 先启动主节点
- 主节点1 (端口6379) - 在机器101上
docker run -d --name redis-master-6379 \ --network redis-cluster-network \ -p 6379:6379 \ -p 16379:16379 \ -v /usr/local/redis-docker/master-6379/redis-master-6379.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/redis-docker/master-6379/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf- 主节点2 (端口6380) - 在机器102上
docker run -d --name redis-master-6380 \ --network redis-cluster-network \ -p 6380:6380 \ -p 16380:16380 \ -v /usr/local/redis-docker/master-6380/redis-master-6380.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/redis-docker/master-6380/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf- 主节点3 (端口6381) - 在机器103上
docker run -d --name redis-master-6381 \ --network redis-cluster-network \ -p 6381:6381 \ -p 16381:16381 \ -v /usr/local/redis-docker/master-6381/redis-master-6381.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/redis-docker/master-6381/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf

- 再启动从节点
- 从节点1 (端口6382) - 在机器101上
docker run -d --name redis-slave-6382 \ --network redis-cluster-network \ -p 6382:6382 \ -p 16382:16382 \ -v /usr/local/redis-docker/slave-6382/redis-slave-6382.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/redis-docker/slave-6382/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf- 从节点2 (端口6383) - 在机器102上
docker run -d --name redis-slave-6383 \ --network redis-cluster-network \ -p 6383:6383 \ -p 16383:16383 \ -v /usr/local/redis-docker/slave-6383/redis-slave-6383.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/redis-docker/slave-6383/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf- 从节点3 (端口6384) - 在机器103上
docker run -d --name redis-slave-6384 \ --network redis-cluster-network \ -p 6384:6384 \ -p 16384:16384 \ -v /usr/local/redis-docker/slave-6384/redis-slave-6384.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/redis-docker/slave-6384/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf

四. 创建集群
- 在101服务器执行创建集群命令
docker exec -it redis-master-6379 env REDISCLI_AUTH=123456 redis-cli --cluster create \192.168.43.101:6379 192.168.43.102:6380 192.168.43.103:6381 \192.168.43.101:6382 192.168.43.102:6383 192.168.43.103:6384 \--cluster-replicas 1 \--cluster-yes

2. 验证集群状态
docker exec -it redis-master-6379 redis-cli -h 192.168.43.101 -p 6379 -a "123456" cluster nodes

五. 易错点
- 从节点中不要配置replicaof
- 在 Redis 集群模式中,主从复制是通过集群本身自动管理的,不需要显式地使用 replicaof 指令。
- 如果指定了replicaof会在启动redis从节点时报错replicaof directive not allowed in cluster mode
- 创建集群时要指定ip,而不是容器名
- 如果是在同一台设备创建了六个容器,创建集群时可以直接使用容器名
docker exec -it redis-master-6379 redis-cli --cluster create
redis-master-6379:6379 redis-master-6380:6380 redis-master-6381:6381
redis-slave-6382:6382 redis-slave-6383:6383 redis-slave-6384:6384
–cluster-replicas 1
–cluster-password “123456”- 本次教程是分为三台机器,所以要指定具体的ip
docker exec -it redis-master-6379 env REDISCLI_AUTH=123456 redis-cli --cluster create
192.168.43.101:6379 192.168.43.102:6380 192.168.43.103:6381
192.168.43.101:6382 192.168.43.102:6383 192.168.43.103:6384
–cluster-replicas 1
–cluster-yes
- 创建集群时 Waiting for the cluster to join 一直等待
- 测试一下网络连通性
- 确保每个 Redis 容器不仅暴露了客户端连接的端口(如 6379),还暴露了集群总线端口(如 16379)
相关文章:
docker搭建redis集群(三主三从)
本篇文章不包含理论解释,直接开始集群(三主三从)搭建 环境 centos7 docker 26.1.4 redis latest (7.4.2) 服务器搭建以及环境配置 请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker 相关博客…...
[Datawheel]利用Zigent框架编写智能体-1
1.背景知识 1.1 什么是zigent? Zigent 是一个多智能体框架,旨在简化和优化智能体的开发与部署。Zigent 是由 自塾(Zishu.co) 团队开发的一个开源项目。自塾在 2024 年推出了多个开源项目,其中包括 wow-agent…...
【计算机视觉】人脸识别
一、简介 人脸识别是将图像或者视频帧中的人脸与数据库中的人脸进行对比,判断输入人脸是否与数据库中的某一张人脸匹配,即判断输入人脸是谁或者判断输入人脸是否是数据库中的某个人。 人脸识别属于1:N的比对,输入人脸身份是1&…...
linux环境变量配置文件区别 /etc/profile和~/.bash_profile
在 Linux 系统中,环境变量可以定义用户会话的行为,而这些变量的加载和配置通常涉及多个文件,如 ~/.bash_profile 和 /etc/profile。这些文件的作用和加载时机各有不同。以下是对它们的详细区别和用途的说明: 文章目录 1. 环境变量…...
mac 配置 python 环境变量
最新 mac 电脑,配置原理暂未研究,欢迎答疑 方案一 获取python的安装路径 which python3 配置环境变量 open ~/.bash_profile 末尾添加: PATH"/Library/Frameworks/Python.framework/Versions/3.13/bin:${PATH}" export PATH …...
终极的复杂,是简单
软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …...
软件开发中的密码学(国密算法)
1.软件行业中的加解密 在软件行业中,加解密技术广泛应用于数据保护、通信安全、身份验证等多个领域。加密(Encryption)是将明文数据转换为密文的过程,而解密(Decryption)则是将密文恢复为明文的过程。以下…...
【豆包MarsCode 蛇年编程大作战】蛇形烟花
项目体验地址:项目体验地址 官方活动地址:活动地址 目录 【豆包MarsCode 蛇年编程大作战】蛇形烟花演示 引言 豆包 MarsCode介绍 项目准备 第一步:安装插件 第二步:点击豆包图标来进行使用豆包 使用豆包 MarsCodeAI助手实…...
Jmeter使用Request URL请求接口
简介 在Jmeter调试接口时,有时不清楚后端服务接口的具体路径,可以使用Request URL和cookie来实现接口请求。以下内容以使用cookie鉴权的接口举例。 步骤 ① 登录网站后获取具体的Request URL和cookie信息 通过浏览器获取到Request URL和cookie&#…...
使用Pytest Fixtures来提升TestCase的可读性、高效性
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 在编写单元测试时,你是否发现自己有很多重复代码? 数据库设…...
Arduino大师练成手册 -- 读取DHT11
要在 Arduino 上控制 DHT11 温湿度传感器,你可以按照以下步骤进行: 硬件连接: 将 DHT11 的 VCC 引脚连接到 Arduino 的 5V 引脚。 将 DHT11 的 GND 引脚连接到 Arduino 的 GND 引脚。 将 DHT11 的 DATA 引脚连接到 Arduino 的数字引脚&am…...
【Jave全栈】Java与JavaScript比较
文章目录 前言一、Java1、 历史与背景2、语言特点3、应用场景4、生态系统 二、JavaScript1、历史与背景2、语言特点3、应用场景4、 生态系统 三、相同点四、不同点1、语言类型2、用途3、语法和结构4、性能5、生态系统6、开发模式 前言 Java和JavaScript是两种不同的编程语言&a…...
【高项】6.2 定义活动 ITTO
定义活动是识别和记录为完成项目可交付成果而须采取的具体行动的过程。 作用:将工作包分解为进度活动,作为对项目工作进行进度估算、规划、执行、监督和控制的基础 输入 项目管理计划 ① 进度管理计划:定义进度计划方法、滚动式规划的持续…...
openlava/LSF 用户组管理脚本
背景 在openlava运维中经常需要自动化一些常规操作,比如增加用户组以及组成员、删除用户组成员、删除用户组等。而openlava的配置文件需要手动修改,然后再通过badmin reconfig激活配置。因此开发脚本将手工操作自动化就很有必要。 通过将脚本中的User…...
数据结构与算法之贪心: LeetCode 649. Dota2 参议院 (Ts版)
Dota2 参议院 https://leetcode.cn/problems/dota2-senate/ 描述 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。…...
西藏酥油茶:高原上的醇香温暖
西藏酥油茶:高原上的醇香温暖 在西藏高原,有一种饮品,它不仅滋养了一代又一代的藏民,还承载着丰富的文化与历史,它就是西藏酥油茶。酥油茶,藏语称为“恰苏玛”,意为搅动的茶,是藏族人民日常生活中不可或缺的一部分,更是待客、祭祀等活动中的重要礼仪物品。 历史与文化渊源 酥…...
【模型】RNN模型详解
1. 模型架构 RNN(Recurrent Neural Network)是一种具有循环结构的神经网络,它能够处理序列数据。与传统的前馈神经网络不同,RNN通过将当前时刻的输出与前一时刻的状态(或隐藏层)作为输入传递到下一个时刻&…...
C++----STL(list)
介绍 list的数据结果是一个带头双向链表。 使用 有了前面string、vector的基础,后续关于list使用的讲解主要提及与string和vector的不同之处。 使用文档:cplusplus.com/reference/list/list/?kwlist 迭代器问题 insert以后迭代器不失效 #include…...
数据结构——AVL树的实现
Hello,大家好,这一篇博客我们来讲解一下数据结构中的AVL树这一部分的内容,AVL树属于是数据结构的一部分,顾名思义,AVL树是一棵特殊的搜索二叉树,我们接下来要讲的这篇博客是建立在了解搜索二叉树这个知识点…...
知识图谱在个性化推荐中的应用:赋能智能化未来
目录 前言1. 知识图谱的基本概念2. 个性化推荐的挑战与知识图谱的优势2.1 个性化推荐的主要挑战2.2 知识图谱在个性化推荐中的优势 3. 知识图谱赋能推荐系统的具体实现3.1 数据增强与关系建模3.2 嵌入技术的应用3.3 图神经网络(GNN)的应用3.4 多模态数据…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
