Docker搭建Redis哨兵模式【一主两从三哨兵】
Docker搭建Redis哨兵模式
系统: CentOS 7
Dockder 版本:
VMware虚拟机
网络适配器
- 网络连接
- 桥接模式:直接连接物理网络
查看IP命令
ip addr

一、哨兵模式概述
1. 官方文档与关联博客
- 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel
- 关联博客:Redis 主从复制,在后续配置从节点时会用到。
2. 极简概括
Redis 哨兵模式是一种自动监控 Redis 主节点是否故障的方案。当主节点出现故障时,Redis 会依据投票数自动将从库切换为主库,这个过程被称为仲裁。
3. 解决的问题
在传统的主从复制架构模式下,若 Redis 主节点挂掉,从节点没有任何补偿操作,在无人工干预的情况下,整个缓存链路的写功能将会丧失。而哨兵模式引入了哨兵看守机制,能够实现对主机的检测以及自动将从机切换为主机的功能。
4. 适用场景
适用于需要 7 * 24 小时 高可用,并且公司愿意投入相关运维成本的服务端应用。需要注意的是,作为哨兵节点的 Redis 实例,将无法提供缓存服务,只能作为哨兵使用,而且通常要求哨兵数量为奇数个。
5. 优点
- 降低运维成本:拥有强大的高可用机制,能够在一定程度上降低运维成本。
- 自动恢复机制:当主节点挂掉后,哨兵会自动从从节点中选出一个作为新的主节点,继续对外提供服务,无需人工值守。
6. 缺点
- 场景限制:小型公司可能不需要使用 Redis,中型公司也不一定会用到 Redis 主从架构,更不用说使用哨兵这种严谨的运维策略。
- 资金问题:Redis 哨兵模式需要部署多个服务器,这对于公司来说是一笔不小的支出,存在一定的资金门槛。
- 延迟问题:当主节点挂掉时,虽然可以实现自动切换,但多个哨兵判断 Redis 主节点客观下线的过程需要一定时间,尽管这个时间可以调整,但在此期间 Redis 的写操作会失效。因此,为了解决这个问题,出现了集群策略。
- 数据丢失问题:Redis 主从复制采用异步复制方式,哨兵模式只是增加了自动化的切换功能,不像 MySQL 有 redo log 机制,无法保证数据 100% 不丢失。
- 脑裂问题:在某些情况下,会引发脑裂问题(后续会详细说明)。
7. 误区说明
需要明确的是,哨兵和集群是两个不同的概念,它们之间没有关联。哨兵模式是主从复制架构的高可用优化方案,而不是集群部署的高可用方案。
8. 访问流程变化
在传统模式下,编程语言客户端直接访问 Redis 主节点或从节点。而在哨兵模式下,客户端访问的是哨兵节点(通常由奇数个哨兵组成一个哨兵集群,奇数个哨兵便于进行投票),然后由哨兵节点告知客户端应该访问哪个主节点或从节点,从而区分读写操作。
二、实操(1 主 + 2 从 + 3 哨)
1. 选择 3 个哨兵的理由
如同一个小区至少需要 2 个保安轮班倒一样,为了确保对 Redis 主节点的可靠监控,需要多个哨兵。同时,由于哨兵有类似投票的机制,使用奇数个哨兵可以避免出现投票平局的情况,因此选择 3 个哨兵是比较合适的。
2. 环境决策
本次部署采用 3 个哨兵 + 1 个 Master + 2 个 Slave 的架构,共需要 6 台服务器。考虑到 Docker 方案在拉取镜像时可能会遇到网络限制(国内网络环境可能导致镜像拉不下来,且本地没有可用镜像),因此弃用 Docker 方案。
3. 运行环境
- 操作系统:CentOS 7.6
- 内存分配:每个系统分配 1G 内存,Linux 系统可以轻松启动这些 Redis 实例,总共占用内存 6GB,设备可以承受。但需要注意的是,磁盘占用相对较高,特别是在开机时。
- 远程连接配置:每个 Redis 实例都已经配置好了远程连接功能,包括防火墙设置、远程连接权限配置以及保护模式的调整。
4. IP 分配
| 主机名 | 服务器配置 | 服务器IP | 网关地址 | 端口号 | 备注 |
|---|---|---|---|---|---|
| redis-master | 2核CPU、1G内存、300G磁盘 | 192.168.2.100 | 192.168.2.1 | 6379 | 主节点 |
| redis-slave1 | 2核CPU、1G内存、300G磁盘 | 192.168.2.101 | 192.168.2.1 | 6379 | 从节点1 |
| redis-slave2 | 2核CPU、1G内存、300G磁盘 | 192.168.2.102 | 192.168.2.1 | 6379 | 从节点2 |
| redis-sentinel1 | 2核CPU、1G内存、300G磁盘 | 192.168.2.103 | 192.168.2.1 | 26379 | 哨兵1 |
| redis-sentinel2 | 2核CPU、1G内存、300G磁盘 | 192.168.2.104 | 192.168.2.1 | 26379 | 哨兵2 |
| redis-sentinel3 | 2核CPU、1G内存、300G磁盘 | 192.168.2.105 | 192.168.2.1 | 26379 | 哨兵3 |
网络拓扑结构如下:
192.168.2.103【哨兵1】 192.168.2.101【从1】/ \ // \ // \ /
192.168.2.xxx -->-> 192.168.2.104【哨兵2】 ---> 192.168.2.100【主】\ / \\ / \\ / \ 192.168.2.105【哨兵3】 192.168.2.102【从2】
5.hosts
# vim /etc/hosts192.168.2.100 redis-master
192.168.2.101 redis-slave1
192.168.2.102 redis-slave2
192.168.2.103 redis-sentinel1
192.168.2.104 redis-sentinel2
192.168.2.105 redis-sentinel3
6. 主要配置说明
初始化配置
创建目录mk相关文章:
Docker搭建Redis哨兵模式【一主两从三哨兵】
Docker搭建Redis哨兵模式 系统: CentOS 7 Dockder 版本: VMware虚拟机 网络适配器 网络连接 桥接模式:直接连接物理网络查看IP命令 ip addr一、哨兵模式概述 1. 官方文档与关联博客 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel关联博…...
labview实现大小端交换移位
在解码时遇到了大小端交换的问题,需要把高低字节的16进制值进行互换,这里一时间不知道怎么操作,本来打算先把16进制转字节数组,算出字节数组的大小,然后通过模2得到0,1,来判断是否为奇数位和偶数…...
Three.js 进阶(灯光阴影关系和设置、平行光、阴影相机)
本篇主要学习内容 : 灯光与阴影聚光灯点光源平行光阴影相机和阴影计算投射阴影接受阴影 点赞 关注 收藏 学会了 1.灯光与阴影 1、材质要满足能够对光有反应 2、设置渲染器开启阴影计算 renderer.shadowMap.enabledtrue 3、设置光照投射阴影 directionalLight.castShadow …...
FastAPI 分页模块实现详解
1. 简介 本文详细介绍了一个基于 FastAPI 框架的通用分页处理模块的实现。该模块提供了标准的分页参数处理、数据切片和响应格式化功能,可以轻松地集成到任何 FastAPI 项目中。 2. 代码实现 2.1 导入必要的模块 首先,我们需要导入所需的模块…...
RK3588部署YOLOv8(2):OpenCV和RGA实现模型前处理对比
目录 前言 1. 结果对比 1.1 时间对比 1.2 CPU和NPU占用对比 2. RGA实现YOLO前处理 2.1 实现思路 2.2 处理类的声明 2.3 处理类的实现 总结 前言 RK平台上有RGA (Raster Graphic Acceleration Unit) 加速,使用RGA可以减少资源占用、加速图片处理速度。因此…...
打造智能钉钉机器人:借助智谱GLM-4-Flash实现高效智能回复(文末附源码)
文章目录 前言一、准备工作(一)钉钉机器人(二)智谱 GLM-4-Flash(三)内网穿透工具 cpolar(四)需要准备的工具和环境 二、钉钉机器人的创建与配置步骤1:创建钉钉机器人步骤…...
使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图
以下是使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图: graph TDA[开始移植] --> B[代码兼容性检查]B --> C[检查系统调用差异\nfork/exec -> CreateProcess]B --> D[检查文件路径格式\n/ vs \\]B --> E[检查依赖库兼容性\nPOSIX vs …...
入门到入土,Java学习 day16(算法1)
利用循环遍历来判断是否相等 二分查找/折半查找 前提条件:数组中的数据有序 每次排除一般的查找范围 用min,max,mid来处理,最大加最小除2,比较,然后得到在中间左边还是右边然后更新最大最小 public class Two {// 二分查找方法…...
Vulnhub 靶机 VulnOSv2 write up opendocman cms 32075 sql注入 账号密码 ssh连接 37292.c 脏牛提权
Vulnhub 靶机 VulnOSv2 write up opendocman cms 32075 sql注入 账号密码 ssh连接 37292.c 脏牛提权 一、信息收集 1、首先拿到靶场先扫一下ip arp-scan -l 3、 2、指纹扫描 nmap -sS -sV 192.168.66.178nmap -p- -sV -A 192.168.66.253 PORT STATE SERVICE VERSION 22…...
Unity辅助工具_头部与svn
Unity调用者按钮增加PlaySideButton using QQu; using UnityEditor; using UnityEngine; [InitializeOnLoad] public class PlaySideButton {static PlaySideButton(){UnityEditorToolbar.RightToolbarGUI.Add(OnRightToolbarGUI);UnityEditorToolbar.LeftToolbarGUI.Add(OnLe…...
2025最新Postman、Apipost和Apifox API 协议与工具选择方案解析
作为一个一个每天和 API“打交道”的全栈开发者,我的日常就是在一堆请求回应之间探寻系统间的“沟通艺术”。熟悉 API 的各种协议和工具,几乎成了我的谋生技能。今天,我就把自己积累多年的“血泪教训”和经验打包成一篇文章,献给和…...
ARM SVC指令
在 ARM 汇编中,SVC(Supervisor Call)指令用于从用户模式切换到特权模式(如 Supervisor 模式),以便执行操作系统内核提供的服务。它通常用于系统调用。 具体作用 触发异常:执行 SVC 指令时&…...
MicroPython 智能硬件开发完整指南
第一部分:MicroPython 基础 1. MicroPython简介 定义:专为微控制器设计的精简Python 3实现,支持硬件直接操作。特点: 语法兼容Python 3,但移除复杂功能(如多线程)。支持GPIO、PWM、I2C、SPI等…...
DeepLabv3+改进8:在主干网络中添加SIM注意力机制|助力涨点
🔥【DeepLabv3+改进专栏!探索语义分割新高度】 🌟 你是否在为图像分割的精度与效率发愁? 📢 本专栏重磅推出: ✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化 ✅ 即插即用模块:ASPP+升级、解码器 PS:订阅专栏提供完整代码 论文简介 在本文中,我们提出了…...
vue-cli3+vue2+elementUI+avue升级到vite+vue3+elementPlus+avue总结
上一个新公司接手了一个vue-cli3vue2vue-router3.0elementUI2.15avue2.6的后台管理项目,因为vue2在2023年底已经不更新维护了,elementUI也只支持到vue2,然后总结了一下vue3的优势,最后批准升级成为了vitevue3vue-router4.5element…...
电路原理(电容 集成电路NE555)
电容 1.特性:充放电,隔直流,通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加,但是多电容串联就不会,只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…...
QEMU源码全解析 —— 块设备虚拟化(2)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(1) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回讲解了几种虚拟化方式(全虚拟化、半虚拟化和硬件辅助虚拟化)的优缺点及其对比…...
[C++面试] 对通透比较器了解多少?(较少涉及,可跳过)
一、入门 1、什么是比较器 在 C 中,比较器是一个可调用对象(函数、函数对象或 Lambda 表达式),用于定义元素之间的比较规则。 用途:通常作为参数传递给标准库中的排序函数或关联容器,以指定元素的顺序。…...
nslookup的使用
nslookup 是一个网络管理命令行工具,用于查询域名系统 (DNS) 服务器来获取有关主机名和IP地址的信息。它可以帮助你检查DNS记录、解析域名到IP地址或者执行反向查找(从IP地址找到对应的域名)。下面是 nslookup 的一些基本用法: 基…...
ES5 vs ES6:JavaScript 演进之路
ES5 vs ES6:JavaScript 演进之路 JavaScript版本演进ES5 (ECMAScript 5)ES6 (ECMAScript 2015)版本演进时间线为什么ES6如此重要? ES5 vs ES61. 变量声明对比2. 函数特性对比3. 类和对象4. 模块化5. 解构和展开6. 字符串和模板字面量7. 数组和对象新方法…...
函数式编程的核心
函数式编程 函数式编程(funcitonal programming)其实是个很古老的概念。 高阶函数和内存分析 函数式一阶公民 函数式编程最鲜明的特点就是:函数式一等公民,指的是函数与其他数据类型一样,处于平等地位,可…...
【易康eCognition实验教程】006:在影像上添加文本
在某些情况下,希望能在影像上面显示文本文字,例如,一个地图的名称或者是多时相影像分析的年或月的显示。此外,文本如果作为一个规则集导出的部分则可以被纳入数字影像中。如下图所示: 若要添加文本,在影像视…...
Django ORM自定义排序的实用示例
在使用Django进行开发时,ORM(对象关系映射)是一个非常强大的工具。它让我们可以用Python代码直接操作数据库,而不需要写SQL语句。当我们需要对数据进行排序时,Django ORM同样提供了丰富的功能。今天,我们就…...
【后端】【ubuntu】 ubuntu目录权限查看的几种方法
在Ubuntu中,有多种方式可以查看目录或文件的权限,以下为你详细介绍常见的指令及其使用方法: 1. ls -l 命令 这是最常用的查看文件和目录权限的命令,-l 选项用于以长格式列出文件和目录的详细信息,其中就包含权限信息…...
C++【类和对象】(超详细!!!)
C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时,必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数,名字等于operator加需要使用的运算符,具有返回类型和参数列表及函数…...
如何简单预估大模型运行所需的显存
模型消耗的显存主要来源于模型参数,前向/反向,梯度以及优化器…… 1、为什么显存很重要 显存就是显卡的“仓库”和“高速公路”。 容量越大,能存储的图形数据就越多,就能支持更高分辨率、更高纹理质量的游戏或图形程序。 速度越…...
Excel 中如何实现数据透视表?
Excel 中如何实现数据透视表? 数据透视表(PivotTable)是 Excel 中强大的数据分析工具,能够快速汇总、分析和展示大量数据。本文将详细介绍如何在 Excel 中创建和使用数据透视表。 1. 数据透视表的基本概念 数据透视表是一种交互…...
C语言中getchar和putchar函数详解,理解多组数据输入的问题中的EOF(-1)
引言 C语言中getchar和putchar函数详解,理解多组数据输入的问题中的EOF(-1)。 1.getchar() 函数原型: int getchar ( void ); getchar() 函数返回用户从键盘输入的一个字符,使用时不带有任何参数。 程序运行到这个命…...
python基础知识补充
一.区分列表、元组、集合、字典: 二.输出: <1>格式化输出字符串: 格式符号转换%s字符串%d有符号的十进制整数%f浮点数%c字符%u无符号十进制整数%o八进制整数%x十六进制整数(小写ox)%X十六进制整数(大写OX)%e科…...
MySql自动安装脚本
一、脚本安装流程 1. 添加MySQL的Repository 使用wget命令从MySQL官方网站下载Yum Repository的RPM包。使用rpm -ivh命令安装下载的RPM包,以添加MySQL的Yum Repository。 2. 安装mysql-community-server 使用yum install -y mysql-community-server --nogpgchec…...
