使用docker搭建redis主从架构,一主2从

使用Docker搭建Redis主从架构(一主两从)

Redis主从架构是提高系统可用性和读取性能的重要方案,通过Docker可以快速搭建该架构。下面将详细介绍搭建步骤。

架构设计

我们将搭建包含以下组件的架构:

  • 1个主节点(Master):负责写入操作,端口6379
  • 2个从节点(Slave):负责读取操作,端口分别为6380和6381
  • 所有节点通过Docker Compose管理,共享一个自定义网络

搭建步骤

1. 创建项目目录

首先在主机上创建项目目录并进入:

mkdir redis-master-slave && cd redis-master-slave
2. 准备配置文件

创建Redis配置文件目录并编写基础配置:

mkdir config
主节点配置(config/master.conf)
# 绑定所有网络接口
bind 0.0.0.0
# 端口
port 6379
# 启用持久化
save 900 1
save 300 10
save 60 10000
# 关闭保护模式
protected-mode no
# 日志文件
logfile "redis-master.log"
从节点配置模板(config/slave-template.conf)
# 绑定所有网络接口
bind 0.0.0.0
# 从节点端口(将在启动时动态替换)
port {{PORT}}
# 启用持久化
save 900 1
save 300 10
save 60 10000
# 关闭保护模式
protected-mode no
# 日志文件
logfile "redis-slave{{SLAVE_ID}}.log"
# 只读模式(从节点不允许写入)
read-only yes
3. 编写Docker Compose文件

创建docker-compose.yml文件:

version: '3.8'services:# Redis主节点服务redis-master:image: redis:7.0container_name: redis-masterports:- "6379:6379"volumes:- ./config/master.conf:/usr/local/etc/redis/redis.conf- redis-data-master:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]healthcheck:test: ["CMD", "redis-cli", "ping"]interval: 5stimeout: 5sretries: 5networks:- redis-network# Redis从节点1redis-slave1:image: redis:7.0container_name: redis-slave1ports:- "6380:6380"volumes:- ./config/slave-template.conf:/usr/local/etc/redis/redis.conf.template- redis-data-slave1:/dataenvironment:- PORT=6380- SLAVE_ID=1- MASTER_HOST=redis-master- MASTER_PORT=6379command: >sh -c 'sed "s|{{PORT}}|${PORT}|g; s|{{SLAVE_ID}}|${SLAVE_ID}|g" /usr/local/etc/redis/redis.conf.template > /usr/local/etc/redis/redis.conf && redis-server /usr/local/etc/redis/redis.conf --slaveof ${MASTER_HOST} ${MASTER_PORT}'healthcheck:test: ["CMD", "redis-cli", "-p", "6380", "ping"]interval: 5stimeout: 5sretries: 5networks:- redis-network# Redis从节点2redis-slave2:image: redis:7.0container_name: redis-slave2ports:- "6381:6381"volumes:- ./config/slave-template.conf:/usr/local/etc/redis/redis.conf.template- redis-data-slave2:/dataenvironment:- PORT=6381- SLAVE_ID=2- MASTER_HOST=redis-master- MASTER_PORT=6379command: >sh -c 'sed "s|{{PORT}}|${PORT}|g; s|{{SLAVE_ID}}|${SLAVE_ID}|g" /usr/local/etc/redis/redis.conf.template > /usr/local/etc/redis/redis.conf && redis-server /usr/local/etc/redis/redis.conf --slaveof ${MASTER_HOST} ${MASTER_PORT}'healthcheck:test: ["CMD", "redis-cli", "-p", "6381", "ping"]interval: 5stimeout: 5sretries: 5networks:- redis-networkvolumes:redis-data-master:redis-data-slave1:redis-data-slave2:networks:redis-network:driver: bridge

4. 启动服务

在项目目录下执行:

docker-compose up -d

5. 验证主从架构

方法1:使用redis-cli命令检查
  1. 连接主节点:
redis-cli -p 6379
  1. 查看主节点信息:
info replication

输出中应看到:

# Replication
role:master
connected_slaves:2
slave0:ip=172.XX.XX.XX,port=6380,state=online,offset=XXX,lag=1
slave1:ip=172.XX.XX.XX,port=6381,state=online,offset=XXX,lag=1
  1. 连接从节点1:
