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

news2024/12/17 19:51:53

文章目录

  • 使用 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.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 启动使用的配置文件路径。

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

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

相关文章

IntelliJ IDEA(2024版) 的安装、配置与使用教程:常用配置、创建工程等操作(很详细,你想要的都在这里)

IDEA的安装、配置与使用: Ⅰ、IDEA 的安装:1、IDEA 的下载地址(官网):2、IDEA 分为两个版本:旗舰版 (Ultimate) 和 社区版 (Community)其一、两个不同版本的安装文件:其二、两个不同版本的详细对比: 3、IDE…

MybatisPlus-配置加密

配置加密 目前配置文件中的很多参数都是明文,如果开发人员发生流动,很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。 我们以数据库的用户名和密码为例。 生成秘钥 首先,我们利用AES工具生成一个随机秘钥&#…

深度学习基础--将yolov5的backbone模块用于目标识别会出现怎么效果呢??

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 yolov5网络结构比较复杂,上次我们简要介绍了yolov5网络模块,并且复现了C3模块,深度学习基础–yolov5网络结构简介&a…

数据结构---图(Graph)

图(Graph)是一种非常灵活且强大的数据结构,用于表示实体之间的复杂关系。在图结构中,数据由一组节点(或称为顶点)和连接这些节点的边组成。图可以用于表示社交网络、交通网络、网络路由等场景。 1. 基本概…

人工智能技术的深度解析与推广【人工智能的应用场景】

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…

软件开发中 Bug 为什么不能彻底消除

在软件开发中,Bug无法彻底消除的原因主要包括:软件复杂度高、人员认知与沟通受限、需求和环境不断变化、工具与测试覆盖不足、经济与时间成本制约。其中“需求和环境不断变化”尤为关键,因为在实际开发中,业务逻辑随着市场与用户反…

【嵌入式软件】跑开发板的前置服务配置

在嵌入式开发中,通常需要在 开发板和主机之间共享、传输和挂载文件。 这篇文章是关于如何在 Ubuntu 中配置 Samba、TFTP 和 NFS 协议的详细步骤。这些协议分别用于远程文件共享、文件传输和内核挂载文件系统。 如何安装协议: 参考:ubuntu18配置:详细的内容我手写了一份文档。…

CTF 攻防世界 Web: FlatScience write-up

题目名称-FlatScience 网址 index 目录中没有发现提示信息,链接会跳转到论文。 目前没有发现有用信息,尝试目录扫描。 目录扫描 注意到存在 robots.txt 和 login.php。 访问 robots.txt 这里表明还存在 admin.php admin.php 分析 在这里尝试一些 sql…

从YOLOv5到训练实战:易用性和扩展性的加强

文章目录 前言一、模型介绍二、YOLOv5网络结构1.Input(输入端):智能预处理与优化策略2.Backbone(骨干网络):高效特征提取3.NECK(颈部):特征增强与多尺度融合4.Prediction…

Ilya Sutskever发表了对AI未来发展的颠覆性看法

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Crawl4AI:一个为大型语言模型(LLM)和AI应用设计的网页爬虫和数据提取工具实战

这里写目录标题 一、crawl4AI功能及简介1、简介2、特性 二、项目地址三、环境安装四、大模型申请五、代码示例1.生成markdown2.结构化数据 一、crawl4AI功能及简介 1、简介 Crawl4AI 是一个开源的网页爬虫和数据抓取工具,一个python项目,主要为大型语言…

HuLa——一款基于 Tauri+Vue3 构建的桌面即时通讯应用

文章目录 一、HuLa简介二、技术栈介绍三、安装运行四、界面体验五、开源地址 一、HuLa简介 HuLa 是一个基于 Tauri、Vite 5、Vue 3 和 TypeScript 构建的即时通讯系统。它利用了 Tauri 的跨平台能力和 Vue 3 的响应式设计,结合了 TypeScript 的类型安全特性和 Vite…

websocket_asyncio

WebSocket 和 asyncio 指南 简介 本指南涵盖了使用 Python 中的 websockets 库进行 WebSocket 编程的基础知识,以及 asyncio 在异步非阻塞 I/O 中的作用。它提供了构建高效 WebSocket 服务端和客户端的知识,以及 asyncio 的特性和优势。 1. 什么是 WebS…

《Java核心技术I》Swing用户界面组件

Swing和模型-视图-控制器设计模式 用户界面组件各个组成部分,如按钮,复选框,文本框或复杂的树控件,每个组件都有三个特征: 内容,如按钮的状态,文本域中的文本。外观,颜色&#xff0c…

如何通过递延型指标预测项目的长期成果?

递延型指标(Deferred Metrics)是指那些并不立即反映或直接影响当前操作、决策或行为的指标,而是随着时间的推移,才逐渐显现出影响效果的指标。这类指标通常会在一段时间后反映出来,或者需要一定的周期才能展现其成果或…

uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!

**提要:**近段时间我们收到多个康复机构用户,咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来,插件是可以应用到AI康复锻炼中的,今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…

C++(十八)

前言: 本文依据上一篇,继续对C中的函数进行学习。 一,内联函数。 再执行函数代码时,比不使用函数花费了更多时间,因为总结步骤,传递参数和返回值都很花费时间。 因此,在调试小型函数时&…

如何在 Ubuntu 上安装 NodeBB 并使用 Nginx 反向代理

简介 NodeBB 是一款基于 Node.js 的开源论坛软件,为在线社区提供了现代化和响应式的解决方案。在 Ubuntu Linux 上运行的 NodeBB 利用了操作系统的强大性和灵活性,以提供高性能和可扩展性。它结合了 MongoDB 或 Redis 进行数据库管理,使其能…

【UE5 C++课程系列笔记】09——多播委托的基本使用

目录 多播委托——申明委托 一、DECLARE_MULTICAST_DELEGATE 二、DECLARE_DYNAMIC_MULTICAST_DELEGATE 多播委托——绑定委托 一、Add 二、AddStatic 三、AddRaw 四、AddSP 五、AddUObject 六、Remove 七、RemoveAll 多播委托——执行 上一篇:【UE5 C课程…

车牌识别OCR授权:助力国产化升级,全面提升道路监控效率

政策背景:国产化升级,推动道路监控产业转型 随着国家对信息安全的重视,国内各大公安、政企机构已进入全面升级国产化平台的实施阶段。根据最新的政策要求,公安和政府部门必须在未来三年内完成平台的国产化替换工作。这一举措不仅…