docker-compose配置redis哨兵详细步骤和配置文件

docker-compose配置redis哨兵详细步骤和配置文件

目录结构调整

redis-cluster/
├── config/
│   ├── master.conf           # 主节点配置
│   ├── slave1.conf           # 从节点1配置
│   ├── slave2.conf           # 从节点2配置
│   ├── sentinel1.conf        # 哨兵1配置
│   ├── sentinel2.conf        # 哨兵2配置
│   └── sentinel3.conf        # 哨兵3配置
└── docker-compose.yml        # 包含哨兵的docker-compose配置

Redis配置文件更新

1. config/master.conf(主节点)
port 6379
bind 0.0.0.0
protected-mode no
logfile "redis-master.log"
dir /data
save 900 1
save 300 10
save 60 10000
requirepass yourpassword
masterauth yourpassword
2. config/slave1.conf(从节点1)
port 6380
bind 0.0.0.0
protected-mode no
logfile "redis-slave1.log"
dir /data
slaveof redis-master 6379
requirepass yourpassword
masterauth yourpassword
3. config/slave2.conf(从节点2)
port 6381
bind 0.0.0.0
protected-mode no
logfile "redis-slave2.log"
dir /data
slaveof redis-master 6379
requirepass yourpassword
masterauth yourpassword

哨兵配置文件

4. config/sentinel1.conf(哨兵1)
port 26379
bind 0.0.0.0
protected-mode no
logfile "sentinel1.log"
dir /data# 监控主节点,mymaster是集群名称,2是触发故障转移所需的最小同意票数
sentinel monitor mymaster redis-master 6379 2# 主节点不可用的判定时间(毫秒)
sentinel down-after-milliseconds mymaster 5000# 故障转移超时时间(毫秒)
sentinel failover-timeout mymaster 10000# 认证密码
sentinel auth-pass mymaster yourpassword
5. config/sentinel2.conf(哨兵2)
port 26379
bind 0.0.0.0
protected-mode no
logfile "sentinel2.log"
dir /data
sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel auth-pass mymaster yourpassword
6. config/sentinel3.conf(哨兵3)
port 26379
bind 0.0.0.0
protected-mode no
logfile "sentinel3.log"
dir /data
sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel auth-pass mymaster yourpassword

更新后的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", "-a", "yourpassword", "ping"]interval: 5stimeout: 5sretries: 5networks:- redis-network# Redis从节点1redis-slave1:image: redis:7.0container_name: redis-slave1ports:- "6380:6380"volumes:- ./config/slave1.conf:/usr/local/etc/redis/redis.conf- redis-data-slave1:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]healthcheck:test: ["CMD", "redis-cli", "-a", "yourpassword", "-p", "6380", "ping"]interval: 5stimeout: 5sretries: 5depends_on:- redis-masternetworks:- redis-network# Redis从节点2redis-slave2:image: redis:7.0container_name: redis-slave2ports:- "6381:6381"volumes:- ./config/slave2.conf:/usr/local/etc/redis/redis.conf- redis-data-slave2:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]healthcheck:test: ["CMD", "redis-cli", "-a", "yourpassword", "-p", "6381", "ping"]interval: 5stimeout: 5sretries: 5depends_on:- redis-masternetworks:- redis-network# 哨兵节点1redis-sentinel1:image: redis:7.0container_name: redis-sentinel1ports:- "26379:26379"volumes:- ./config/sentinel1.conf:/usr/local/etc/redis/sentinel.conf- sentinel-data1:/datacommand: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]healthcheck:test: ["CMD", "redis-cli", "-p", "26379", "ping"]interval: 5stimeout: 5sretries: 5depends_on:- redis-master- redis-slave1- redis-slave2networks:- redis-network# 哨兵节点2redis-sentinel2:image: redis:7.0container_name: redis-sentinel2ports:- "26380:26379"volumes:- ./config/sentinel2.conf:/usr/local/etc/redis/sentinel.conf- sentinel-data2:/datacommand: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]healthcheck:test: ["CMD", "redis-cli", "-p", "26380", "ping"]interval: 5stimeout: 5sretries: 5depends_on:- redis-master- redis-slave1- redis-slave2networks:- redis-network# 哨兵节点3redis-sentinel3:image: redis:7.0container_name: redis-sentinel3ports:- "26381:26379"volumes:- ./config/sentinel3.conf:/usr/local/etc/redis/sentinel.conf- sentinel-data3:/datacommand: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]healthcheck:test: ["CMD", "redis-cli", "-p", "26381", "ping"]interval: 5stimeout: 5sretries: 5depends_on:- redis-master- redis-slave1- redis-slave2networks:- redis-networkvolumes:redis-data-master:redis-data-slave1:redis-data-slave2:sentinel-data1:sentinel-data2:sentinel-data3:networks:redis-network:driver: bridge

部署和验证步骤

  1. 创建目录和配置文件,确保权限正确:
mkdir -p config
chmod -R 644 config/
  1. 启动集群:
