redis之哨兵集群搭建
一:哨兵集群工作概览图
1.监控:sentinel通过心跳监控redis的master和slave实例是否正常工作
2.故障转移:假如master出现故障,sentinel会选举一个slave作为新的master,当故障实例恢复后身份会变成slave,会以新的master为主
二:哨兵的选举机制原理
sentinel基于心跳形式监控redis集群服务,每秒向每个redis实例发送ping命令
1:主观下线:sentinel发现某redis实例在规定时间内没有心跳响应则认为该实例下线
2:客观下线:超过配置的指定数量(quorum) 的sentinel都认为该redis主观下线,则该实例为客观下线,quorum的数量最好为sentinel数量的一半,例如这里3个sentinel实例,quorum则应该配置为2
三:sentinel故障转移原理
1:sentinel向选举的slave节点发送slaveof no one命令使其变为master节点
2:sentinel向其他slave节点发送slaveof ip port,使其他slave节点认新的master节点为主节点,之后开始同步数据
3:sentinel把故障节点标记为slave节点,故障节点恢复后成为新master节点的从节点
四:使用docker compose搭建哨兵集群(三redis实例三哨兵)
redis1配置文件
#绑定端口
bind 0.0.0.0
#端口
port 63799
#保护模式关闭
protected-mode no
#注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
##设置日志级别,如debug、verbose、notice、warning等。
loglevel notice
#logfile:指定日志文件的路径
logfile /var/log/redis/redis.log
# 设置密码,这样只有输入正确的密码后才能访问服务器。默认为空,表示没有密码。
requirepass ming
#从节点与主节点通信的密码
masterauth ming
#redis能使用的最大内存
maxmemory 1gb
#是否在将rdb文件持久化到磁盘时,进行压缩操作。设置为 "yes" 可以提高数据安全性,但可能会降低性能。默认为 "no"。
rdbcompression yes
#rdb文件名
dbfilename rdb_dump.rdb
#指定Redis服务器存储数据(比如RDB快照文件)的目录
dir /data
#rdb持久化,快照可以用一个空字符串参数完全禁用:save “”
#在900秒(15分钟)内,如果有至少1个键被改变,则bgsave进行RDB持久化
#在300秒(5分钟)内,如果有至少10个键被改变,则bgsave进行RDB持久化
#在60秒内,如果有至少10000个键被改变,则bgsave进行RDB持久化
save 900 1
save 300 10
save 60 10000
#开启aof持久化,关闭为no
appendonly yes
#aof持久化刷盘策略
appendfsync everysec
redis2配置文件
bind 0.0.0.0
#保护模式关闭
protected-mode no
#注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
#端口
port 63800
##设置日志级别,如debug、verbose、notice、warning等。
loglevel notice
#logfile:指定日志文件的路径
logfile /var/log/redis/redis.log
#redis能使用的最大内存
maxmemory 1gb
#是否在将rdb文件持久化到磁盘时,进行压缩操作。设置为 "yes" 可以提高数据安全性,但可能会降低性能。默认为 "no"。
rdbcompression yes
#rdb文件名
dbfilename rdb_dump.rdb
#指定Redis服务器存储数据(比如RDB快照文件)的目录
dir /data
#rdb持久化,快照可以用一个空字符串参数完全禁用:save “”
#在900秒(15分钟)内,如果有至少1个键被改变,则bgsave进行RDB持久化
#在300秒(5分钟)内,如果有至少10个键被改变,则bgsave进行RDB持久化
#在60秒内,如果有至少10000个键被改变,则bgsave进行RDB持久化
save 900 1
save 300 10
save 60 10000
#开启aof持久化,关闭为no
appendonly yes
#master实例地址
slaveof 192.168.1.9 63799
# 设置密码,这样只有输入正确的密码后才能访问服务器。默认为空,表示没有密码。
requirepass ming
#这个密码用于主从节点间的连接
masterauth ming
redis3配置文件
bind 0.0.0.0
#保护模式关闭
protected-mode no
#注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
#端口
port 63801
##设置日志级别,如debug、verbose、notice、warning等。
loglevel notice
#logfile:指定日志文件的路径
logfile /var/log/redis/redis.log
#redis能使用的最大内存
maxmemory 1gb
#是否在将rdb文件持久化到磁盘时,进行压缩操作。设置为 "yes" 可以提高数据安全性,但可能会降低性能。默认为 "no"。
rdbcompression yes
#rdb文件名
dbfilename rdb_dump.rdb
#指定Redis服务器存储数据(比如RDB快照文件)的目录
dir /data
#rdb持久化,快照可以用一个空字符串参数完全禁用:save “”
#在900秒(15分钟)内,如果有至少1个键被改变,则bgsave进行RDB持久化
#在300秒(5分钟)内,如果有至少10个键被改变,则bgsave进行RDB持久化
#在60秒内,如果有至少10000个键被改变,则bgsave进行RDB持久化
save 900 1
save 300 10
save 60 10000
#开启aof持久化,关闭为no
appendonly yes
#master实例地址
slaveof 192.168.1.9 63799
# 设置密码,这样只有输入正确的密码后才能访问服务器。默认为空,表示没有密码。
requirepass ming
#这个密码用于主从节点间的连接
masterauth ming
sentinel1配置文件
# 设置绑定地址,使之可以被外部访问(绑定哨兵所在机器的ip地址)
bind 0.0.0.0
#默认端口
port 26379
#注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
#日志文件
logfile /logs/sentinel26379.log
#指定别名 主节点地址 端口 哨兵个数(有几个哨兵监控到主节点宕机执行转移)
sentinel monitor mymaster 192.168.1.9 63799 2
# 如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 30000
# 选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1
# 如果10秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 180000
# 配置连接redis主节点密码(如果需要的话进行配置)
sentinel auth-pass mymaster ming
sentinel2配置文件
# 设置绑定地址,使之可以被外部访问(绑定哨兵所在机器的ip地址)
bind 0.0.0.0
#默认端口
port 26380
#注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
#日志文件
logfile /logs/sentinel26380.log
#指定别名 主节点地址 端口 哨兵个数(有几个哨兵监控到主节点宕机执行转移)
sentinel monitor mymaster 192.168.1.9 63799 2
# 如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 30000
# 选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1
# 如果10秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 180000
# 配置连接redis主节点密码(如果需要的话进行配置)
sentinel auth-pass mymaster ming
sentinel3配置文件
# 设置绑定地址,使之可以被外部访问(绑定哨兵所在机器的ip地址)
bind 0.0.0.0
#默认端口
port 26381
#注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
#日志文件
logfile /logs/sentinel26381.log
#指定别名 主节点地址 端口 哨兵个数(有几个哨兵监控到主节点宕机执行转移)
sentinel monitor mymaster 192.168.1.9 63799 2
# 如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 30000
# 选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1
# 如果10秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 180000
# 配置连接redis主节点密码(如果需要的话进行配置)
sentinel auth-pass mymaster ming
本人docker挂载目录结构如下,按需创建即可
docker-compose-redis-sentinel.yml文件内容,文件名,文件中内容的目录路径换成自己的即可
version: '3.7'
services:redie-1:environment:- TZ=Asia/Shanghaiimage: "redis:7.4"container_name: redis1restart: alwaysports:- 63799:63799command: redis-server /usr/local/etc/redis/redis.conf volumes:- /Applications/java_dev_util/dockerData/redis-sentinel/redis1/data:/data - /Applications/java_dev_util/dockerData/redis-sentinel/redis1/logs:/var/log/redis - /Applications/java_dev_util/dockerData/redis-sentinel/redis1/redis.conf:/usr/local/etc/redis/redis.conf redie-2:environment:- TZ=Asia/Shanghaiimage: "redis:7.4"container_name: redis2restart: alwaysports:- 63800:63800volumes:- /Applications/java_dev_util/dockerData/redis-sentinel/redis2/data:/data - /Applications/java_dev_util/dockerData/redis-sentinel/redis2/logs:/var/log/redis - /Applications/java_dev_util/dockerData/redis-sentinel/redis2/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.confredie-3:environment:- TZ=Asia/Shanghaiimage: "redis:7.4"container_name: redis3restart: alwaysports:- 63801:63801volumes:- /Applications/java_dev_util/dockerData/redis-sentinel/redis3/data:/data - /Applications/java_dev_util/dockerData/redis-sentinel/redis3/logs:/var/log/redis - /Applications/java_dev_util/dockerData/redis-sentinel/redis3/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.confsentinel-1:environment:- TZ=Asia/Shanghai # 设置时区image: "redis:7.4" #redis 镜像源container_name: sentinel1 # 容器的名字restart: alwayscommand: redis-sentinel /usr/local/etc/redis/conf/sentinel.confports:- 26379:26379 volumes:- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel1/data:/data- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel1/logs:/logs- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel1/sentinel.conf:/usr/local/etc/redis/conf/sentinel.conf sentinel-2:environment:- TZ=Asia/Shanghaiimage: "redis:7.4"container_name: sentinel2restart: alwayscommand: redis-sentinel /usr/local/etc/redis/conf/sentinel.confports:- 26380:26380volumes:- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel2/data:/data- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel2/logs:/logs- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel2/sentinel.conf:/usr/local/etc/redis/conf/sentinel.confsentinel-3:environment:- TZ=Asia/Shanghaiimage: "redis:7.4"container_name: sentinel3restart: alwayscommand: redis-sentinel /usr/local/etc/redis/conf/sentinel.confports:- 26381:26381volumes:- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel3/data:/data- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel3/logs:/logs- /Applications/java_dev_util/dockerData/redis-sentinel/sentinel3/sentinel.conf:/usr/local/etc/redis/conf/sentinel.conf
docker compose启动
#进入到docker-compose-redis-sentinel.yml文件目录运行
docker compose -f ./docker-compose-redis-sentinel.yml up -d
已经跑起来了
redis命令查看信息
到此为止哨兵集群搭建成功,生产环境redis实例应该部署在单独服务器上,这样才能真正的分担读写压力,而且哨兵集群模式虽然可以实现高可用,解决高并发读的问题,但高并发写和海量数据存储的问题依然没有解决
相关文章:

