02REDIS集群知识点
2022-03-16 14:28:35 0 举报
仅限学习
作者其他创作
大纲/内容
LVS
redis集成布隆
jedis
redis
监控
同步阻塞
redis2
无状态!
redis1-2
时点性无关
2
业务
z方向
client02
解决数据倾斜问题
如果主机把数据写入中间件后,中间件写入备机的过程中,客户端访问了备机,结果没有取到数据;其实这种方式也是一种弱一致性
clientservice
从rdb
逻辑:kemata一致性哈希没有取模data,node
0~2^32
sentinel
网络IO
不要因为技术而技术
client
redis1
API
从业务接收查询的是你系统根本不存在的数据
单机、单节点、单实例,存在的问题1,单点故障,挂掉后,恢复时间长,这段时间内服务不可用2,容量有限,内存有限3,压力,连接压力,I/O压力
客户端写入主机,主机给客户端返回ok,主机异步写入备机;保持了可用性,如果主机写入成功了, 也告诉客户端了,但是向备机写入的时候,失败了,导致备机丢失数据,弱一致性
client04
主从复制配置
redis3
client01
零点
面试常问:击穿,穿透,雪崩,分布式锁,API (jedis,luttce,springboot:low/high level)
击穿
数据可以分类,交集不多
关注代理成性能
redis的连接成本很高对server端造成的
1:client
proxy
这个是物理的
多线程一个线程取DB一个线程监控是否取回来。更新锁时间
redis02
客户端写入主机,主机写入备机,然后返回ok;同步阻塞,如果主机写入备机时超时,或者备机挂了,导致线程阻塞,破坏可用性;
数据分治聚合操作很难实现事务
环上的点是虚拟的
2-3:client
client03
算法bitmap ->redis无状态
优点:你加节点,的确可以分担其他节点的压力,不会造成全局洗牌缺点:新增节点造成一小部分数据不能命中1,问题,击穿,压到mysql2,方案:没去取离我最近的2个物理节点更倾向于 作为缓存,而不是数据库用!!!!
配置文件redis源码目录
redis1-1
分布式锁:redis
sharding分片
穿透
hash%10
3,只有获得锁的去访问DB
2-1:client
问题:1,如果第一个人挂了?
1.对主机数据进行全量备份,解决了单点故障2.可以主机增删改,备份做读取数据,分担主机压力
分区容忍性
set k1 a
RDB
强依赖击穿方案
LRULFU
布隆过滤器
hash
DB
x方向
弊端:3个模式不能做数据库用预分区
对 主 做HA高可用自动的故障转移:代替人
X
befor:肯定发生了高并发
replica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-backlog-size 1mb #增量复制min-replicas-to-write 3min-replicas-max-lag 10
异步
主读写自己又是一个:单点
在Y方向按业务拆分后,发现2号的容量也达到极限了,用户信息存不下了,我们可以在Z方向进行增加实例,也来存用户信息,比如1-2000的用户存到Y方向的2号,2000以后的用户存到Z方向的2号,按逻辑和优先级进行拆分
推导:1,统计不准确,不够势力范围问题:网络分区脑裂!2 在3个节点成功解决脑裂问题3 在4个节点成功解决脑力问题3 在5个节点成功解决脑力问题n/2+1 过半!使用奇数台!
虚拟节点
keepalived
数据没办法划分拆解
主从复制
node02
消息中间件可靠,集群响应速度够快
DBMySQL
最终数据会一致
逻辑:业务拆分
redis-sentienl
有一些不一样的地方的
业务层加判断零点延时。。。
offset
强一致性破坏可用性
redis01
redis单机单进程缓存数据库
并发有了:阻止并发到达DBredis又没有keyredis是单进程单实例setnx() -> 锁1,get key2,setnx3-1,ok,去 DB3-2,false,sleep -> 1
磁盘IO
2-2:client
大量的key同时失效间接造成大量的访问到达DB
无论企业后面技术多么复杂对于客户端,是透明的
3
逻辑:randomlpush
弊端:取模的数必须固定%3%4%10影响分布式下的扩展性
clientget k1
nginx
消息中间件,可靠,响应速度快,数据还能持久化,保证了数据不丢失,主机把数据写到中间件后,有中间件写入备机,强调数据最终一致性
2,setnx
主rdb
KEY的过期造成并发访问数据库
datakey
port 26379sentinel monitor mymaster 127.0.0.1 6381 2
算法:hash+取模modula
y方向
Z
k1 -> (4)redis3
都给出OK强一致性
可以设置锁的过期时间
redisZ2-2
redis缓存key 过期时间LRULFU
1,null
上面通过AKF实现了一边多,实现了高可用,那么怎么保证主机和备机(从机)的数据一致性了?
代理层:逻辑实现!modularandomkemata
规划一个环形哈希环
RDBAOF
redismaster
雪崩
redis缓存
集群方式
2-2:clientrpop
问题:不能删除布谷鸟空key
随机过期时间
pool连接池
队列
消息队列ooxx:topic&partitionkafka
node03
redisepoll
redis2-2
通过发布订阅发现其他哨兵
12G的数据按照业务存到3个实例中;对业务进行拆分,比如1号存订单,2号存用户信息,3号存商品,分担压力,扩充容量
twpredixyclustercodis
弱一致性丢失数据
hashcrc16crc32fnvmd5[映射]算法
redis2-1
由一个技术、程序实现只要是一个程序就会有单点故障的问题一变多的集群
redis-server --sentinel
AKFX:数据备份:全量,镜像Y:业务拆分,按业务存储,功能Z:优先级,逻辑再拆分
你自己实现分布式协调很麻烦
人是怎么监控的
hash tag{oo}k1{oo}k2
主备
1
redis从
直接通过网络发送RDB
client包含
问题:2,没挂,但是,锁超时了。。。
redisZ2-1
redis主
node01
磁盘io
repl-diskless-sync no, 关闭磁盘传输,直接网络发送rdb文件
VIP
redisZ2
1,setnx2,过期时间3,多线程(守护线程)延长过期redisson zookeeper 做分布式锁!
Y
需要人工维护主的故障问题
用户client
ooxxlist
收藏
收藏
0 条评论
下一页