使用 docker-compose 1 分钟搭建好 1主2从3哨兵的 redis 哨兵集群

目录结构

redis-sentinel-cluster
├── check_redis.sh
├── docker-compose.yml
├── redis
│   └── redis.conf
├── sentinel
│   └── sentinel.conf

docker-compose.yml 配置

version: '3.8'services:# --- Redis 主节点 ---redis-master:image: redis:7.2container_name: redis-masterhostname: redis-mastercommand: redis-server /usr/local/etc/redis/redis.confports:- "7000:6379"volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf- redis-master-data:/datanetworks:redis-net:ipv4_address: 192.168.80.1# --- Redis 从节点 1 ---redis-slave-1:image: redis:7.2container_name: redis-slave-1hostname: redis-slave-1# 启动时,指定它复制 redis-mastercommand: redis-server /usr/local/etc/redis/redis.conf --replicaof redis-master 6379ports:- "7001:6379"volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf- redis-slave-1-data:/datanetworks:redis-net:ipv4_address: 192.168.80.2depends_on:- redis-master# --- Redis 从节点 2 ---redis-slave-2:image: redis:7.2container_name: redis-slave-2hostname: redis-slave-2command: redis-server /usr/local/etc/redis/redis.conf --replicaof redis-master 6379ports:- "7002:6379"volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf- redis-slave-2-data:/datanetworks:redis-net:ipv4_address: 192.168.80.3depends_on:- redis-master# --- 哨兵节点 1 ---redis-sentinel-1:image: redis:7.2container_name: redis-sentinel-1hostname: redis-sentinel-1# 使用 sentinel.conf 启动哨兵模式command: redis-sentinel /usr/local/etc/redis/sentinel.confmem_limit: 256mports:- "27000:26379"volumes:- ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.confnetworks:redis-net:ipv4_address: 192.168.80.4depends_on:- redis-master- redis-slave-1- redis-slave-2# --- 哨兵节点 2 ---redis-sentinel-2:image: redis:7.2container_name: redis-sentinel-2hostname: redis-sentinel-2command: redis-sentinel /usr/local/etc/redis/sentinel.confports:- "27001:26379"volumes:- ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.confnetworks:redis-net:ipv4_address: 192.168.80.5depends_on:- redis-master- redis-slave-1- redis-slave-2# --- 哨兵节点 3 ---redis-sentinel-3:image: redis:7.2container_name: redis-sentinel-3hostname: redis-sentinel-3command: redis-sentinel /usr/local/etc/redis/sentinel.confports:- "27002:26379"volumes:- ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.confnetworks:redis-net:ipv4_address: 192.168.80.6depends_on:- redis-master- redis-slave-1- redis-slave-2# 定义网络,让所有容器都在同一个网络下,可以通过服务名互相通信
networks:redis-net:driver: bridgeipam:config:- subnet: 192.168.80.0/20gateway: 192.168.80.255# 定义数据卷,用于持久化 Redis 数据
volumes:redis-master-data:redis-slave-1-data:redis-slave-2-data:

redis/redis.conf 配置

根据实际情况进行密码修改

# 绑定到所有网络接口,以便容器间可以互相访问
bind 0.0.0.0# 开启保护模式(建议在有密码时关闭,通过防火墙保护)
protected-mode no# 设置密码,这是生产环境的最佳实践,根据实际安全要求进行密码修改
# 主从和哨兵都需要用这个密码来认证
requirepass "your_redis_password"# 当本实例作为从节点时,连接主节点所用的密码
masterauth "your_redis_password"# 开启 AOF 持久化,保证数据安全
appendonly yes

sentinel/sentinel.conf 配置

# 绑定到所有网络接口
bind 0.0.0.0# 后台启动
#daemonize yes# 哨兵的工作端口
port 26379# 监控名为 'mymaster' 的主节点,其地址是 redis-master:6379
# '2' 是 quorum(法定人数),意味着至少需要 2 个哨兵同意,才能判定主节点下线并触发故障转移
# docker-compose 网络会通过服务名 'redis-master' 解析到正确的容器 IP
sentinel monitor mymaster 192.168.80.1 6379 2# 主节点被判定为主观下线(SDOWN)所需的毫秒数
# 如果一个哨兵在 5000 毫秒内没有收到主节点的有效回复,就认为它主观下线
sentinel down-after-milliseconds mymaster 5000# 故障转移的超时时间(毫秒)
# 如果一个哨兵在 180000 毫秒内没有完成对该 master 的故障转移,
# 其他哨兵可以接替它继续进行
sentinel failover-timeout mymaster 180000# 在故障转移后,最多允许多少个从节点同时与新的主节点进行同步
# '1' 是最安全的选择,可以防止新主节点因大量同步请求而过载
sentinel parallel-syncs mymaster 1# 指定连接 Redis 主从节点所需的密码
sentinel auth-pass mymaster "your_redis_password"
# 哨兵密码,根据实际安全要求进行密码修改
requirepass "your_sentinel_password"

