Redis集群原理
2021-09-30 09:20:24 0 举报
Redis集群原理
作者其他创作
大纲/内容
LVS
redis集成布隆
jedis
redis
监控
同步阻塞
redis2
redis备
无状态!
时点性无关
2
业务
client02
布隆过滤器 设置多大,占用多大空间设置2的40次方长度的二进制向量,长度1.0995116e+12一个字节=8位, 1.0995116e+12 / 8 = 137438953472(字节) 所以占用130T的空间100亿长度的二进制向量(1.2GB大小) 可以对去重后为1亿的数据进行,准确率高
解决数据倾斜问题
有可能取到不一致的数据强调:强一致性
clientservice
逻辑:kemata一致性哈希没有取模data,node
0~2^32
击穿,一个key过期,迎来高并发雪崩,大量key过期,迎来高并发穿透,查询业务中没有的数据。
sentinel
网络IO
client
redis支付
API
从业务接收查询的是你系统根本不存在的数据
单机、单节点、单实例1,单点故障2,容量有限3,压力
client04
主从复制配置
redis订单业务
client01
零点必须更新如:银行利率调整
击穿,穿透,雪崩,分布式锁,API (jedis,luttce,springboot:low/high level)
击穿
数据可以分类,交集不多
关注代理成性能
redis的连接成本很高对server端造成的
1:client
proxy
这个是物理的
redis用户0-100
多线程一个线程取DB一个线程监控是否取回来。更新锁时间
redis02
数据分治聚合操作很难实现事务
环上的点是虚拟的
2-3:client
client03
算法bitmap ->redis无状态
优点:你加节点,的确可以分担其他节点的压力,不会造成全局洗牌缺点:新增节点造成一小部分数据不能命中1,问题,击穿,压到mysql2,方案:没去取离我最近的2个物理节点更倾向于 作为缓存,而不是数据库用!!!!
redis1
配置文件redis源码目录
分布式锁:redis
主从复制模式
sharding分片
穿透
hash%10
3,只有获得锁的去访问DB
2-1:client
问题:1,如果第一个人挂了?
分区容忍性
set k1 a
RDB
强依赖击穿方案,设置setnx锁,让第一个人去DB取数据
LRULFU
布隆过滤器
hash
DB
弊端:3个模式不能做数据库用预分区
对 主 做HA高可用自动的故障转移:代替人
X
befor:肯定发生了高并发
是否同步完才可以查询数据,yes:可以,no:同步完才可以查replica-serve-stale-data yes从机是否只支持查询,还是可以写入replica-read-only yesrdb是先落磁盘在走网路io传递,还是直接网路发送RDB,yes:走网络,no:走磁盘repl-diskless-sync no#增量复制 redis中的队列的大小repl-backlog-size 1mb 如果开启下面的会导致 异步向同步靠拢,也就是要强一致性 (一般是注释掉的)min-replicas-to-write 3min-replicas-max-lag 10
异步
主读写自己又是一个:单点
redis用户200-300
推导:1个,统计不准确,不够势力范围问题:网络分区脑裂!2个 在3个节点成功解决脑裂问题3个 在4个节点成功解决脑裂问题3个 在5个节点成功解决脑裂问题n/2+1 过半!使用奇数台!
虚拟节点
keepalived
数据没办法划分拆解
主从复制
node02
kafka可靠,集群响应速度够快
DBMySQL
最终数据会一致
逻辑:业务拆分
redis-sentienl
有一些不一样的地方的
业务层加判断零点延时。。。加上随机sleep延时几秒,让流量变少
如果记录的offset在从机redis挂掉的时候,主redis的队列替换没了,那么就会触发全量备份
offset
强一致性破坏可用性
redis01
redis单机单进程缓存数据库
并发有了:阻止并发到达DBredis又没有keyredis是单进程单实例setnx() -> 锁 1,get key 发现没有2,setnx 设置锁3-1,第一个获取到锁的,去 DB取数据3-2,没有获得锁的,sleep -> 等待后在执行第一步
磁盘IO
2-2:client
大量的key同时失效间接造成大量的访问到达DB
无论企业后面技术多么复杂对于客户端,是透明的
3
逻辑:randomlpush
弊端:取模的数必须固定%3%4%10影响分布式下的扩展性
clientget k1
读
一个key过期了,正好高并发访问这个接口,导致大量并发到达DB,直接击穿了缓存。
nginx
2,setnx 没有就创建
rdb
KEY的过期造成并发访问数据库
datakey
port 26379sentinel monitor mymaster 127.0.0.1 6381 2
写
算法:hash+取模modula
Z
k1 -> (4)redis3
都给出OK强一致性
可以设置锁的过期时间
击穿和雪崩 实质都是缓存穿透。击穿和雪崩 是穿透的特殊表现形式。
Sentinel(哨兵)模式
redis缓存key 过期时间LRULFU
1,null
通过AKF一变多数据一致性!!!!所有节点阻塞直到数据全部一致*,同步方式阻塞方式强一致性!破坏可用性!反问自己:为什么一变多,解决可用性*,通过异步方式1,容忍数据丢失一部分
代理层:逻辑实现!modularandomkemata
规划一个环形哈希环
RDBAOF
redismaster
雪崩
redis缓存
jedislettucespring.iospring data redis
集群方式
2-2:clientrpop
问题:布隆数据不能删除解决:布谷鸟空key
随机过期时间
pool连接池
队列
Cluster 集群模式
消息队列ooxx:topic&partitionkafka
node03
redisepoll
只有redis作为缓存的时候才会发生击穿、穿透、雪崩
通过发布订阅发现其他哨兵
twpredixyclustercodis
弱一致性丢失数据
hashcrc16crc32fnvmd5[映射]算法
由一个技术、程序实现只要是一个程序就会有单点故障的问题一变多的集群
redis-server --sentinel
AKFX:全量,镜像Y:业务,功能Z:优先级,逻辑再拆分,或者按区域拆分让redis里的数据足够小,提高性能
你自己实现分布式协调很麻烦
redis3
人是怎么监控的
hash tag{oo}k1{oo}k2
主备
1
是否可以远程访问设置为no是可以远程
直接通过网络发送RDB
client包含
问题:2,没挂,但是,锁超时了。。。
node01
VIP
redis用户100-200
1,setnx2,过期时间3,多线程(守护线程)延长过期redisson zookeeper 做分布式锁!
Y
需要人工维护主的故障问题
用户client
ooxxlist
0 条评论
下一页