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

发布于:2025-07-02 ⋅ 阅读:(21) ⋅ 点赞:(0)

使用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.0
    container_name: redis-master
    ports:
      - "6379:6379"
    volumes:
      - ./config/master.conf:/usr/local/etc/redis/redis.conf
      - redis-data-master:/data
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - redis-network

  # Redis从节点1
  redis-slave1:
    image: redis:7.0
    container_name: redis-slave1
    ports:
      - "6380:6380"
    volumes:
      - ./config/slave-template.conf:/usr/local/etc/redis/redis.conf.template
      - redis-data-slave1:/data
    environment:
      - PORT=6380
      - SLAVE_ID=1
      - MASTER_HOST=redis-master
      - MASTER_PORT=6379
    command: >
      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: 5s
      timeout: 5s
      retries: 5
    networks:
      - redis-network

  # Redis从节点2
  redis-slave2:
    image: redis:7.0
    container_name: redis-slave2
    ports:
      - "6381:6381"
    volumes:
      - ./config/slave-template.conf:/usr/local/etc/redis/redis.conf.template
      - redis-data-slave2:/data
    environment:
      - PORT=6381
      - SLAVE_ID=2
      - MASTER_HOST=redis-master
      - MASTER_PORT=6379
    command: >
      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: 5s
      timeout: 5s
      retries: 5
    networks:
      - redis-network

volumes:
  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和内存


网站公告

今日签到

点亮在社区的每一天
去签到