启动并验证

启动
docker-compose up -d

类似如下输出

[+] Running 7/7✔ Network redis-sentinel-cluster_redis-net  Created                                                                                         0.2s ✔ Container redis-master                    Started                                                                                         0.7s ✔ Container redis-slave-2                   Started                                                                                         0.9s ✔ Container redis-slave-1                   Started                                                                                         0.9s ✔ Container redis-sentinel-1                Started                                                                                         1.2s ✔ Container redis-sentinel-2                Started                                                                                         1.2s ✔ Container redis-sentinel-3                Started  
查看 启动状态
docker-compose ps

类似如下输出

NAME               IMAGE       COMMAND                   SERVICE            CREATED         STATUS         PORTS
redis-master       redis:7.2   "docker-entrypoint.s…"   redis-master       5 seconds ago   Up 4 seconds   0.0.0.0:7000->6379/tcp, :::7000->6379/tcp
redis-sentinel-1   redis:7.2   "docker-entrypoint.s…"   redis-sentinel-1   5 seconds ago   Up 3 seconds   6379/tcp, 0.0.0.0:27000->26379/tcp, :::27000->26379/tcp
redis-sentinel-2   redis:7.2   "docker-entrypoint.s…"   redis-sentinel-2   5 seconds ago   Up 3 seconds   6379/tcp, 0.0.0.0:27001->26379/tcp, :::27001->26379/tcp
redis-sentinel-3   redis:7.2   "docker-entrypoint.s…"   redis-sentinel-3   5 seconds ago   Up 3 seconds   6379/tcp, 0.0.0.0:27002->26379/tcp, :::27002->26379/tcp
redis-slave-1      redis:7.2   "docker-entrypoint.s…"   redis-slave-1      5 seconds ago   Up 3 seconds   0.0.0.0:7001->6379/tcp, :::7001->6379/tcp
redis-slave-2      redis:7.2   "docker-entrypoint.s…"   redis-slave-2      5 seconds ago   Up 3 seconds   0.0.0.0:7002->6379/tcp, :::7002->6379/tcp
验证集群状态
./check_redis_sentinel.sh -h 192.168.80.1 -p 6379 -a your_redis_password

类似有如下输出:

成功连接到 Redis (192.168.80.1:6379)--- 正在检查单机/主从模式 ---
模式判断: 主从复制模式 或 单机模式
----------------------------------------
Redis 版本         : 7.2.10
运行时间         : 0 天
已连接客户端   : 7
使用内存         : 1.29M
当前节点角色   : MASTER
----------------------------------------
节点角色: MASTER
发现 2 个从节点:- slave0:192.168.80.2:6379- slave1:192.168.80.3:6379提示: 如果这是一个由 Sentinel 管理的集群, 请使用 -s <sentinel_port> 参数来获取详细的哨兵和主从信息.
./check_redis.sh -h 192.168.80.4 -s 26379 -a your_sentinel_password

类似有如下输出

--- 正在检查哨兵 (Sentinel) 模式 ---
成功连接到 Redis (192.168.80.4:26379)
模式判断: 哨兵 (Sentinel) 模式监控组: mymaster
----------------------------------------
[Master 节点]- 192.168.80.1:6379
[Slave 节点]- 192.168.80.3:6379- 192.168.80.2:6379
[Sentinel 节点]- 192.168.80.6:26379 (284f5f39749c4461097f19df31d6df2b1042f2d9)- 192.168.80.5:26379 (522a29a38455cc8d74e11f05626dd01b4b67d3f1)- 192.168.80.4:26379 (当前连接的节点)

