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,一经查实,立即删除!

相关文章

MinDoc 安装与部署

下载可执行文件 mindoc mindoc_linux_amd64.zip 上传并解压压缩包 cd /opt mkdir mindoc cd mindocunzip mindoc_linux_amd64.zip 创建数据库 CREATE DATABASE mindoc_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; 配置数据库 将解压目录下 conf/app.conf.exam…

ESP32-S3模组上跑通esp32-camera(40)

接前一篇文章:ESP32-S3模组上跑通esp32-camera(39) 一、OV5640初始化 2. 相机初始化及图像传感器配置 上一回继续对reset函数的后一段代码进行解析。为了便于理解和回顾,再次贴出reset函数源码,在components\esp32-camera\sensors\ov5640.c中,如下: static int reset…

接口使用实例(2)

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

007 JSON Web Token

文章目录 https://doc.hutool.cn/pages/jwt/#jwt%E4%BB%8B%E7%BB%8D JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。这个标准由互联网工程任务组(IETF)发表,定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。…

【 AI agents】letta:2024年代理堆栈演进(中英文翻译)

The AI agents stack AI 代理堆栈 November 14, 2024 11月 14, 2024原文: The AI agents stack官方教程教程学习笔记: 【memgpt】letta 课程1/2:从头实现一个自我编辑、记忆和多步骤推理的代理Understanding the AI agents landscape 了解 AI 代理环境 Although we see a …

vim操作简要记录

操作容易忘记,记录一下基本使用的 :wq保存退出 :w :q :q! :wq! i I a A 方向键 h左 j下 k上 l右 dd删除方行(这其实是剪切行操作,不过一般用作删除,长按可删除,不过按.执行上一次操作删除更快) .执行上…

基于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的运行环…

代码随想录算法训练营第三十九天-动态规划-337. 打家劫舍 III

老师讲这是树形dp的入门题目解题思路是以二叉树的遍历(递归三部曲)再结合动规五部曲dp数组如何定义:只需要定义一个二个元素的数组,dp[0]与dp[1] dp[0]表示不偷当前节点的最大价值dp[1]表示偷当前节点后的最大价值这样可以把每个节…

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;输入启用和关闭

C++ 3

delete 和 free 有什么区别&#xff1f; delete和free都是用来释放动态分配的内存&#xff0c;但它们有不同的使用方式&#xff1a; 语法&#xff1a; ○ delete是C中的关键字&#xff0c;用于释放由new分配的对象。 ○ free是C语言中的函数&#xff0c;通常包含在<stdlib…

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…

启元世界(Inspir.ai)技术浅析(二):深度强化学习

深度强化学习(Deep Reinforcement Learning, DRL)是启元世界在人工智能领域的一项核心技术,广泛应用于游戏AI、智能决策等领域。 一、状态(State) 1.1 概念与作用 **状态(State)**是指智能体对环境的感知,是智能体进行决策的基础。在深度强化学习中,状态通常是一个高…