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

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

文章目录

  • 使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
  • Redis 主从架构简介
  • Redis Sentinel 简介
  • 配置文件
    • 1. 主节点配置 (`redis-master.conf`)
    • 2. 从节点配置 (`redis-slave1.conf` 和 `redis-slave2.conf`)
    • `redis-slave1.conf`
    • `redis-slave2.conf`
    • 3. Sentinel 配置 (`sentinel-26379.conf` 和 `sentinel-26380.conf`)
    • `sentinel-26379.conf`
    • `sentinel-26380.conf`
  • 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)

# Redis 主节点监听的端口
port 6379# 日志文件
logfile "redis-6379.log"# 开启持久化
appendonly yes# 持久化文件名
appendfilename "appendonly.aof"# 设置认证密码(可选)
# requirepass 123456

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

redis-slave1.conf

port 6380
logfile "redis-6380.log"
appendonly yes
appendfilename "appendonly.aof"# 配置主节点
slaveof 10.255.96.33 6379# 主节点认证密码(如主节点配置了密码则必须启用)
# masterauth 123456

redis-slave2.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

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

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 配置

version: "3.0"services:docker_redis_master:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_mastervolumes:- ./redis-master.conf:/app/application/redis-temp/redis-master.confcommand: redis-server /app/application/redis-temp/redis-master.confports:- 6379:6379network_mode: hostdocker_redis_slave1:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_slave1volumes:- ./redis-slave1.conf:/app/application/redis-temp/redis-slave1.confcommand: redis-server /app/application/redis-temp/redis-slave1.confports:- 6380:6380network_mode: hostdocker_redis_slave2:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_slave2volumes:- ./redis-slave2.conf:/app/application/redis-temp/redis-slave2.confcommand: redis-server /app/application/redis-temp/redis-slave2.confports:- 6381:6381network_mode: hostdocker_redis_sentinel26379:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_sentinel26379volumes:- ./sentinel-26379.conf:/app/application/redis-temp/sentinel-26379.confcommand: redis-sentinel /app/application/redis-temp/sentinel-26379.confports:- 26379:26379network_mode: hostdocker_redis_sentinel26380:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_sentinel26380volumes:- ./sentinel-26380.conf:/app/application/redis-temp/sentinel-26380.confcommand: redis-sentinel /app/application/redis-temp/sentinel-26380.confports:- 26380:26380network_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 启动使用的配置文件路径。

http://www.lryc.cn/news/504227.html

相关文章:

  • 警惕!手动调整服务器时间可能引发的系统灾难
  • MySQL追梦旅途之性能优化
  • 【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例
  • 基于深度Q网络(Deep Q-Network,DQN)的机器人路径规划,可以自定义地图,MATLAB代码
  • Python-从文件中读取数据-Sat-Sun
  • 测试工程师的职业规划
  • 使用 Puppeteer 快速上手 Node.js 爬虫
  • 浏览器的跨域问题与解决方案
  • MyBatis一二级缓存的区别?
  • [2024-12 CISCN 长城杯] Crypto
  • pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。
  • Python毕业设计选题:基于django+vue的疫情数据可视化分析系统
  • tomcat被检测到目标URL存在htp host头攻击漏洞
  • 1.初识python
  • 【密码学】ZUC祖冲之算法
  • Python面试常见问题及答案8
  • ASP.net Core EntityFramework Code EF code 汇总
  • u3d动画系统五【StateMachineBehaviour类】
  • IS-IS协议
  • 使用C++实现RSA加密解密
  • C++归并与快速
  • 金蝶云苍穹踩过的坑(慢慢更新)
  • AndroidStudio——安卓项目结构与文件介绍
  • 华为自反ACL实验
  • yml和xml分别代表什么
  • Qt多线程编程
  • springboot438校园志愿者管理系统(论文+源码)_kaic
  • PostgreSQL 常用运维SQL整理
  • Debezium Oracle CTAS 解析器实现:基于 ANTLR 的 CREATE TABLE AS SELECT 语句解析
  • 从零开始学docker(五)-可用的docker镜像