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配置文件创建

  1. 三台机器上都创建好文件夹 用来存放配置文件 每个文件夹里都建好data文件夹作为工作目录
    在这里插入图片描述
  2. 设置六个配置文件,三主三从
  • 主节点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. 先启动主节点
    • 主节点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. 再启动从节点
    • 从节点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
    

在这里插入图片描述

四. 创建集群

  1. 在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

在这里插入图片描述

五. 易错点

  1. 从节点中不要配置replicaof
    • 在 Redis 集群模式中,主从复制是通过集群本身自动管理的,不需要显式地使用 replicaof 指令。
    • 如果指定了replicaof会在启动redis从节点时报错replicaof directive not allowed in cluster mode
  1. 创建集群时要指定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
  1. 创建集群时 Waiting for the cluster to join 一直等待
    • 测试一下网络连通性
    • 确保每个 Redis 容器不仅暴露了客户端连接的端口(如 6379),还暴露了集群总线端口(如 16379)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/962055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物联网智能项目之——智能家居项目的实现!

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于物联网智能项目之——智能家居项目…

Deep Seek R1本地化部署

目录 说明 一、下载ollama 二、在ollama官网下载模型 三、使用 后记 说明 操作系统:win10 使用工具:ollama 一、下载ollama 从官网下载ollama: ollama默认安装在C盘,具体位置为C:\Users\用户名\AppData\Local\Programs\O…

跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

Movie Gen:A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型,包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…

Java---入门基础篇(上)

前言 本片文章主要讲了刚学Java的一些基础内容,例如注释,标识符,数据类型和变量,运算符,还有逻辑控制等,记录的很详细,带你从简单的知识点再到练习题.如果学习了c语言的小伙伴会发现,这篇文章的内容和c语言大致相同. 而在下一篇文章里,我会讲解方法和数组的使用,也是Java中基础…

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...

三、 实现; 三.三、编写应用程序; 此文主要是实现应用的主要编码工作。 1、 分层; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示;Helper主要是链接UI和数据库操作的中间层;DAL为对数据库的操…

Go学习:类型转换需注意的点 以及 类型别名

目录 1. 类型转换 2. 类型别名 1. 类型转换 在从前的学习中,知道布尔bool类型变量只有两种值true或false,C/C、Python、JAVA等编程语言中,如果将布尔类型bool变量转换为整型int变量,通常采用 “0为假,非0为真”的方…

爬虫基础(四)线程 和 进程 及相关知识点

目录 一、线程和进程 (1)进程 (2)线程 (3)区别 二、串行、并发、并行 (1)串行 (2)并行 (3)并发 三、爬虫中的线程和进程 &am…

V103开发笔记1-20250113

2025-01-13 一、应用方向分析 应用项目: PCBFLY无人机项目(包括飞控和手持遥控器); 分析移植项目,应用外设资源包括: GPIO, PWM,USART,GPIO模拟I2C/SPI, ADC,DMA,USB等; 二、移植项目的基本…

AAPM:基于大型语言模型代理的资产定价模型,夏普比率提高9.6%

“AAPM: Large Language Model Agent-based Asset Pricing Models” 论文地址:https://arxiv.org/pdf/2409.17266v1 Github地址:https://github.com/chengjunyan1/AAPM 摘要 这篇文章介绍了一种利用LLM代理的资产定价模型(AAPM)…

新版231普通阿里滑块 自动化和逆向实现 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 补环境逆向 部分补环境 …

Autosar-Os是怎么运行的?(时间保护)

写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 1.功能概述 AUTOSAR OS 的四大可定制类型凸显了时间保护(Timing Protection)…

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍:什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎。 作用 1 运行java需要安装JDK,而Node.js是JavaScript的运行环…

玩转大语言模型——使用langchain和Ollama本地部署大语言模型

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

亚博microros小车-原生ubuntu支持系列:15 激光雷达巡逻

一 TF坐标转换 ros2 -5.1 坐标变化工具介绍_ros怎么发布坐标变化-CSDN博客 ros2笔记-5.3 C中地图坐标系变换_c变换坐标系-CSDN博客 header:stamp:sec: 1737893911nanosec: 912000000frame_id: odom_frame child_frame_id: base_footprint pose:pose:position:x: 0.053831271…

C++并发编程指南06

文章目录 4.4 简化代码与同步工具同步工具作为构建块 4.4.1 使用Future的函数化编程函数化编程简介C支持函数化编程 快速排序 - FP模式快速排序串行版快速排序并行版 spawn_task函数结论快速排序 - 串行版快速排序 - 并行版spawn_task函数使用 spawn_task 实现并行快速排序详细…

ios swift画中画技术尝试

继上篇:iOS swift 后台运行应用尝试失败-CSDN博客 为什么想到画中画,起初是看到后台模式里有一个picture in picture,去了解了后发现这个就是小窗口视频播放,方便用户执行多任务。看小窗口视频的同时,可以作其他的事情…

C++,STL 六大组件:容器、迭代器、算法、函数对象、适配器、分配器

文章目录 引言一、容器(Containers)主要分类 二、迭代器(Iterators)三、算法(Algorithms)四、函数对象(Functors)五、适配器(Adapters)六、分配器&#xff08…

STM32项目分享:智能鱼缸

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、包含内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能鱼缸/水族箱 (资料分享见文末…

基于MinIO的对象存储增删改查

MinIO是一个高性能的分布式对象存储服务。Python的minio库可操作MinIO,包括创建/列出存储桶、上传/下载/删除文件及列出文件。 查看帮助信息 minio.exe --help minio.exe server --help …

14-6-1C++STL的list

(一)list容器的基本概念 list容器简介: 1.list是一个双向链表容器,可高效地进行插入删除元素 2.list不可以随机存取元素,所以不支持at.(pos)函数与[ ]操作符 (二)list容器头部和尾部的操作 list对象的默…