当前位置: 首页 > news >正文

速通Docker === 快速部署Redis主从集群

目录

镜像仓库介绍

持久化你的数据库

连接到其他容器

创建自定义网络

部署主节点

部署从节点

验证部署

总结


在现代应用架构中,Redis作为一个高性能的内存数据库,被广泛应用于缓存、会话存储、实时分析等多个领域。为了提高Redis的可用性和数据的可靠性,通常会采用主从复制的方式构建Redis集群。下面将介绍如何使用Bitnami提供的Docker镜像快速部署一个Redis主从同步集群,并实现读写分离。

镜像仓库介绍

Bitnami提供的Redis Docker镜像预配置了多种环境变量,使得部署和配置变得非常简单。此外,该镜像还包含了必要的安全补丁和性能优化,适合生产环境使用。

Bitnami Redis镜像的Docker Hub地址为: https://hub.docker.com/r/bitnami/redis 你可以直接从这个地址拉取镜像,或者在Docker命令中指定该地址来部署Redis实例。

持久化你的数据库

如果删除容器,所有数据都将丢失,下次运行镜像时,数据库将重新初始化。为了避免数据丢失,您应该安装一个在删除容器后仍能保留的卷。

为了持久化,您应该在路径上挂载一个目录/bitnami。如果挂载的目录为空,它将在第一次运行时被初始化。

docker run \-e ALLOW_EMPTY_PASSWORD=yes \-v /path/to/redis-persistence:/bitnami/redis/data \bitnami/redis:latest

环境变量

ALLOW_EMPTY_PASSWORD允许无密码访问
REDIS_REPLICATION_MODERedis 复制模式(值:master、slave)nil
REDIS_PASSWORDRedis 的密码nil
REDIS_MASTER_HOSTRedis 主主机(由从属服务器使用)
REDIS_MASTER_PORT_NUMBERRedis 主服务器主机端口(由从服务器使用)6379
REDIS_MASTER_PASSWORDRedis 主节点密码nil
REDIS_DEFAULT_PORT_NUMBER(6379)Redis 端口号(构建时)6379
连接到其他容器

使用Docker 容器网络⁠,您的应用程序容器可以轻松访问在容器内运行的 Redis(R) 服务器。

连接到同一网络的容器可以使用容器名称作为主机名相互通信。

在这个例子中,我们将创建一个 Redis(R) 客户端实例,它将连接到与客户端在同一个 docker 网络上运行的服务器实例。

步骤 1:创建网络

docker network create app-tier --driver bridge

第 2 步:启动 Redis(R) 服务器实例

使用命令--network app-tier的参数docker run将 Redis(R) 容器附加到app-tier网络。 

docker run -d --name redis-server \-e ALLOW_EMPTY_PASSWORD=yes \--network app-tier \bitnami/redis:latest

步骤 3:启动您的 Redis(R) 客户端实例

最后我们创建一个新的容器实例来启动Redis(R)客户端并连接到上一步创建的服务器:

  1. 创建一个临时的 Redis 客户端容器。

  2. 将容器连接到名为 app-tier 的 Docker 网络。

  3. 在容器启动后,运行 redis-cli 并连接到网络中名为 redis-server 的 Redis 服务器。

  4. 容器运行结束后,自动清理容器实例。

docker run -it --rm \--network app-tier \bitnami/redis:latest redis-cli -h redis-server

创建自定义网络

为了模拟生产环境,我们首先创建一个自定义的Docker网络:

docker network create mynet

部署主节点

接下来,我们部署Redis的主节点。这里我们使用了Bitnami提供的Redis镜像,它预设了很多环境变量,使得配置变得相对简单。

docker run -d -p 6379:6379 \-v /opt/redis/redis01:/bitnami/redis/data \-e REDIS_REPLICATION_MODE=master \-e REDIS_PASSWORD=123456\--network mynet --name redis01 \bitnami/redis

由于映射的文件可能没有操作权限,我们需要给目录授予权限:


Can't open or create append-only dir appendonlydir: Permission denied

