用Docker搭建分布式 Redis 的方法

使用 Docker 搭建一个分布式的 Redis 集群可以帮助你快速部署和管理多个 Redis 实例。一个典型的 Redis 集群包括多个主从节点,通过分片来实现数据的分布式存储与高可用性。

以下是使用 Docker 搭建分布式 Redis 集群的详细步骤:

前提条件

  • 安装 Docker 和 Docker Compose
  • 了解 Redis 集群的基本概念

步骤 1:创建 Redis 配置文件

首先,为每个 Redis 实例创建配置文件(redis.conf)。这里以 redis-node1.conf 为例:

port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

类似地,创建 redis-node2.conf, redis-node3.conf, redis-node4.conf, redis-node5.conf, 和 redis-node6.conf,这些文件的内容可以相同。

步骤 2:创建 Docker Compose 文件

创建一个 docker-compose.yml 文件来定义 Redis 集群的服务:

version: '3'

services:
  redis-node1:
    image: redis:6.2
    container_name: redis-node1
    ports:
      - "6379:6379"
    volumes:
      - ./redis-node1.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node2:
    image: redis:6.2
    container_name: redis-node2
    ports:
      - "6380:6379"
    volumes:
      - ./redis-node2.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node3:
    image: redis:6.2
    container_name: redis-node3
    ports:
      - "6381:6379"
    volumes:
      - ./redis-node3.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node4:
    image: redis:6.2
    container_name: redis-node4
    ports:
      - "6382:6379"
    volumes:
      - ./redis-node4.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node5:
    image: redis:6.2
    container_name: redis-node5
    ports:
      - "6383:6379"
    volumes:
      - ./redis-node5.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node6:
    image: redis:6.2
    container_name: redis-node6
    ports:
      - "6384:6379"
    volumes:
      - ./redis-node6.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

networks:
  redis-cluster:

步骤 3:启动 Redis 集群

在包含 docker-compose.yml 文件的目录中运行以下命令来启动 Redis 提供的全套服务:

docker-compose up -d

等待所有服务启动成功后,使用以下命令查看启动状态:

docker-compose ps

步骤 4:初始化 Redis 集群

连接到其中一个 Redis 容器,然后通过 Redis 命令行工具初始化集群:

docker exec -it redis-node1 redis-cli --cluster create \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node1):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node2):6379\
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node3):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node4):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node5):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node6):6379 \
  --cluster-replicas 1

该命令会启动一个 Redis 集群,设置三个主节点(redis-node1、redis-node2、redis-node3),每个主节点有一个从节点(redis-node4、redis-node5、redis-node6)。--cluster-replicas 1 表示每个主节点有一个从节点。

你会看到一段输出,要求你确认分配,输入 yes 并按回车。

步骤 5:验证集群

确认集群初始化完成后,可以通过 Redis 命令行工具验证集群状态:

docker exec -it redis-node1 redis-cli -c 

在 Redis 命令行中,运行以下命令检查集群信息:

127.0.0.1:6379> cluster nodes

此命令应返回集群中所有节点的详细信息,包括它们的角色(主节点或从节点)、状态和与其他节点的连接情况。

完成!

到此为止,你已经使用 Docker 部署了一个带有 6 个 Redis 实例的分布式 Redis 集群系统。你可以通过 redis-cli 与集群进行交互,并执行各种 Redis 命令来测试和使用你的 Redis 集群。

总结

通过上述步骤,你可以快速搭建一个分布式的 Redis 环境,适用于开发和测试场景。当然,在生产环境中可能还需要考虑更多的安全、性能及运维管理的问题。

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

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

相关文章

暗潮短视频:成都柏煜文化传媒有限公司

暗潮短视频:涌动的新媒体力量 在数字化时代的浪潮中,短视频以其独特的魅力和无限的潜力,迅速成为新媒体领域的一股强大力量。而在这片繁荣的短视频领域中,成都柏煜文化传媒有限公司“暗潮短视频”以其独特的定位和深邃的内容&…

论文浅尝 | 从最少到最多的提示可在大型语言模型中实现复杂的推理

笔记整理:王泽元,浙江大学博士 链接:https://openreview.net/forum?idWZH7099tgfM 1. 动机 尽管深度学习已经取得了巨大的成功,但它与人类智慧仍然存在一些明显差距。这些差距包括以下几个方面:1)学习新任…

损失函数篇

损失函数 1、边界框损失函数/回归损失函数bbox_loss 2、分类损失函数cls_loss 3、置信度损失函数obj_loss YOLOv8损失函数 1、概述 通过YOLOv8-训练流程-正负样本分配的介绍,我们可以知道,经过预处理与筛选的过程得到最终的训练数据: a…

11 UDP的可靠传输协议QUIC