redis之哨兵集群搭建
一:哨兵集群工作概览图 1.监控:sentinel通过心跳监控redis的master和slave实例是否正常工作 2.故障转移:假如master出现故障,sentinel会选举一个slave作为新的master,当故障实例恢复后身份会变成slave,会以…...

保姆级AI开发环境搭建
目录 windows下环境搭建1. Python环境搭建2. 下载vLLM2.1 安装CUDA2.2 安装Pytorch2.3 安装vllm 3. 部署Deepseek(huggingface)3.1 DeepSeek的优化建议 4. ollama快速部署Deepseek4.1 下载Ollama4.2 配置Ollma4.2 运行模型4.3 其他Ollama命令 linux下环境…...

Arduino 型号的对比
常见 Arduino 型号的对比表格 涵盖了不同型号的关键参数和特点,方便你根据项目需求进行选择: 型号Arduino UnoArduino Mega 2560Arduino LeonardoArduino NanoArduino Due微控制器ATmega328PATmega2560ATmega32U4ATmega328P 或 ATmega168SAM3X8E&#…...
Kafka系列之:定位topic只能保存最新数据的原因
Kafka系列之:定位topic只能保存最新数据的原因 一、背景二、定位排查方向三、深入排查一、背景 kafka topic保存的数据少,topic只能保存最新的数据二、定位排查方向 能想到的定位排查方向:topic能存储的数据量、topic数据保存的时间、topic数据大小./bin/kafka-configs.sh -…...