# 查看日志docker logs 21d23a19897c
# 进入目录
cd /opt/redis/
# 列出当前目录的文件和目录的详细信息
ll
# drwxr-xr-x 2 root root 4096 Jan 21 21:59 redis01 
  1. drwxr-xr-x

    • d:表示这是一个目录(Directory)。

    • rwx:表示所有者(Owner)的权限,可以读(r)、写(w)和执行(x)。

    • r-x:表示所属用户组(Group)的权限,可以读(r)和执行(x),但不能写(w)。

    • r-x:表示其他用户(Others)的权限,同样可以读(r)和执行(x),但不能写(w)

  2. 2 root root

    • 2 表示该目录的链接数(这里不重要)。

    • 第一个root表示目录的所有者是root用户。

    • 第二个root表示目录所属的用户组是root组。

  3. 4096  表示该目录的大小,单位是字节。

  4. Jan 21 21:59 表示目录的最后修改时间,这里是1月21日21点59分。

  5. redis01 这是目录的名字,叫redis01

总结:这是一个名为redis01的目录,属于root用户和root组,权限设置为所有者可以读写执行,其他用户只能读和执行。

 chmod -R 777  /opt/redis

修改后所有人可读可写可执行

drwxrwxrwx 2 root root 4096 Jan 21 21:59 redis01 

然后重启实例:

docker restart redis01

部署从节点

 同样,我们需要给从节点映射的目录赋予操作权限:

# 创建文件
mkdir -p /opt/redis/redis02
# 写入权限 所有人 可读 可写 可执行
chmod -R 777  /opt/redis

在主节点运行之后,我们可以部署从节点。从节点会同步主节点的数据,并提供读操作。

docker run -d -p 6380:6379 \-v /opt/redis/redis02:/bitnami/redis/data \-e REDIS_REPLICATION_MODE=slave \-e REDIS_MASTER_HOST=redis01 \-e REDIS_MASTER_PORT_NUMBER=6379 \-e REDIS_MASTER_PASSWORD=123456\-e REDIS_PASSWORD=123456\--network mynet --name redis02 \bitnami/redis

 

验证部署

连接成功后,我们可以往主节点添加一个key,然后刷新从节点,检查是否已自动同步主节点的数据。

连接两个Redis服务 

往主节点添加一个key 
SET runoobkey redis


 

刷新从节点,已自动同步主节点数据

总结

通过以上步骤,我们成功使用Docker部署了一个Redis主从同步集群,并实现了读写分离。这种部署方式不仅简化了配置过程,还提高了数据的可靠性和系统的可用性。在未来的生产环境中,我们可以根据需要添加更多的从节点,以进一步提高系统的扩展性和稳定性。

相关文章:

速通Docker === 快速部署Redis主从集群

目录 镜像仓库介绍 持久化你的数据库 连接到其他容器 创建自定义网络 部署主节点 部署从节点 验证部署 总结 在现代应用架构中,Redis作为一个高性能的内存数据库,被广泛应用于缓存、会话存储、实时分析等多个领域。为了提高Redis的可用性和数据的…...

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(一)

