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

使用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.lqws.cn/news/536725.html

相关文章:

  • day48-硬件学习之GPT定时器、UART及I2C
  • 日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段(4):2022年12月2023年12月
  • 机器学习18-强化学习RLHF
  • python基于协同过滤的动漫推荐系统
  • 华为云Flexus+DeepSeek征文|一键部署知识库搜索增强版搭建AI Agent
  • 《仿盒马》app开发技术分享-- 逻辑优化第三弹(83)
  • 新手向:Neo4j的安装与使用
  • 供应链数据可视化大屏
  • OneCode框架 Tree 相关注解使用说明
  • 服务器的安装与安全设置 域环境的搭建和管理 Windows基本配置 网络服务常用网络命令的应用 安全管理Windows Server 2019
  • 独立开发还能做吗
  • Git-git worktree的使用
  • 测试方法的分类
  • recipes的版本比较老如何更新到新版本?
  • 板凳-------Mysql cookbook学习 (十--11)
  • AAAI 2025论文分享│面向生物医学的具有像素级洞察力的多模态大语言模型
  • day43 打卡
  • Redis主从架构哨兵模式
  • Rk3568驱动开发_Key驱动_13
  • Flink部署与应用——Flink架构概览
  • 如何在 Manjaro Linux 上启用 AUR 仓库来安装软件包
  • 关于如何在 Git 中切换到之前创建的分支的方法
  • 机器学习17-发展历史补充
  • 云财乐企新华网专访:以数字引擎驱动财税普惠化变革,赋能企业高质量发展
  • 可视化大屏展示
  • ubuntu部署woodpecker依赖gitea
  • 2-深度学习挖短线股-1-股票范围选择
  • Linux 高效网络调试命令
  • 同步互斥与通信-有缺陷的同步示例FreeRTOS笔记
  • window显示驱动开发—支持 DXGI DDI(四)