持久化、主从 、分片、哨兵

2024-06-23 15:28
文章标签 哨兵 持久 主从 分片

本文主要是介绍持久化、主从 、分片、哨兵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

持久化

RDB(存数据)

使用场景

bgsave

使用方法

原理

AOF(存命令)

使用方法

原理

bgrewriteaof

AOF和RDB

主从集群

搭建

数据同步原理(slave宕机)

全量同步

增量同步

集群优化

总结

哨兵机制(master宕机)

机制

监控

自动故障恢复

通知

搭建哨兵集群

RedisTemplate的哨兵模式

分片集群

搭建


持久化

RDB(存数据)

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。

快照文件称为RDB文件,默认是保存在当前运行目录。

使用场景

在进行大量读写操作修改数据后,若Redis服务宕机则数据丢失;但是采取RDB即修改一部分数据后进行持久化到磁盘可避免数据丢失。

bgsave

使用方法

在redis.conf文件中找到:

#900秒内,如果至少有1个key被修改,则执行bgsave即RDB,如果是save ""则表示禁用RDB
save 900 1

bgsave是在保存数据时新开线程不影响Redis读写;而save在保存数据时Redis其他工作都要停止,其一般在关闭Redis时执行。

原理

RDB的缺点:RDB执行间隔实践长,两次RDB之间写入数据有丢失的风险(最新数据可能丢失);在使用方法设置RDB中,若设置间隔时间(900)太短则处理还没完就要执行下一个bgsave即保存不了数据。

AOF(存命令)

AOF全称Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。

使用方法

AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:

# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"

AOF的命令记录的频率也可以通过redis.conf文件来配:

一般采用第二种方案

# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always
# 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案
appendfsync everysec
# 写命令执行完先放入AOF缓冲区,有操作系统决定何时将缓冲区内容写回磁盘
appendfsync no

原理

将每个命令完完全全保存到AOF文件中,当出现服务宕机时,可执行AOF文件恢复数据。

AOF的缺点:因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有。

bgrewriteaof

通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf种配置:

# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb

AOF和RDB

RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。

主从集群

单节点Redis的并非能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

搭建

📎Redis集群.md

数据同步原理(slave宕机)

全量同步

master如何判断slave是不是第一次来同步数据?

slave请求数据同步时,必须向master声明自己的replication id和offset,master才可以判断到底需要同步哪些数据。

Replication Id:数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid

offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。

增量同步

replication id和offset一定于master相同。

集群优化

总结

哨兵机制(master宕机)

机制

作用

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。

• 监控:Sentinel会不断检测master和slave是否按预期工作。

• 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后以新的master为主。

• 通知:新的master形成后相应地址发生改变,因此Sentinel充当Redis客户端的服务发现来源,会将地址等信息推送给Redis客户端(RedisClient)。

监控

Sentinel每隔1秒向集群的每个实例发送ping命令:

• 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。

• 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过sentinel实例数量的一半。

自动故障恢复

选举新的master

通知

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。

Spring的RedisTemplate底层利用lettuce实现节点的感知和自动切换。

如何实现故障转移

搭建哨兵集群

📎Redis集群.md

RedisTemplate的哨兵模式

1.依赖

<!--redis依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置

spring:redis:sentinel:master:mymaster #指定master名称nodes: #指定redis-sentinel集群信息- 192.168.150.101:27001- 192.168.150.101:27002- 192.168.150.101:27003

3.配置主从读写分离(启动类)

@Bean
public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){return configBuilder -> configBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
}       

分片集群

分片集群就是多个主从集群。

主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:

• 海量数据存储问题

• 高并发写的问题

使用分片集群可以解决上述问题,分片集群特征:

• 集群中有多个master,每个master保存不同数据

• 每个master都可以有多个slave节点

• master之间通过ping监测彼此健康状态

• 客户端请求可以访问集群任意节点,最终都会被转发到正确节点

搭建

📎Redis集群.md

高级篇-分布式缓存-14-Redis分片集群-散列插槽_哔哩哔哩_bilibili

这篇关于持久化、主从 、分片、哨兵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087547

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意