redis-cli -p 6380
  1. 查看从节点信息:
info replication

输出中应看到:

# Replication
role:slave
master_host:redis-master
master_port:6379
master_link_status:up
方法2:测试数据同步
  1. 在主节点设置数据:
redis-cli -p 6379 set test-key "Hello Master"
  1. 在从节点读取数据:
redis-cli -p 6380 get test-key
# 应输出 "Hello Master"
redis-cli -p 6381 get test-key
# 应输出 "Hello Master"

架构说明

关键配置解析
  1. 网络配置

    • 使用自定义桥接网络redis-network,使容器间可通过服务名直接通信
    • 主节点服务名redis-master被从节点配置为复制目标
  2. 动态配置实现

    • 从节点使用模板配置文件,通过环境变量和sed命令动态生成最终配置
    • --slaveof参数在启动时指定主节点地址
  3. 数据持久化

    • 每个节点都有独立的数据卷,确保容器重启后数据不丢失
    • 配置文件挂载到容器内,便于修改和维护
扩展与优化
  1. 添加密码认证
    在主节点配置中添加requirepass your-password,从节点配置中添加masterauth your-password

  2. 哨兵模式(Sentinel)
    可进一步添加哨兵节点,实现主节点故障自动切换,提高高可用性

  3. 资源限制
    在Docker Compose中添加resources字段,限制各节点使用的CPU和内存

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

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

相关文章

机器学习3——参数估计之极大似然估计

