当前位置: 首页 > news >正文

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 思路&#xff1a;纯模拟的一个水题 #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 锁 关系

多版本并发控制&#xff08;MVCC&#xff09;是一种用于数据库并发控制的机制&#xff0c;它可以在保证数据一致性的同时&#xff0c;提高数据库的并发性能。下面结合 MVCC 机制&#xff0c;详细阐述常见的四种事务隔离级别&#xff08;读未提交、读已提交、可重复读、串行化&a…...

安卓手机基于 Termux 安装 AList 并设置开机自启的详细教程

安装 AList 安装 Termux&#xff1a; 点击下载 更新软件包&#xff1a;打开 Termux&#xff0c;运行以下命令以更新软件包列表并升级已安装的软件包&#xff1a; bash复制 pkg update && pkg upgrade安装 AList&#xff1a;运行以下命令安装 AList&#xff1a; bash复…...

LeetCode:503.下一个更大元素II

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;503.下一个更大元素II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[…...

实验5 配置OSPFv2验证

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

第二节 docker基础之---镜像构建及挂载

查看当前镜像&#xff1a; [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [rootdocker ~]#很明显docker是咱们新搭建的所以目前还没有镜像 1&#xff0c;搜索镜像&#xff1a; [rootdocker ~]# docker search centos 搜索镜像并过滤是官…...

论文阅读:MGMAE : Motion Guided Masking for Video Masked Autoencoding

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

记录一下 在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)

偏差和方差的权衡&#xff08;Bias-Variance Tradeoff&#xff09; 1. 引言 在机器学习模型的训练过程中&#xff0c;我们常常面临一个重要的挑战&#xff1a;如何平衡 偏差&#xff08;Bias&#xff09; 和 方差&#xff08;Variance&#xff09;&#xff0c;以提升模型的泛…...

deepseek本地部署-linux

1、官网推荐安装方法&#xff08;使用脚本&#xff0c;我绕不过github&#xff0c;未采用&#xff09; 登录ollama下载网站https://ollama.com/download/linux&#xff0c;linux下有下载脚本。 正常来说&#xff0c;在OS系统下直接执行脚本即可。 2、手动安装方法 2.1获取ol…...

解决使用python提取word文档中所有的图片时图片丢失的问题

python解析word文档&#xff0c;提取文档中所有的图片并保存&#xff0c;并将原图位置用占位符替换。 问题描述 利用python-dox库解析word文档&#xff0c;并提取里面的所有图片时发现会出现一摸一样的图片只解析一次&#xff0c;导致图片丢失&#xff0c;数量不对的情况。 …...

【Spring相关知识】Spring应用如何优雅使用消息队列

文章目录 概述**核心概念****使用场景****快速入门**1. 添加依赖2. 配置 Binder3. 定义消息通道4. 发送和接收消息5. 运行应用 **高级特性****优点****适用场景** 概述 Spring Cloud Stream 是一个用于构建消息驱动微服务的框架&#xff0c;它基于 Spring Boot 和 Spring Inte…...

人工智能:从概念到未来

人工智能&#xff1a;从概念到未来 一、引言 在当今数字化时代&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;已从科幻小说和电影中的幻想逐渐走进现实&#xff0c;成为推动社会进步和经济发展的关键力量。它正在深刻地改变着我们的生活…...

CUDA Graph

cudaGraphLaunch 是 NVIDIA CUDA API 中的一个函数&#xff0c;用于在 CUDA Graphs 中启动一个已实例化的图。 CUDA Graphs 简介 CUDA Graphs 是 NVIDIA CUDA 编程模型中的一种技术&#xff0c;旨在优化 GPU 程序的性能。它允许将一系列连续的 GPU 操作&#xff08;如计算和数…...

1343. 大小为 K 且平均值大于等于阈值的子数组数目

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 在遍历时维护一个统计的变量&#xff0c;用来统计满足条件的子数组个数 2.2 代码尝试 class Solution { public:int numOfSubarrays(vec…...

IDEA+DeepSeek让Java开发起飞

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

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

使用VSCode开发Django指南

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

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

NFT模式:数字资产确权与链游经济系统构建

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

vue3+vite项目中使用.env文件环境变量方法

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

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

探索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 数据…...