docker搭建redis集群(三主三从)

news/2025/1/31 6:32:55/

本篇文章不包含理论解释,直接开始集群(三主三从)搭建

环境

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_33">二. 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_150">三. 启动所有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.ppmy.cn/news/1567818.html

相关文章

关于QLineEdit 添加的QAction图标的交互问题

如上图,我们创建了一个搜索栏,添加了一个带有图标的动作,然后你可能会想将鼠标移动到这个图标上面时让这个图标变色,首先,我需要回忆一下Qt的信号和槽机制。QAction有hovered信号,但可能没有直接的“离开”…

k均值聚类将数据分成多个簇

K-Means 聚类并将数据分成多个簇,可以使用以下方法: 实现思路 随机初始化 K 个聚类中心计算每个点到聚类中心的距离将点分配到最近的簇更新聚类中心重复上述过程直到收敛 完整代码: import torch import matplotlib.pyplot as pltdef kme…

获取snmp oid的小方法1(随手记)

snmpwalk遍历设备的mib # snmpwalk -v <SNMP version> -c <community-id> <IP> . snmpwalk -v 2c -c test 192.168.100.201 .根据获取的值&#xff0c;找到某一个想要的值的oid # SNMPv2-MIB::sysName.0 STRING: test1 [rootzabbix01 fonts]# snmpwalk -v…

chrome源码剖析—进程通信

Chrome 浏览器采用多进程架构&#xff08;multi-process architecture&#xff09;&#xff0c;这种架构使得每个浏览器标签、扩展、插件、GPU 渲染等都在独立的进程中运行。为了确保不同进程之间的高效通信&#xff0c;Chrome 使用 进程间通信&#xff08;IPC, Inter-Process …

python轻量级框架-flask

简述 Flask 是 Python 生态圈中一个基于 Python 的Web 框架。其轻量、模块化和易于扩展的特点导致其被广泛使用&#xff0c;适合快速开发 Web 应用以及构建小型到中型项目。它提供了开发 Web 应用最基础的工具和组件。之所以称为微框架&#xff0c;是因为它与一些大型 Web 框架…

mysql学习笔记-数据库的设计规范

1、范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。 1.1键和相关属性的概念 超键:能唯一标识元组的属性集叫做超键。 候选键:如果超键不包括多余的属性&#xff0c;那么这个超键就是候选键 主键:用户可以从候选键中选择一个作为主键。 外…

【计算机视觉】目标跟踪应用

一、简介 目标跟踪是指根据目标物体在视频当前帧图像中的位置&#xff0c;估计其在下一帧图像中的位置。视频帧由t到t1的检测&#xff0c;虽然也可以使用目标检测获取&#xff0c;但实际应用中往往是不可行的&#xff0c;原因如下&#xff1a; 目标跟踪的目的是根据目标在当前…

上位机知识篇---Linux的shell脚本搜索、查找、管道

文章目录 前言第一部分&#xff1a;什么是shell&#xff1f;1. 基本结构脚本声明注释命令和表达式例子 2.变量控制结构条件判断 3.函数输入输出重定向 4.执行命令5.实际应用 第二部分&#xff1a;Linux的搜索、查找、管道命令1.搜索命令2.查找命令3.管道操作 总结 前言 以上就…