使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群

文章目录

  • [使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群](#使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群)
  • [Redis 主从架构简介](#Redis 主从架构简介)
  • [Redis Sentinel 简介](#Redis Sentinel 简介)
  • 配置文件
    • [1. 主节点配置 (`redis-master.conf`)](#1. 主节点配置 (redis-master.conf))
    • [2. 从节点配置 (`redis-slave1.conf` 和 `redis-slave2.conf`)](#2. 从节点配置 (redis-slave1.confredis-slave2.conf))
    • `redis-slave1.conf`
    • `redis-slave2.conf`
    • [3. Sentinel 配置 (`sentinel-26379.conf` 和 `sentinel-26380.conf`)](#3. Sentinel 配置 (sentinel-26379.confsentinel-26380.conf))
    • `sentinel-26379.conf`
    • `sentinel-26380.conf`
  • [Docker Compose 配置](#Docker Compose 配置)
  • 关键知识点扩展
  • [Docker Compose 文件解析](#Docker Compose 文件解析)

使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群

Redis 主从架构简介

  • Redis 主从架构

    Redis 主从架构是一种数据复制机制,使得数据从主节点同步到多个从节点,从而提升系统的高可用性和性能。主节点接收写操作,并将这些操作同步到从节点,以实现数据的冗余和数据一致性。

  • 主从节点的配置

    • redis-slave1.conf 配置解析
      • slaveof 10.255.96.33 6379: 配置从节点 docker_redis_slave1 作为主节点 docker_redis_master 的从节点。在 Docker 环境中,可以通过主节点的容器名来进行访问,而不需要手动配置 IP 地址。
      • port 6380: 配置从节点的监听端口号。
      • logfile "redis-6380.log": 配置从节点的日志文件。
      • appendonly yes: 配置 Redis 使用 AOF 文件进行持久化。
    • redis-slave2.conf 配置解析
      • slaveof 10.255.96.33 6379: 配置从节点 docker_redis_slave2 作为主节点 docker_redis_master 的从节点。
      • port 6381: 配置从节点的监听端口号。
      • logfile "redis-6381.log": 配置从节点的日志文件。
      • appendonly yes: 配置 Redis 使用 AOF 文件进行持久化。
  • 主节点的密码认证

    为增强安全性,可以配置 masterauth 用于从节点与主节点之间的安全认证,确保只有授权的客户端可以访问主节点。此外,可以通过 requirepass 配置客户端连接 Redis 服务器的密码。

Redis Sentinel 简介

  • Redis Sentinel 作用

    Redis Sentinel 是 Redis 集群中的监控系统,可以监控 Redis 主从架构中的主节点状态。当主节点不可用时,Sentinel 可以触发故障转移,将流量切换到一个新的主节点,确保集群的高可用性。

  • Sentinel 配置文件解析

    • sentinel-26379.conf 配置解析
      • sentinel monitor mymaster 10.255.96.33 6379 2: 配置 Sentinel 监控主节点 10.255.96.33 上的端口 6379,需要至少 2 个 Sentinel 判定主节点失效后,才进行自动故障转移。
      • sentinel auth-pass mymaster 123456: 配置连接主节点的密码,以增加安全性。
      • sentinel down-after-milliseconds mymaster 10000: 主节点在连续 10 秒无法响应后判定为失效。
      • sentinel failover-timeout mymaster 60000: 故障转移的超时时间为 60 秒。
    • sentinel-26380.conf 配置解析
      • sentinel monitor mymaster 10.255.96.33 6379 2: 配置 Sentinel 监控主节点,并允许多个 Sentinel 集群之间的协调。
      • sentinel known-sentinel mymaster 10.255.96.33 26379 436c81e541838009d8a22509ef2172399da4efa6: 配置多个 Sentinel 的信息,以确保集群内各个 Sentinel 之间的通信和协调。
  • 集群中多个 Sentinel 的配置

    使用 sentinel known-sentinel 配置多个 Sentinel 以确保集群的冗余性和高可用性。Sentinel 之间通过 IP 和端口进行通信,以确保集群的协调。如果一个 Sentinel 因故障或网络问题失效,其他 Sentinel 可以接管并继续监控主节点。


配置文件

1. 主节点配置 (redis-master.conf)

conf 复制代码
# Redis 主节点监听的端口
port 6379

# 日志文件
logfile "redis-6379.log"

# 开启持久化
appendonly yes

# 持久化文件名
appendfilename "appendonly.aof"

# 设置认证密码(可选)
# requirepass 123456

2. 从节点配置 (redis-slave1.confredis-slave2.conf)

redis-slave1.conf

conf 复制代码
port 6380
logfile "redis-6380.log"
appendonly yes
appendfilename "appendonly.aof"

# 配置主节点
slaveof 10.255.96.33 6379

# 主节点认证密码(如主节点配置了密码则必须启用)
# masterauth 123456

redis-slave2.conf

conf 复制代码
port 6381
logfile "redis-6381.log"
appendonly yes
appendfilename "appendonly.aof"

# 配置主节点
slaveof 10.255.96.33 6379

# 主节点认证密码(如主节点配置了密码则必须启用)
# masterauth 123456

3. Sentinel 配置 (sentinel-26379.confsentinel-26380.conf)

sentinel-26379.conf

conf 复制代码
port 26379
dir "/app/application"

# Sentinel 的唯一标识
sentinel myid 436c81e541838009d8a22509ef2172399da4efa6

# 监控主节点
sentinel monitor mymaster 10.255.96.33 6379 2

# 判定节点失效的时间
sentinel down-after-milliseconds mymaster 10000

# 故障转移的超时时间
sentinel failover-timeout mymaster 60000

# 从节点信息
sentinel known-replica mymaster 10.255.96.33 6380
sentinel known-replica mymaster 10.255.96.33 6381

# 其他 Sentinel 信息
sentinel known-sentinel mymaster 10.255.96.33 26380 978fee4f6bdf60e79468ead69b81deceb7a7bb44
sentinel current-epoch 0

sentinel-26380.conf

conf 复制代码
port 26380
dir "/app/application"

# Sentinel 的唯一标识
sentinel myid 978fee4f6bdf60e79468ead69b81deceb7a7bb44

# 监控主节点
sentinel monitor mymaster 10.255.96.33 6379 2

# 判定节点失效的时间
sentinel down-after-milliseconds mymaster 10000

# 故障转移的超时时间
sentinel failover-timeout mymaster 60000

# 从节点信息
sentinel known-replica mymaster 10.255.96.33 6380
sentinel known-replica mymaster 10.255.96.33 6381

# 其他 Sentinel 信息
sentinel known-sentinel mymaster 10.255.96.33 26379 436c81e541838009d8a22509ef2172399da4efa6
sentinel current-epoch 0

Docker Compose 配置

yaml 复制代码
version: "3.0"

services:
  docker_redis_master:
    image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
    container_name: docker_redis_master
    volumes:
      - ./redis-master.conf:/app/application/redis-temp/redis-master.conf
    command: redis-server /app/application/redis-temp/redis-master.conf
    ports:
      - 6379:6379
    network_mode: host

  docker_redis_slave1:
    image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
    container_name: docker_redis_slave1
    volumes:
      - ./redis-slave1.conf:/app/application/redis-temp/redis-slave1.conf
    command: redis-server /app/application/redis-temp/redis-slave1.conf
    ports:
      - 6380:6380
    network_mode: host

  docker_redis_slave2:
    image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
    container_name: docker_redis_slave2
    volumes:
      - ./redis-slave2.conf:/app/application/redis-temp/redis-slave2.conf
    command: redis-server /app/application/redis-temp/redis-slave2.conf
    ports:
      - 6381:6381
    network_mode: host

  docker_redis_sentinel26379:
    image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
    container_name: docker_redis_sentinel26379
    volumes:
      - ./sentinel-26379.conf:/app/application/redis-temp/sentinel-26379.conf
    command: redis-sentinel /app/application/redis-temp/sentinel-26379.conf
    ports:
      - 26379:26379
    network_mode: host

  docker_redis_sentinel26380:
    image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
    container_name: docker_redis_sentinel26380
    volumes:
      - ./sentinel-26380.conf:/app/application/redis-temp/sentinel-26380.conf
    command: redis-sentinel /app/application/redis-temp/sentinel-26380.conf
    ports:
      - 26380:26380
    network_mode: host

关键知识点扩展

  1. 主从复制的原理

    • 主节点负责写操作,从节点通过 slaveof 指令与主节点建立连接并同步数据。
    • 数据同步分为全量同步和增量同步。
  2. Sentinel 的工作原理

    • Sentinel 通过心跳机制监控主从节点状态。
    • 当主节点失效时,Sentinel 通过选举机制选择一个从节点提升为主节点,并更新其他从节点的同步目标。
  3. Docker 持久化与数据挂载

    • 配置文件通过 volumes 映射至容器内部,方便管理与更新。
    • 数据目录需要挂载到宿主机路径,以保证数据不会因为容器重启而丢失。
  4. 高可用性

    • 使用多个 Sentinel 节点可以避免单点故障,但需要合理配置 quorum 参数,确保故障判定的准确性。
  5. 主从架构的高可用性

    主从架构通过数据复制和故障转移机制提高 Redis 的高可用性。当主节点失效时,从节点会自动接管,并将数据状态保持一致

  6. Sentinel 的故障转移机制

    • sentinel down-after-milliseconds: 设定主节点在多长时间内无法响应PING指令后判定为失效。
    • sentinel failover-timeout: 故障转移的最大等待时间,确保故障转移及时完成。
    • sentinel config-epochsentinel leader-epoch: 用于协调整个集群内的 Sentinel 状态。

Docker Compose 文件解析

  • 挂载配置文件
    在 Docker Compose 文件中,volumes 选项用于将 Redis 配置文件挂载到容器中,使得容器可以使用指定的配置启动。挂载配置文件有助于统一管理和快速配置多个 Redis 实例。
  • 网络模式
    • network_mode: host: 这种模式下,容器共享主机网络,不需要配置额外的网络路由。虽然简单易用,但可能会增加安全风险,尤其是在开放端口时。
    • external: true: 如果使用外部网络,确保容器可以访问到网络服务,避免网络隔离问题。
  • 命令配置
    • command: redis-server /app/application/redis-temp/redis-master.conf: 配置 Redis 主节点启动使用的配置文件路径。
    • command: redis-sentinel /app/application/redis-temp/sentinel-26379.conf: 配置 Redis Sentinel 启动使用的配置文件路径。

相关推荐
EterNity_TiMe_3 分钟前
一个网页管理多种远程连接:Docker 部署 Next Terminal 与资产审计
运维·人工智能·docker·ai·容器
蒲锘35 分钟前
DevOps 实验阶段四:Infra 节点 + MySQL + Spring Boot 容器化
spring boot·mysql·docker
是枚小菜鸡儿吖4 小时前
把视频教程变成可复习的笔记:Docker 部署 BiliNote,自动转写与总结
笔记·docker·容器
ICollection5 小时前
4060笔记本用Docker部署ComfyUI绘图
docker·comfyui
会编程的吕洞宾11 小时前
Redis大Key拖垮线上?排查定位与治理实战
数据库·redis·bootstrap
码农阿豪12 小时前
若依启动突然报 Redis MISCONF?一次从应用报错到磁盘爆满的完整排查记录
数据库·redis·bootstrap
淼澄研学12 小时前
Proliferate开源框架技术解析与Docker部署实操
docker·容器·开源
浪兎兎13 小时前
Docker 容器技术笔记
笔记·docker·容器
Zhu75814 小时前
在Docker环境离线部署最新版Harbor
运维·docker·容器
进击的_鹏16 小时前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存