check_redis_sentinel 脚本地址:https://github.com/zhengmingliang/code-fragment/blob/main/shell/linux/redis/check_redis_sentinel.sh

笔记来源

个人博客 docker 1分钟 快速搭建 redis 哨兵集群 https://alianga.com/articles/docker-redis-sentinel

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

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

相关文章

Git与DevOps实战:从版本控制到自动化部署

一、版本控制1.什么是版本控制&#xff1f;版本控制用于高效追踪和管理项目开发中的代码、配置及文档变更历史&#xff0c;确保团队成员始终使用正确版本&#xff0c;并支持版本回溯、差异比较和文件恢复。它能带来以下优势&#xff1a;通过历史记录保障数据安全与完整性&#…

大模型——利用RAG构建智能问答平台实战

利用RAG构建智能问答平台实战 目前公司的智能问答平台利用RAG技术构建,现给大家分享下通RAG技术构建智能问平台的具体流程和原理。 一、什么是RAG RAG是检索增强生成技术(Retrieval-Augmented Generation),目前是构建智能问答的重要技术。RAG相比传统的检索可以可以减少…

flume事务机制详解:保障数据可靠性的核心逻辑

flume事务机制详解&#xff1a;保障数据可靠性的核心逻辑 在数据采集过程中&#xff0c;“不丢数据、不重数据” 是核心需求。Flume 之所以能在分布式环境下保证数据可靠性&#xff0c;关键在于其内置的事务机制。Flume 通过在 “Source → Channel” 和 “Channel → Sink” …

第四十九天(springboot模版注入ThymeleafFreemarkerVelocity)

开发框架-SpringBoot 参考&#xff1a;Spring Boot 中文文档 新建一个spring Boot 项目&#xff0c;修改服务器url为 aliyun.com 不然没有与jdk8版本对应的java 选择一个spring web 库&#xff0c;点击创建即可 来到这个页面点击运行 启动的是8080端口&#xff0c;用127.0.0.1…

Spring MVC 九大组件源码深度剖析(六):HandlerExceptionResolver - 异常处理的艺术

文章目录一、异常处理的核心价值二、核心接口设计三、四大内置实现类源码解析1. ExceptionHandlerExceptionResolver&#xff08;现代异常处理核心&#xff09;2. ResponseStatusExceptionResolver&#xff08;HTTP状态码处理&#xff09;3. DefaultHandlerExceptionResolver&a…

MCP(Model Context Protocol,模型上下文协议)介绍

1. 背景 随着大语言模型&#xff08;LLM, Large Language Model&#xff09;的应用越来越广泛&#xff0c;一个核心问题逐渐凸显&#xff1a; 模型在对话或推理时&#xff0c;往往只能依赖有限上下文窗口。外部工具、知识库、应用接口如何统一接入模型&#xff0c;缺乏标准协议…

synchronized的锁对象 和 wait,notify的调用者之间的关系

谁调用了wait和notify方法&#xff0c;会决定这两个方法的控制范围吗&#xff1f;你的问题非常深入&#xff0c;涉及到 wait() 和 notify() 方法的控制范围和作用域。让我们详细分析一下&#xff1a;✅ 核心概念&#xff1a;控制范围由“锁对象”决定wait() 和 notify() 的控制…

【技术教程】如何将文档编辑器集成到用 .Net 编写的网络应用程序中

在现代网络应用中&#xff0c;​富文本编辑能力已成为内容管理系统的核心需求。对于 .NET 开发者而言&#xff0c;选择适合的编辑器并高效集成&#xff0c;是构建企业级应用的关键一步&#xff0c;可让项目管理、 CRM 或定制化系统具备原生办公能力&#xff0c;消除频繁切换应用…

【大模型记忆-Mem0详解-1】概述

目的和能力 Mem0 通过提供以下功能将无状态 AI 应用程序转换为有状态、支持内存的系统&#xff1a; 持久记忆 &#xff1a;跨会话长期保留用户偏好、对话历史记录和上下文信息多级内存 &#xff1a;支持具有自适应个性化的用户级、会话级和代理级内存智能提取 &#xff1a;基于…

2024年山东省信息学小学组(CSP-X)第一轮题解

2024年山东省信息学小学组(CSP-X)第一轮题解 原题下载 单项选择题 阅读程序 阅读程序 #1 判断题 阅读程序 #2 判断题 单选题 阅读程序 #3 判断题 单选题 完善程序 消灭怪兽 位运算操作 原题下载 CSP-X2024小学组(山东)第一轮试题以及答案 单项选择题 共 15 题,每题 2 分…