docker-compose up -d
  1. 验证Redis主从状态:
# 查看主节点信息
docker exec -it redis-master redis-cli -a yourpassword info replication# 查看从节点信息
docker exec -it redis-slave1 redis-cli -a yourpassword -p 6380 info replication
docker exec -it redis-slave2 redis-cli -a yourpassword -p 6381 info replication
  1. 验证哨兵状态:
# 从任一哨兵获取集群信息
docker exec -it redis-sentinel1 redis-cli -p 26379
127.0.0.1:26379> SENTINEL masters
127.0.0.1:26379> SENTINEL slaves mymaster

测试故障转移

  1. 模拟主节点故障:
docker stop redis-master
  1. 等待约10秒(根据sentinel配置的超时时间),哨兵会自动将一个从节点提升为主节点

  2. 验证新的主节点:

# 查看哨兵状态
docker exec -it redis-sentinel1 redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster# 确认客户端可以连接到新主节点
redis-cli -h <new-master-ip> -p 6379 -a yourpassword ping
  1. 恢复原主节点:
docker start redis-master

原主节点将作为从节点重新加入集群

客户端连接配置

应用程序应通过哨兵获取当前主节点地址,而不是直接连接固定节点。例如,使用Redis客户端连接时:

# Python示例
from redis.sentinel import Sentinelsentinel = Sentinel([('localhost', 26379),('localhost', 26380),('localhost', 26381)
], socket_timeout=0.5)# 获取主节点连接
master = sentinel.master_for('mymaster', socket_timeout=0.5, password='yourpassword')# 获取从节点连接(用于读操作)
slave = sentinel.slave_for('mymaster', socket_timeout=0.5, password='yourpassword')# 执行命令
master.set('foo', 'bar')
value = slave.get('foo')
print(value)  # 输出: b'bar'

这个配置方案实现了一个完整的Redis高可用集群,包含一主二从和三个哨兵节点,可以自动进行故障转移和恢复。

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

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

相关文章

多模态大语言模型arxiv论文略读(146)

Exploring Response Uncertainty in MLLMs: An Empirical Evaluation under Misleading Scenarios ➡️ 论文标题&#xff1a;Exploring Response Uncertainty in MLLMs: An Empirical Evaluation under Misleading Scenarios ➡️ 论文作者&#xff1a;Yunkai Dang, Mengxi G…

【教程】Linux中限制用户可以使用的GPU数量 | 附脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景说明 设置方法 管理脚本 进阶限制 恢复默认组 注意事项 背景说明 比较简单的方式是使用group来管理权限&#xff0c;这种方式能限制哪些…

90.xilinx复位低电平(一般使用低电平复位)

Xilinx FPGA 中的寄存器&#xff08;Flip-Flop&#xff09;**确实支持异步复位**&#xff0c;但具体实现方式取决于你使用的设计方法&#xff08;HDL 代码风格或原语实例化&#xff09;。以下是详细说明&#xff1a; --- ### 1. **Xilinx 寄存器的复位特性** - **同步复位…

NVMe高速传输之摆脱XDMA设计10: DMA 控制单元设计

DMA 控制单元负责控制 DMA 传输事务&#xff0c; 该单元承担了 DMA 事务到 NVMe 事务的转换任务&#xff0c; 使用户对数据传输事务的控制更加简单快捷。 DMA 控制功能由 DMA寄存器组实现。 DMA 寄存器组包含 DMA 操作寄存器、 DMA 长度寄存器、 DMA 源目的地址寄存器和 DMA 状…

如何设置电脑定时休眠?操作指南详解

长时间运行电脑会导致硬件过热&#xff0c;缩短其使用寿命。定时关机有助于让硬件得到休息&#xff0c;降低因长时间高负荷工作导致损坏的风险。 它的界面简洁直观&#xff0c;功能却十分实用&#xff0c;涵盖了定时关机、重启、注销、休眠、待机以及锁定等多种操作。 以设置“…

LeetCode[617]合并二叉树

思路&#xff1a; 我们合并左右子树&#xff0c;在递归左右子树的时候&#xff0c;一定要保证左右子树不为空&#xff0c;如果左子树为空&#xff0c;那么直接返回右子树就行了&#xff0c;即使右子树为空。如果右子树为空那么直接返回左子树就行了&#xff0c;这样判断完就正常…

Redis 常用五大数据类型

1、Redis 关键字&#xff08;Key&#xff09; keys * 查看当前库所有keyexists [key] 判断某个key是否存在type [key] 查看当前key的数据类型del [key] 删除指定的key数据unlink [key] 根据value选择非阻塞删除&#xff0c;仅将keys从keyspace元数据中删除&#xff0c;真正的删…

大语言模型(LLM)专业术语汇总

1. 训练与部署 1.1 预训练 专业&#xff1a;在海量无标注文本&#xff08;如Common Crawl、Wikipedia&#xff09;上通过自监督学习训练基础语言模型&#xff0c;学习通用语言表征&#xff08;如GPT-3训练数据达45TB&#xff09;。通俗&#xff1a;AI的“通识教育阶段”&…