Understanding Diffusion Models: A Unified Perspective(一) 文章概括引言:生成模型背景:ELBO、VAE 和分层 VAE证据下界(Evidence Lower Bound)变分自编码器 (Variational Autoencoders&#x…...

stm32使用MDK5.35时遇到*** TOOLS.INI: TOOLCHAIN NOT INSTALLED

mdk5.35出现*** TOOLS.INI: TOOLCHAIN NOT INSTALLED的问题!!!! 以管理员身份重新打开MDK5.35.0.0,用keygen破解密码,但是一直提示我是没有破解成功。 解决办法: target 改成ARM...

在Ubuntu上安装RabbitMQ教程

1、安装erlang 因为rabbitmq是基于erlang开发的,所以要安装rabbitmq,首先需要安装erlang运行环境 apt-get install erlang执行命令查是否安装成功:erl,疯狂 Ctrlc 就能退出命令行 2、安装rabbitmq 1、查看erlang与rabbitmq版本…...

【算法】集合List和队列

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:集合,队列的用法 一:字母异位词分组 二:二叉树的锯…...

uniapps使用HTML5的io模块拷贝文件目录

最近在集成sqlite到uniapp的过程中,因为要将sqlite数据库预加载,所以需要使用HTML5的plus.io模块。使用过程中遇到了许多问题,比如文件路径总是解析不到等。尤其是应用私有文档目录’_doc’。 根据官方文档: 为了安全管理应用的…...

css‘s hover VS mobile

.animation {animation: 30s move infinite linear;/* &:hover {animation-play-state: paused;*/ }原本写的好好的,测试说:“移动端点击滚动条,跳转到其他页面后,返回当前页面,滚动条不滚动;可以优化位…...

工业制造离不开的BOM

在制造业的浩瀚星空中,物料清单(BOM)犹如“北极星”,牢牢指引着产品从设计蓝图迈向实物诞生的全过程。 BOM的分类 按照设计制造的不同阶段,将BOM划分为设计BOM、工艺BOM、制造BOM三种类型。 设计BOM Engineering BO…...

HTML中的`<!DOCTYPE html>`是什么意思?

诸神缄默不语-个人CSDN博文目录 在学习HTML时&#xff0c;我们经常会看到HTML文档的开头出现<!DOCTYPE html>&#xff0c;它是HTML文件的第一行。很多初学者可能会疑惑&#xff0c;为什么需要这行代码&#xff1f;它到底有什么作用呢&#xff1f;在这篇文章中&#xff0…...

C语言之斗地主游戏

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 ​ C语言之斗地主游戏 目录 程序概述程序设计 Card类CardGroup类Player类LastCards类Land…...

【玩转全栈】----Django制作部门管理页面

目录 大致效果 BootStrap BootStrap简介 BootStrap配置 BootStrap使用 基本配置 部分代码解释及注意&#xff1a; 用户编辑&#xff1a; 新添数据&#xff1a; 删除数据&#xff1a; 大致效果 我先给个大致效果&#xff0c;基本融合了Django、Bootstrap、css、html等等。 基于D…...

Unreal Engine 5 C++ Advanced Action RPG 十章笔记

第十章 Survival Game Mode 2-Game Mode Test Map 设置游戏规则进行游戏玩法 生成敌人玩家是否死亡敌人死亡是否需要刷出更多 肯定:难度增加否定:玩家胜利 流程 新的游戏模式类游戏状态新的数据表来指定总共有多少波敌人生成逻辑UI告诉当前玩家的敌人波数 3-Survival Game M…...

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证9)

测试数据库中只有之前记录温湿度及烟雾值的表中数据较多&#xff0c;在该数据库中增加AppUser表&#xff0c;用于登录用户身份查询&#xff0c;数据库表如下所示&#xff1a;   项目中安装SqlSugarCore包&#xff0c;然后修改控制器类的登录函数及分页查询数据函数&#xff…...

缓存之美:万文详解 Caffeine 实现原理(上)

由于社区最大字数限制&#xff0c;本文章将分为两篇&#xff0c;第二篇文章为缓存之美&#xff1a;万文详解 Caffeine 实现原理&#xff08;下&#xff09; 大家好&#xff0c;我是 方圆。文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍&…...

Spark/Kafka

文章目录 项目地址一、Spark1. RDD1.1 五大核心属性1.2 执行原理1.3 四种创建方式二、Kafka2.1 生产者(1)分区器(2)生产者提高吞吐量(3) 生产者数据可靠性数据传递语义幂等性和事务数据有序2.2 Broker(1)Broker工作流程(2)节点服役和退役2.3 副本(1)Follower故障细…...

深入浅出:Go语言中的Unicode与字符编码详解

深入浅出:Go语言中的Unicode与字符编码详解 引言 在当今的编程世界中,字符编码和Unicode是不可或缺的技术基础。Go语言作为一种强大的编程语言,其对Unicode的支持和字符编码的处理方式,对于开发者来说至关重要。本文将从Unicode的基础知识入手,逐步深入探讨Go语言中字符编…...

什么是SSL及SSL的工作流程

什么是 SSL SSL(Secure Sockets Layer,安全套接层)是一种保护互联网通信安全的加密协议,用于确保数据在客户端和服务器之间传输时的保密性、完整性和身份验证。它已被TLS(Transport Layer Security,传输层安全协议)取代,但很多场景仍习惯称其为SSL。 SSL/TLS 的主要目…...

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…...

AD7606, 逐次逼近型ADC以及一次被GPT坑了的过程.

首先, 我的项目中, 已有的一个ADC芯片, 8通道, 并行, Analog家的ad7606, 在采集高速的正弦信号的时候, 我发现采集到的值怎么都不太对. 但是宏观来看, 并没有太大问题, 首先我怀疑的是量程问题, 接入一个5伏直流, 得到的读数确实是接近16bit的正半量程的读数, 32xxx. 接着我用信…...

抬手、放手识别算法