SW - 用装配图的方式组合多个子零件然后转换成为零件,可维护性好

文章目录SW - 用装配图的方式组合多个子零件然后转换成为零件&#xff0c;可维护性好概述笔记例子将装配图另存为零件将零件图中的多个实体组合为一个实体的特征备注ENDSW - 用装配图的方式组合多个子零件然后转换成为零件&#xff0c;可维护性好 概述 以前画机械零件&#x…

PhotoshopImageGenerator:基于Photoshop的自动化图像数据集生成工具

整体逻辑与设计思路 PhotoshopImageGenerator是一个基于Python和Win32COM的自动化工具,通过控制Adobe Photoshop CC 2019创建多样化的图像数据集。其核心设计思路是通过程序化调用Photoshop的图像编辑能力,为基础图像添加随机元素(图片、文本、形状)和效果,快速生成大量变…

macos自动安装emsdk4.0.13脚本

1.替换文件 emsdk #!/bin/sh # Copyright 2019 The Emscripten Authors. All rights reserved. # Emscripten is available under two separate licenses, the MIT license and the # University of Illinois/NCSA Open Source License. Both these licenses can be # foun…

c++ Effective c++ 条款5

class MyClass { public:MyClass(int& ref, const int c_val) : myRef(ref), myConstVal(c_val) {}// 明确删除拷贝操作MyClass(const MyClass&) delete;MyClass& operator(const MyClass&) delete;private:int& myRef; // 引用成员const int myCo…

如何使用 Xshell 8 连接到一台 CentOS 7 电脑(服务器)

什么是 Xshell&#xff1f; Xshell 是一款功能强大的、适用于 Windows 平台的终端模拟器。它支持 SSH (Secure Shell)、SFTP、TELNET、RLOGIN 和 SERIAL 等多种网络协议&#xff0c;让用户能够安全地连接和管理远程服务器。 对于开发者、系统管理员和网络工程师来说&#xff…

CSS scale函数详解

目录 基本语法 核心特性 常用场景示例 1. 等比例缩放&#xff08;X 轴和 Y 轴相同&#xff09; 2. 非等比例缩放&#xff08;X 轴和 Y 轴不同&#xff09; 3. 翻转并缩放 4. 配合过渡动画实现交互效果 5. 图片悬停缩放效果 6. 缩放原点调整 与其他变换组合使用 注意…

【MATLAB代码】基于EKF的二维组合导航仿真代码,状态量为位置、速度、航向角与IMU偏置,观测量为XY轴的位置和速度,附完整代码

8维状态量(2维位置、2维速度、航向角、航向角偏置、2维加速度计偏置)+4维观测量(2维位置、2维速度)。 订阅专栏后,可直接查看源代码,粘贴到MATLAB空脚本中即可直接运行、得到结果 文章目录 运行结果 MATLAB源代码 程序详解 📘 程序概述 状态预测(状态转移函数) 状态雅…

OpenCV 图像轮廓检测

目录 一、轮廓检测基础概念 二、核心 API 详解&#xff1a;cv2.findContours () 参数说明&#xff1a; 返回值说明&#xff1a; 三、轮廓检测实战步骤 1. 图像预处理&#xff08;灰度化与二值化&#xff09; 2. 查找轮廓 3. 绘制轮廓 四、轮廓的常用属性与操作 1. 轮…

【图论】 Graph.jl 概览

文章目录安装基础使用基本操作全局图的指标顶点性质边性质读写图按照 .lgz 格式存储图数据&#xff08;压缩格式&#xff09;按照 .lg 格式存储图数据&#xff08;非压缩格式&#xff09;图的绘制TikzGraphs.jl Latex 论文风格GraphPlot.jl 通常与 Compose.jl 一起使用SGtSNEpi…

[java] 控制三个线程按顺序交替输出数字123123…

控制三个线程按顺序交替输出数字123123… synchronized&#xff08;配合专用锁对象&#xff09; 通过共享锁和 volatile 变量控制执行顺序&#xff0c;每个线程按指定顺序打印指定内容&#xff0c;确保输出序列如 “123123…”。使用 synchronized 和 wait/notifyAll 实现线程间…