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对话接口地址,点击左边的:接口…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...