参数估计 问题背景: P ( ω i ∣ x ) p ( x ∣ ω i ) P ( ω i ) p ( x ) p ( x ) ∑ j 1 c p ( x ∣ ω j ) P ( ω j ) \begin{aligned} & P\left(\omega_i \mid \mathbf{x}\right)\frac{p\left(\mathbf{x} \mid \omega_i\right) P\left(\omega_i\right)…

Spring AOP Pointcut 表达式的语法是怎样的?(execution(...) 是最常用的,还有哪些

Pointcut 表达式是 AOP 的核心,我将详细解析最常用的 execution 表达式,并介绍其他几种同样非常有用的表达式。 1. execution 指示符 (最常用,最强大) execution 用于匹配方法的执行(Join Point)。它的语法结构最为完…

基于 SpringBoot+Vue 的台球厅管理系统的设计与实现(毕业论文)

基于 SpringBootVue 的台球厅管理系统的设计与实现(模板)[三号宋体加粗,居中] 摘 要[首行缩进2字符,五号黑体加粗]:摘要内容[五号楷体]本文所提出的基于J2EE/EJB标准的电子化采购平台及其CRM组件综合解决方案&#xf…

运营医疗信息化建设的思路

医疗机构加强运营管理,必须依赖强有力的医院信息系统。信息化很重要,但不能为了信息化而信息化。运营信息化必须有明确的建设目标。 运营信息化建设的目标,包括几个方面: 1.实时反映业务; 2.体现内控思维&#xff1b…

6.24_JAVA_微服务day07_RabbitMQ高级

1、 RabbitListener(queuesToDeclare/*此处是固定写法,只能写这个玩意儿,因为这里是库里的方法*/ Queue(name "lazy.queue",//如果不存在就创建lazy.queue队列durable "true",//把耐用打开arguments Argument(name "x-que…

Python打卡:Day38

知识点回顾: Dataset类的__getitem__和__len__方法(本质是python的特殊方法)Dataloader类minist手写数据集的了解 浙大疏锦行

质量管理五大核心工具之SPC

SPC(Statistical Process Control,统计过程控制)是一种基于统计学的质量控制方法,旨在通过监控和分析生产过程数据,识别异常波动并消除异常因素,从而确保过程稳定受控,提升产品质量一致性145。以…

【世纪龙科技】新能源汽车VR虚拟体验展示馆-解锁认知新维度

解锁新能源汽车深度认知新维度:沉浸式 VR 虚拟体验展示馆 在科技不断突破边界的当下,人们对新能源汽车的探索渴望愈发强烈。无论是希望深入了解行业发展脉络的求知者,还是想要直观掌握汽车技术原理的学习者,传统的展示方式似乎总…

oracle基础审计管理

Oracle数据库审计功能详解(简单易懂!) 更新时间:2024年01月30日 16:21:27 作者:前程的前程也迷茫 Oracle审计查询是一项重要的任务,可以帮助DBA更好的管理Oracle数据库,下面这篇文章主要给大家介绍了关于Oracle数据库审计功能的相关资料,文中通过代码介绍…

Day44 预训练模型

目录 一、预训练的概念 二、常见的分类预训练模型 2.1 CNN架构预训练模型 2.2 Transformer类预训练模型 2.3 自监督预训练模型 三、图像预训练模型的发展史 四、预训练的策略 五、预训练代码实战:resnet18 六、尝试在cifar10对比alexnet 七、尝试通过ctrl进…

寻找两个正序数组的中位数:二分查找的终极算法

引言:中位数的「C位之争」 如果把数组比作排队买奶茶的队伍,中位数就是那个站在正中间的幸运儿——不需要知道所有人的位置,只需要找到那个「刚刚好」的中间位置。这个问题看似简单,却藏着算法世界的「效率密码」,尤其…

使用tensorflow的线性回归的例子(一)

拟合y2x1 import matplotlib.pyplot as plt import numpy as np import tensorflow as tf print(tf.__version__) %matplotlib inline #载入随机种子 np.random.seed(5) #生成100个等差序列,每个值在-1 - 1 之间 x_data np.linspace(-1,1,100) #y 2x …

OpenLayers 渲染之矢量影像图层

前言 :::block-1 对于像GeoJSON、KML等地理数据格式的文件,最常用的方法都是通过VectorLayer进行渲染。除此之外,还可以使用VectorImage(矢量影像图层)进行渲染。本文主要介绍在客户端拖动上传GeoJSON、KML等文件,并采…

Feign 实战指南:从 REST 替代到性能优化与最佳实践

Feign 实战指南:从 REST 替代到性能优化与最佳实践 一 . Feign 替代 RestTemplate1.1 RestTemplate 方式调用存在的问题1.2 Feign 的介绍1.3 定义和使用 Feign 客户端1.3.1 引入依赖1.3.2 添加注解1.3.3 编写 Feign 的客户端进行接口声明1.3.4 测试小结 1.4 通过 PO…

什么是国际期货?期货交易平台搭建

国际期货(International Futures),又称外盘期货或全球期货,是指在中国大陆以外的交易所进行标准化合约交易的金融衍生品市场。其核心特征、功能及与国内期货的区别如下: 📍 一、定义与核心特征 全球化交易…

考取华为HCIE-AI有什么用?

在人工智能技术重塑各行各业的浪潮中,掌握核心AI能力成为专业人士的制胜关键。华为推出的HCIE-AI Solution Architect(华为认证ICT专家-AI解决方案架构师),正是面向这一领域顶尖人才设立的最高级别认证。主要是为了培养和认证掌握…

Maven 使用说明和配置

作者:小凯 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言 Apache Maven (opens new window)是一个软件项目管理、构建和依赖工具。基于项目对象模型 (POM) 的概念,Maven 可以通过中央信息来管理项目的构建、…

【Docker管理工具】安装Docker容器自动更新工具Watchtower

【Docker管理工具】安装Docker容器自动更新工具Watchtower 一、Watchtower介绍1.1 Watchtower简介1.2 Watchtower使用注意1.3 Watchtower使用场景1.4 Docker容器介绍 二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版…

AI优化SEO关键词精进

内容概要 随着人工智能技术的飞速发展,其在搜索引擎优化(SEO)领域的应用正引发深刻变革。本文将系统探讨AI如何革新传统的关键词优化策略,通过更智能的分析与匹配方法,显著提升内容在搜索结果中的可见度与排名。核心议…

canvas面试题200道

下面是一份 200 条关于 HTML5 Canvas 的面试题合集,适用于前端开发岗位的中高级工程师面试准备。内容涵盖基础概念、绘图操作、性能优化、动画实现、安全机制等多个方面,并附有参考答案或解析建议。 🧠 一、Canvas 基础知识(1-40) 1. 什么是 HTML5 Canvas? <canvas&…