redis-sentinel

Redis缓存穿透和缓存雪崩以及解决方案

时光总嘲笑我的痴心妄想 提交于 2020-12-14 04:43:11
原文: Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案 缓存穿透 解决方案 布隆过滤 缓存空对象 比较 缓存雪崩 解决方案 保证缓存层服务高可用性 依赖隔离组件为后端限流并降级 数据预热 缓存并发 分布式锁 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存不命中,接着查询数据库也无法查询出结果,因此也不会写入到缓存中,这将会导致每个查询都会去请求数据库,造成缓存穿透; 解决方案 布隆过滤 对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力; 缓存空对象 当存储层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源; 但是这种方法会存在两个问题: 如果空值能够被缓存起来,这就意味着缓存需要更多的空间存储更多的键,因为这当中可能会有很多的空值的键; 即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。 比较 缓存雪崩 缓存雪崩是指,由于缓存层承载着大量请求,有效的保护了存储层,但是如果缓存层由于某些原因整体不能提供服务,于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会挂掉的情况。 解决方案

面试突击 005 | Redis 是如何实现高可用的?它的实现方式有哪些?「视频版」

拟墨画扇 提交于 2020-11-10 05:37:10
这是我的第 35 篇原创文章 作者 | 老王(javacn666) 这部视频的录制、剪辑、做 PPT、写文稿大约花费了 5 个小时的时间,希望这种形式能被更多的人喜欢,希望这篇文章会给你带来更多的价值。 1 面试题 Redis 是如何实现高可用的?它的实现方式有哪些? 2 涉及问题 什么是高可用? Redis 中高可用的实现方式有哪些? 各种实现方式的优缺点有哪些? 3 视频 视频内容如下: 4 答案 高可用是指通过设计减少程序不能提供服务的时间叫做高可用。 Redis 实现高可用的方式有四种: 持久化 主从同步(主从复制) Redis Sentinel Redis Cluster 1)持久化 持久化有三种方式: RDB(Redis DataBase)全量复制 AOF(Append Only File)增量复制 混合持久化(支持版本 Redis 4.0+) 持久化让 Redis 的数据不再丢失,当某个节点奔溃时,可以很快的重新启动或重新搭建一个 Redis 服务器端,加载持久化文件即可恢复 Redis 的正常运行,为 Redis 奔溃恢复节省了宝贵的时间。 更多介绍详见视频部分。 2)主从同步 提供的功能是从单机 Redis 变成多机 Redis。 提供两种模式:主从模式和从从模式。 主从模式, 如下图所示 : 从 从模式,如下图所示: 当主节点出现问题

Redis哨兵功能与集群搭建

那年仲夏 提交于 2020-11-01 17:51:22
6.redis哨兵功能 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能。 而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群,自动发现master宕机,进行自动切换slave > master。 sentinel主要功能如下: 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识 如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也认为主节点不可达,就会选举一个sentinel节点来完成自动故障转义 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换 ↓ShowCode↓ redis命令: redis-cli info #查看redis数据库信息 redis-cli info replication #查看redis的复制授权信息 redis-cli info sentinel

凭这些资料登上Redis的顶峰:阿里核心笔记/实战/面试专题/脑图,与之共勉

最后都变了- 提交于 2020-10-23 15:55:37
作为同时具备高性能、高可靠和高可扩展性的典型键值数据库,Redis不仅功能强大,而且稳定,理所当然地成为了大型互联网公司的首选。 众多大厂在招聘的时候,不仅会要求面试者能简单地使用Redis,还要能深入地理解底层实现原理,并且具备解决常见问题的能力。可以说,熟练掌握Redis已经成为了技术人的一个必备技能。 但是,在学习和使用Redis的过程中,总不可避免地遇见一些棘手的问题,比如: Redis的key和数据结构应该怎么设计?有什么最佳实践? Redis集群如何均衡数据?又如何横向扩展? 怎么保证数据的一致性?热点数据的问题怎么解决? RDB持久化生成的数据快照,每次更新是全量更新还是增量更新? 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题怎么解决? 如何高效阅读Redis源代码? 为了更好的学习Redis,吃透Redis,为大家带来三份扎实的学习资料, Redis核心笔记,Redis实战、Redis面试专题以及X-mind版本的Redis学习脑图 …… 由于篇幅原因,资料只做部分展示,需要获取完整资料的朋友麻烦 点击直达 话不多说,来吧!展示! Redis核心笔记 一 Redis 介绍 二 Redis 单机版安装配置 三 Redis 客户端 四 Redis 数据类型 五 Redis 事务 六 Redis 实现分布式锁 七 Redis 持久化方案 八 Redis

Jumpserver集群部署笔记:(一)系统基础环境配置

倾然丶 夕夏残阳落幕 提交于 2020-10-19 08:48:56
1、集群组网信息 序号 主机名 IP地址 操作系统版本 1 devops01 10.255.200.1 CentOS 7.8.2003 2 devops02 10.255.200.2 CentOS 7.8.2003 3 devops03 10.255.200.3 CentOS 7.8.2003 各模块高可用方案如下: Tengine 3节点通过keepalived切换 Jumpserver、koko、guacamole 独立3节点通过tengine负载 Mariadb galera 3节点集群 Redis sentinel 3节点哨兵模式实现主从切换,keepalived实现VIP切换 Keepalived 自身配置了状态切换邮件通知 以下基础环境配置,无特殊说明的情况下表示集群中3台主机均需执行相同配置 2、安装操作系统 操作系统安装主要包括UEFI启动配置,磁盘冗余配置,系统时区配置,系统磁盘分区等配置。 序号 挂载点 主要用途 1 /sas 安装软件 2 /ssd 保存数据库数据 3、配置网卡聚合 3.1 交换机端使用动态聚合配置,服务器端使用mode 4 (802.3ad),实现链路负载分担。 # 交换机端配置示例(H3C) interface Bridge-Aggregation10 port access vlan 100 link-aggregation mode

