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)

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

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

相关文章

接口使用实例(2)

大家好,今天我们来解答一下昨天留下的一个问题,并且继续来看一些接口使用实例。 通过String类中重写的方法compareTo来实现我们的比较name的需求: 2,用Comparator接口来实现类的比较(比较器) 了解即可,以后会详细讲。 知识点:C…

基于Springboot的社区药房管理系统

博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…

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

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

MATLAB的数据类型和各类数据类型转化示例

一、MATLAB的数据类型 在MATLAB中 ,数据类型是非常重要的概念,因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言,这意味着变量的数…

密码强度验证代码解析:C语言实现与细节剖析

在日常的应用开发中,密码强度验证是保障用户账户安全的重要环节。今天,我们就来深入分析一段用C语言编写的密码强度验证代码,看看它是如何实现对密码强度的多维度检测的。 代码整体结构 这段C语言代码主要实现了对输入密码的一系列规则验证&a…

蓝桥杯模拟算法:多项式输出

P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题&#xff0c;我们需要分情况讨论&#xff0c;我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…

Pytorch框架从入门到精通

目录 一、Tensors 1.1 初始化一个Tensor 1&#xff09;赋值初始化 2&#xff09;从 NumPy 数组初始化 3&#xff09;从另一个张量 4&#xff09;使用随机值或常量值 1.2 Tensor 的属性 1.3 对 Tensor 的操作 1.3.1 总体介绍 1.3.2 索引和切片 1.3.3 算术运算 矩阵乘…

2024年数据记录

笔者注册时间超过98.06%的用户 CSDN 原力是衡量一个用户在 CSDN 的贡献和影响力的系统&#xff0c;笔者原力值超过99.99%的用户 其他年度数据

【已解决】黑马点评项目Redis版本替换过程的数据迁移

黑马点评项目Redis版本替换过程的数据迁移 【哭哭哭】附近商户中需要用到的GEO功能只在Redis 6.2以上版本生效 如果用的是老版本&#xff0c;美食/KTV的主页能正常返回&#xff0c;但无法显示内容 上次好不容易升到了5.0以上版本&#xff0c;现在又用不了了 Redis 6.2的windo…

Win11下帝国时代2无法启动解决方法

鼠标右键点图标&#xff0c;选择属性 点开始&#xff0c;输入启用和关闭

android主题设置为..DarkActionBar.Bridge时自定义DatePicker选中日期颜色

安卓自定义DatePicker选中日期颜色 背景&#xff1a;解决方案&#xff1a;方案一&#xff1a;方案二&#xff1a;实践效果&#xff1a; 背景&#xff1a; 最近在尝试用原生安卓实现仿element-ui表单校验功能&#xff0c;其中的的选择日期涉及到安卓DatePicker组件的使用&#…

SpringBoot 基础(Spring)

SpringBoot 基础&#xff08;Spring) Bean 注解标记和扫描 (IoC) 配置类概念 SpringBootConfiguration 或者 Configuration 注解标注的类就是配置类配置类本身也会加入 IoC 容器* Configuration public class configuration1 {}SpringBootConfiguration public class configur…

【数据结构与算法】九大排序算法实现详解

文章目录 Ⅰ. 排序的概念及其运用一、排序的概念二、常见的排序算法三、排序算法的接口四、测试算法接口附&#xff1a;Swap接口&#xff08;使用异或的方法实现&#xff09; Ⅱ. 排序算法的实现一、插入排序二、希尔排序( 缩小增量排序 )三、选择排序四、堆排序五、冒泡排序六…

Ansys Maxwell:采用对称性的双转子轴向磁通电机

轴向磁通电机因其功率密度高于相同重量的传统径向磁通电机而变得非常受欢迎&#xff0c;并且在电动汽车和航空应用中非常高效且具有成本效益。功率密度是输出功率与机器体积的比率。对于给定尺寸的机器&#xff0c;轴向磁通电机提供更大的扭矩和功率&#xff0c;或者对于给定的…

Leetcode:219

1&#xff0c;题目 2&#xff0c;思路 第一种就是简单的暴力比对当时过年没细想 第二种&#xff1a; 用Map的特性key唯一&#xff0c;把数组的值作为Map的key值我们每加载一个元素都会去判断这个元素在Map里面存在与否如果存在进行第二个判断条件abs(i-j)<k,条件 符合直接…

Hugging Face挑战DeepSeek,AI开源竞赛升级!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.27 线性代数王国:矩阵分解实战指南

1.27 线性代数王国&#xff1a;矩阵分解实战指南 #mermaid-svg-JWrp2JAP9qkdS2A7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JWrp2JAP9qkdS2A7 .error-icon{fill:#552222;}#mermaid-svg-JWrp2JAP9qkdS2A7 .erro…

巴塞尔问题详解:计算所有正整数平方的倒数之和

1 相关历史背景 巴塞尔问题&#xff08;Basel Problem&#xff09;是数学史上一个著名的问题&#xff0c;由意大利数学家皮埃特罗门戈利&#xff08;Pietro Mengoli&#xff09;在1644年首次提出。 但他未能解决&#xff0c;只能给出小数点后六位的近似解是1.644934&#xff0…

android 圆形弹窗摄像头开发踩坑——源码————未来之窗跨平台操作

一、飘窗刷脸&#xff0c;拍照采用飘窗 刷脸认证安卓接口采用飘窗具有在不干扰用户主要操作的前提下以醒目方式引导用户完成认证&#xff0c;且能灵活定制样式以提升用户体验和认证效率的优点 二、踩坑只有一个扇形 <?xml version"1.0" encoding"utf-8&quo…

电子电气架构 --- 在智能座舱基础上定义人机交互

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…