【Java Swing 图形界面编程】JList 列表组件 ① ( JList 组件简介 | 核心作用 | 关键特性 | 基础用法示例 )

文章目录 一、JList 组件简介1、JList 概念简介2、JList 核心作用3、JList 关键特性 二、JList 组件基础用法示例1、使用 String 数组构建列表项2、使用 Vector 集合构建列表项3、使用 DefaultListModel 构建列表项 一、JList 组件简介 1、JList 概念简介 基本概念 : JList 组件…

【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)

报错信息如下&#xff1a; [unsupported] Python 3.1 (mcp-calculator-main) (3) C:\Users(xsshu\AppData\Local\Programs\Python\Python313\python.exe [unsupported] Python 3.1 C:\Users\xsshu\AppData\Local\Programs\Python\Python311\python.exe 这条输出显示了两个 Pyth…

Ragflow 前后端登录逻辑

前端登录逻辑 路由配置&#xff1a; /login 路由指向 /pages/login 组件。登录表单使用 Ant Design 的 Form, Input, 和 Button 组件。 登录表单处理&#xff1a; 使用 useLogin钩子来处理登录请求。密码通过 RSA 加密后再发送到服务器。成功登录后导航至 /knowledge 页面。 …

基于图神经网络的ALS候选药物预测模型设计与实现

基于图神经网络的ALS候选药物预测模型设计与实现 一、任务背景与意义 肌萎缩侧索硬化症(ALS)是一种致命的神经退行性疾病,目前尚无有效治愈方法。传统药物发现流程耗时长、成本高,而人工智能技术为加速药物发现提供了新途径。本文设计并实现了一个基于图神经网络(GNN)的…

运维打铁: 数据加密与备份恢复策略制定

文章目录 思维导图一、数据加密1. 加密算法选择AES 加密示例&#xff08;Python&#xff09;RSA 加密示例&#xff08;Python&#xff09; 2. 密钥管理3. 加密范围 二、数据备份1. 备份类型全量备份增量备份差异备份 2. 备份频率3. 备份存储位置 三、数据恢复1. 恢复测试2. 恢复…

AIbase MCP服务库上线:集成服务器、客户端、案例教程等服务

在当今数字化时代&#xff0c;人工智能技术正以前所未有的速度发展&#xff0c;深刻地改变着我们的生活和工作方式。而要充分发挥AI的强大能力&#xff0c;离不开高效的工具和服务支持。今天&#xff0c;就让我们来了解一下一个专注于MCP&#xff08;Model Context Protocol&am…

QGIS+CesiumIon

前言 QGIS 3.44中&#xff0c;新增了3D 场景新增地球视图模式&#xff0c;通过Cesium ion插件&#xff0c;支持谷歌全球倾斜模型的加载显示。 目录 1 CesiumIon插件安装 2 加载谷歌全球倾斜模型 1、CesiumIon插件安装 点击菜单【Plugins】->【Manage and Install Plugins】…

TEXT Introduction

我们是谁 美国计算机奥林匹克竞赛通过培训、竞赛和国际比赛来促进大学前的计算机学习。 数个教练将会组织、领导、陪伴代表美国参加国际性奥林匹克竞赛的学生。 你可以在 USACO 官网了解更多。 USACO 的目标 USACO 的具体目标包括&#xff1a; 训练美国的队伍并且在下一届奥…

Fluent许可服务器设置教程

Fluent作为一款广泛使用的流体动力学模拟软件&#xff0c;其高效的许可管理系统是确保顺畅运行的关键。为了帮助您更好地掌握Fluent许可服务器的设置方法&#xff0c;本文将为您提供一份详细的设置教程&#xff0c;让您轻松配置&#xff0c;高效运行Fluent软件。 一、Fluent许可…

vue3中实现高德地图POI搜索(附源码)

引言 上一篇文章详细讲解了vue3中实现高德地图地址搜索自动提示&#xff08;附源码&#xff09;&#x1f517;&#xff0c;本文将重点介绍POI搜索功能的实现。 1. 功能介绍 POI(Point of Interest) 搜索用于查找特定位置或区域内的兴趣点&#xff0c;如餐馆、商场、景点等。…

机器学习在计算机视觉中的应用

引言 计算机视觉&#xff08;Computer Vision&#xff09;是人工智能的重要分支&#xff0c;旨在让计算机像人类一样“看懂”图像和视频。近年来&#xff0c;随着深度学习&#xff08;Deep Learning&#xff09;的快速发展&#xff0c;计算机视觉在多个领域取得了突破性进展。…

新手向:从零开始Node.js超详细安装、配置与使用指南

什么是Node.js&#xff1f; 简单来说&#xff1a; Node.js 是一个在服务器端运行 JavaScript 的环境。 以前JavaScript只能做网页特效&#xff0c;现在用它就能开发网站后台、命令行工具甚至桌面应用&#xff01; 第一步&#xff1a;安装Node.js&#xff08;多系统详解&#x…