Kubernetes-基于helm安装部署高可用的Redis及其形态探索

北慕城南 提交于 2020-10-02 12:50:11
首先是一些关于redis的介绍和其在K8S上的安装过程:https://www.kubernetes.org.cn/3974.html 1.1部署形态 通过上述地址的教程,可以完成redis 的安装和使用。本文主要是要阐述一些社区版的redis-ha的形态探索。 这是我按照上述教程安装的例子,可以看到,默认是安装1主+2从,这是3节点的配置。同时,每个redis-server和一个redis-sentinel安装在一个节点,也就有了三个redis-sentinel。 1.2主从切换 首先,我们通过kubectl get svc -n default的方式来获取redis的网络情况。(n为namespace,请根据自己情况进行更改) 然后,我们通过redis-cli的方式来访问redis的master实例,并获取Replication的状态。 从上图中,我们可以看出,redis master有两个slave,同时,可以看到他们的ip和pod ip是对应的。(注意,这里我们是在宿主机上,通过master的clusterIP访问的,而非redis pod的) 我们进入到redis的master server的pod中,kill掉redis server进程,因为pod存活条件应该是以redis来判断的(有的是ping 6379这个端口,这里暂时还不知道是怎么判断的。)

redis主从+哨兵sentinel+VIP高可用结构

守給你的承諾、 提交于 2020-08-20 08:56:11
前言 哨兵sentinel是redis自带的高可用程序,可以发现并自动切换主从状态的redis服务配置,而且哨兵sentinel还可以支持管理多套redis主从. 而应用可以通过类似jedis的驱动直接连接哨兵,来实现高可用.jedis会在哨兵sentinel里发现真实的主库地址,然后让程序连上真实主库地址操作. 不过这个架构有三个问题,第一,应用程序的配置要实现这个功能的话就要从连接真实IP的redis改成连接哨兵.第二,如果哨兵挂了,应用会报错而无法切换(3.2还会出现).第三,如果一套哨兵管理多套redis主从,并不是很好管理. 解决的方法有两个,一个是在哨兵前面加类似nginx的负载均衡来控制jedis访问哨兵地址,另一个就是在redis主从上加入高可用vip的操作来代替jedis直连哨兵,因为哨兵sentinel支持切换发生时接入脚本操作. 这篇文章说的就是加入高可用vip方式. 哨兵sentinel通信原理 在讲主题之前,我想想讲一下哨兵sentinel的原理. 通讯原理: 当一个完全没接入哨兵sentinel的redis主从里,第一个哨兵sentinel主动和redis主库通信,询问有没有其他的redis从库和哨兵sentinel连接信息.如果没有,这个哨兵sentinel就创建配置,等待同步其他哨兵信息. 然后,第二个哨兵连进redis主库

Redis 管道(Pipelining)、PUB/SUB

安稳与你 提交于 2020-08-19 22:59:04
http://redis.cn/topics/pipelining.html 是否可以这样理解: 如果是组织大量的、无依赖关系的命令,可以选择管道,当然也可以选择脚本。 如果命令之间有依赖关系,比如后续的命令需要处理先前命令的返回值,只能选择脚本。 Redis 提供了 PUB/SUB 订阅功能,实际我们在使用时,一定要注意,它提供的 不是一个可靠的 订阅系统 Redis 是不持久化 Publish 的消息的 当然,不能说 Redis Pub/Sub 毫无使用的场景,以下艿艿来列举几个: 在使用 Redis Sentinel 做高可用时,Jedis 通过 Redis Pub/Sub 功能,实现对 Redis 主节点的故障切换,刷新 Jedis 客户端的主节点的缓存。 如果出现 Redis Connection 订阅的异常断开,会重新 主动 去 Redis Sentinel 的最新主节点信息, 从而解决 Redis Pub/Sub 可能因为网络问题,丢失消息 Redis Sentinel 节点之间的部分信息同步,通过 Redis Pub/Sub 订阅发布。 在我们实现 Redis 分布式锁时,如果获取不到锁,可以通过 Redis 的 Pub/Sub 订阅锁释放消息,从而实现其它获得不到锁的线程,快速抢占锁。 当然,Redis Client 释放锁时,需要 PUBLISH

【Redis学习专题】- Redis主从+哨兵集群部署

空扰寡人 提交于 2020-08-19 01:00:24
集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.100.8.23 redis-sentinel01 10.100.8.24 redis-sentinel02 10.100.8.25 redis-sentinel03 10.100.8.26 主从部署 全部节点执行: useradd -M -s /sbin/nologin redis; mkdir /srv/{app,data,logs}/redis; cd /srv/tmp/ wget http://download.redis.io/releases/redis-4.0.14.tar.gz tar -zxf redis-4.0.14.tar.gz cd redis-4.0.14 make MALLOC=libc make PREFIX=/srv/app/redis install mkdir /srv/app/redis/conf; chown -Rf redis:redis /srv/{app,data,logs}/redis; 修改redis-master配置文件 /srv/app/redis/conf/redis.conf ,这里我们开启了AOF持久化,并启用了密码: bind