在一款智能手表中&#xff0c; 平时手表处于息屏的状态&#xff0c; 用于节省功耗&#xff0c;延长使用时间。 在用户进行抬手的时候&#xff0c;其实是希望能够及时看一下时间、消息通知等信息的。这时手表应该能够检测到用户的抬手动作&#xff0c;自动进行屏幕的点亮。当用户…...

【JEECG Boot】JEECG Boot 系统性知识体系全方位结构化总结

文章目录JEECG Boot一、平台基础定位与核心理念1. 核心定义与定位2. 核心设计理念二、整体技术架构体系1. 分层架构总览2. 核心技术栈明细3. 核心架构特性三、核心能力体系1. 低代码核心能力&#xff1a;代码生成器2. 零代码核心能力&#xff1a;Online在线开发3. AI原生赋能能…...

告别90%重复操作:XHS-Downloader如何重构小红书内容采集体验

告别90%重复操作&#xff1a;XHS-Downloader如何重构小红书内容采集体验 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品、用户链…...

专业级批量二维码扫描工具V2.0|高精度图片二维码批量识别软件

温馨提示&#xff1a;文末有联系方式软件概述 一款专为高效处理多图场景设计的二维码批量识别解决方案——扩展批量二维码识别工具 V2.0 专业版。 无需逐张打开图片&#xff0c;即可全自动解析各类常见格式图像&#xff08;JPG/PNG/BMP等&#xff09;中嵌入的二维码信息&#x…...

怎样高效激活Windows和Office:KMS_VL_ALL_AIO智能激活脚本完整指南

怎样高效激活Windows和Office&#xff1a;KMS_VL_ALL_AIO智能激活脚本完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款强大的智能激活脚本&#xff0c;专门用于Win…...

nbdev终极指南:如何用Jupyter Notebook创建专业级软件项目

nbdev终极指南&#xff1a;如何用Jupyter Notebook创建专业级软件项目 【免费下载链接】nbdev Create delightful software with Jupyter Notebooks 项目地址: https://gitcode.com/gh_mirrors/nb/nbdev nbdev是一个革命性的笔记本驱动开发平台&#xff0c;让开发者能够…...

ICLR 2026 | 大模型当裁判也“翻车“?北大清华联合多校提出TrustJudge,让LLM评估更值得信赖

让 GPT-4 给两篇文章打分&#xff0c;A 拿了 4 分、B 拿了 3 分。按常理 A 应该比 B 好吧&#xff1f;但换成成对比较&#xff0c;同一个模型却说 "B 更好"。更离谱的情况也有——A > B > C > A 的"石头剪刀布"循环&#xff0c;连传递性都守不住。…...

不只是CTF:把攻防世界Reversing题当‘活教材’,提升你的Linux二进制分析实战力

从CTF到实战&#xff1a;用x64Elf-100案例解锁Linux逆向工程核心技能 逆向工程常被视为黑客的专属领域&#xff0c;但它的价值远不止于破解几个CTF题目。当一位金融科技公司的安全工程师通过逆向分析阻止了针对交易系统的0day攻击&#xff0c;或当一位恶意软件研究员仅凭二进制…...

ArcMap10.4.1中文版地图数字化技巧:如何高效捕捉和数字化等高线

ArcMap 10.4.1中文版等高线数字化实战&#xff1a;从基础操作到效率倍增技巧 在GIS数据处理中&#xff0c;等高线数字化是地形分析的基础环节&#xff0c;也是许多项目中最耗时的步骤之一。我曾参与过一个山区防洪规划项目&#xff0c;团队需要处理超过200平方公里的1:10000地形…...

实战应用:基于快马开发应对复杂依赖的openclaw深度卸载解决方案

今天在项目迁移过程中遇到了一个棘手问题&#xff1a;需要安全卸载遗留的openclaw组件。这个工具深度集成在系统里&#xff0c;直接删除会导致各种依赖问题。经过反复尝试&#xff0c;终于在InsCode(快马)平台上找到了高效的解决方案&#xff0c;记录下实战经验供参考。 依赖分…...

Minecraft源码反编译终极指南:DecompilerMC完整使用教程

Minecraft源码反编译终极指南&#xff1a;DecompilerMC完整使用教程 【免费下载链接】DecompilerMC This repository allows you to decompile any minecraft version that was published after 19w36a without any 3rd party mappings, you just need to execute the script o…...