AtCoder Beginner Contest 391(A~E题题解)
A - Lucky Direction 思路:纯模拟的一个水题 #include <bits/stdc.h> using namespace std; #define int long long string s; signed main() { cin>>s;for(int i0;i<s.size();i){char cs[i];if(cN){cout<<"S";}else if(c…...
mysql mvcc 锁 关系
多版本并发控制(MVCC)是一种用于数据库并发控制的机制,它可以在保证数据一致性的同时,提高数据库的并发性能。下面结合 MVCC 机制,详细阐述常见的四种事务隔离级别(读未提交、读已提交、可重复读、串行化&a…...
安卓手机基于 Termux 安装 AList 并设置开机自启的详细教程
安装 AList 安装 Termux: 点击下载 更新软件包:打开 Termux,运行以下命令以更新软件包列表并升级已安装的软件包: bash复制 pkg update && pkg upgrade安装 AList:运行以下命令安装 AList: bash复…...
LeetCode:503.下一个更大元素II
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:503.下一个更大元素II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[…...

实验5 配置OSPFv2验证
实验5 配置OSPFv2验证 1.实验目的 (1)OSPFv2 验证的类型和意义。 (2)配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 (3)配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…...

第二节 docker基础之---镜像构建及挂载
查看当前镜像: [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [rootdocker ~]#很明显docker是咱们新搭建的所以目前还没有镜像 1,搜索镜像: [rootdocker ~]# docker search centos 搜索镜像并过滤是官…...

论文阅读:MGMAE : Motion Guided Masking for Video Masked Autoencoding
MGMAE:Motion Guided Masking for Video Masked Autoencoding Abstract 掩蔽自编码(Masked Autoencoding)在自监督视频表示学习中展现了出色的表现。时间冗余导致了VideoMAE中高掩蔽比率和定制的掩蔽策略。本文旨在通过引入运动引导掩蔽策略࿰…...

记录一下 在Mac下用pyinstallter 打包 Django项目
安装: pip install pyinstaller 在urls.py from SheepMasterOneToOne import settings from django.conf.urls.static import staticurlpatterns [path("admin/", admin.site.urls),path(generate_report/export/, ReportAdmin(models.Report, admin.site).generat…...
【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)
偏差和方差的权衡(Bias-Variance Tradeoff) 1. 引言 在机器学习模型的训练过程中,我们常常面临一个重要的挑战:如何平衡 偏差(Bias) 和 方差(Variance),以提升模型的泛…...

deepseek本地部署-linux
1、官网推荐安装方法(使用脚本,我绕不过github,未采用) 登录ollama下载网站https://ollama.com/download/linux,linux下有下载脚本。 正常来说,在OS系统下直接执行脚本即可。 2、手动安装方法 2.1获取ol…...
解决使用python提取word文档中所有的图片时图片丢失的问题
python解析word文档,提取文档中所有的图片并保存,并将原图位置用占位符替换。 问题描述 利用python-dox库解析word文档,并提取里面的所有图片时发现会出现一摸一样的图片只解析一次,导致图片丢失,数量不对的情况。 …...
【Spring相关知识】Spring应用如何优雅使用消息队列
文章目录 概述**核心概念****使用场景****快速入门**1. 添加依赖2. 配置 Binder3. 定义消息通道4. 发送和接收消息5. 运行应用 **高级特性****优点****适用场景** 概述 Spring Cloud Stream 是一个用于构建消息驱动微服务的框架,它基于 Spring Boot 和 Spring Inte…...

人工智能:从概念到未来
人工智能:从概念到未来 一、引言 在当今数字化时代,人工智能(Artificial Intelligence,AI)已从科幻小说和电影中的幻想逐渐走进现实,成为推动社会进步和经济发展的关键力量。它正在深刻地改变着我们的生活…...
CUDA Graph
cudaGraphLaunch 是 NVIDIA CUDA API 中的一个函数,用于在 CUDA Graphs 中启动一个已实例化的图。 CUDA Graphs 简介 CUDA Graphs 是 NVIDIA CUDA 编程模型中的一种技术,旨在优化 GPU 程序的性能。它允许将一系列连续的 GPU 操作(如计算和数…...

1343. 大小为 K 且平均值大于等于阈值的子数组数目
目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 在遍历时维护一个统计的变量,用来统计满足条件的子数组个数 2.2 代码尝试 class Solution { public:int numOfSubarrays(vec…...

IDEA+DeepSeek让Java开发起飞
1.获取DeepSeek秘钥 登录DeepSeek官网 : https://www.deepseek.com/ 进入API开放平台,第一次需要注册一个账号 进去之后需要创建一个API KEY,然后把APIkey记录保存下来 接着我们获取DeepSeek的API对话接口地址,点击左边的:接口…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...