1.如何做到可靠性传输 2.UDP与TCP,我们如何选择 3.UDP如何可靠,KCP协议在哪些方面有优势 4.KCP协议精讲(重点讲解 5.OUIC时代是否已经到来 UDP如何做到可靠传输 ACK机制重传机制 重传策略序号机制(后发的包可能先到) 3 2 1-> 2 3 1重排机制 2 3 1-> 3 2 1窗口机制 流…

谷粒商城笔记-03-分布式基础概念

文章目录 一,微服务二,集群、分布式三,远程调用四,负载均衡五,服务注册、服务发现、注册中心六,配置中心七,服务熔断、服务降级1,服务熔断2,服务降级3,区别 八…

Spring框架的学习前言

1.注意事项 1.在接下来的学习中我们会将jdk的版本升级到17。 2.引入maven仓库用来存储依赖 3.在后面的javaSpring框架中要第一个项目的创建要选javaweb和lombook这两个依赖 2.Maven的主要功能 (1)maven的主要功能是引入依赖和管理依赖,在…

基于SpringCloud的分布式架构网上商城

基于SpringCloud的分布式架构网上商城的主要使用者管理员功能:首页、个人中心、用户管理、商品信息管理、商品分类管理、系统管理、订单管理等功能。 💕💕作者:Weirdo 💕💕个人简介:擅长Java、C…

【SkiaSharp绘图15】SKPath属性详解:边界、填充、凹凸、类型判断、坐标、路径类型

文章目录 SKPath 构造函数SKPath 属性Bounds 边界(宽边界)TightBounds紧边界FillType填充方式IsConcave 是否凹/ IsConvex 是否凸IsEmpty是否为空IsLine是否为线段IsRect是否为矩形IsOval是否为椭圆或圆IsRoundRect是否为圆角矩形Item[] 获取路径的坐标LastPoint最后点的坐标Po…

基于香橙派AIpro搭建的车牌识别系统

引言 本人正有学习嵌入式的想法,正好碰到机会让我搞了块OrangePi AIpro(香橙派AIpro)开发板,正合我意,直接上手进行体验,顺便给大家分享下我的实践过程。 开发板介绍与初次启动 OrangePiAIPro开发板是香…

WPF UI InkCanvas 导师演示画板 演示 笔记 画笔 识别

<Grid><InkCanvas Name"inkCanvas"/><Button Content"识别" Click"Button_Click" VerticalAlignment"Bottom"/></Grid> 引用内库 Ink ink new Ink(); private void Button_Click(object sender, RoutedEvent…

基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用

基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用 一、功能描述: 上位机通过CAN总线实现对电机的运动控制,主要包含三种模式:位置模式、速度模式以及力矩模式。驱动器硬件核心为STM32F103C8T6,带相电压采集电路以及母线电压采集电路。其中供电电压12V。 PWM中心对…

Android-卷积神经网络(Convolutional Neural Network, CNN)

一个复杂且在Android开发中常见的算法是图像处理中的卷积神经网络(Convolutional Neural Network, CNN)。CNN被广泛用于图像识别、物体检测和图像分割等任务,其复杂性在于需要处理大量的图像数据、复杂的神经网络结构和高效的计算。 1. 卷积操作(Convolution) 数学原理:…

企业级监控系统Zabbix

文章目录 Zabbix介绍Zabbix架构Zabbix serverZabbix agentZabbix proxy Zabbix Server的安装Zabbix Agent的安装监控主机流程zabbix_get自定义模板和监控项实战用户登录数监控1.指定监控项命令2.重启Agent服务3.在Server上创建监控项4.测试监控项5.查看监控项图形 触发器定义触…

字符设备驱动程序

简单做个模板框架 字符设备开发流程 确定设备号dev_t&#xff0c;动态分配 alloc_chrdev_region() 或静态分配 register_chrdev_region()定义file_opeartion 结构体*fops *&#xff0c;在结构体成员中实现对应的 *open()、read()*等函数。cdev_init() 将 fops 与 cdev 绑定&…

STM32学习历程(day2)

GPIO解释 GPIO(General-purpose input/output) 可以配置为八种输入输出模式 引脚电平 0V-3.3V 部分引脚可容忍5v 输出模式可控制端口输出高低电平 用以驱动LED、控制蜂鸣器、模拟通信协议输出时序 输入模式可读取端口的高低电平或电压&#xff0c;用于读取按键输入、外界…

firefly rk3588 sdk安装问题记录

目录 一、python版本不对 1.1 下载python2.6 1.2 安装python2.6 1.3 安装遇到问题 二、安装hashlib 三、更新3588 SDK代码 一、python版本不对 我的环境的python版本是python3.7。初次安装的时候执行命令报错&#xff0c;说是版本不对导致 fuhdell:rk3588_sdk$ .repo/rep…

centos通过官网下载安装最新版mysql方案

官网下载步骤&#xff1a; 点击DOCUMENTATION mysql的yum仓库Using the MySQL Yum Repository 向下翻&#xff0c;查看安装命令 点击下载mysql安装包 下载对应的版本 不注册&#xff0c;直接下载社区版 下载好的安装包 安装步骤&#xff1a; 把rpm包导入到服务器…

AI 驱动的数据中心变革与前景

文章主要探讨了AI计算时代数据中心的转型&#xff0c;涉及计算技术的多样性、规格尺寸和加速器的发展、大型语言模型&#xff08;LLM&#xff09;的发展、功耗和冷却趋势、基准测试的重要性以及数据中心的发展等方面。为大家提供深入了解AI基础设施发展的视角。 计算技术的多样…

​浅谈 Linux 中的 core dump 分析方法

在 Linux 系统开发领域中&#xff0c;core dump&#xff08;核心转储&#xff09;是一个不可或缺的工具&#xff0c;它为我们提供了在程序崩溃时分析程序状态的重要线索。当程序因为某种原因&#xff08;如段错误、非法指令等&#xff09;异常终止时&#xff0c;Linux 系统会尝…

spring boot + vue3+element plus 项目搭建

一、vue 项目搭建 1、创建 vue 项目 vue create vue-element说明:创建过程中可以选择路由,也可也可以不选择,可以通过 npm install 安装 vue 项目目录结构 说明:api 为自己创建的文件夹,router 选择路由模块会自动创建 router下的index.js文件(配置路由的文件) im…