Redis-集群
28.你了解Redis集群吗?
Redis集群
就相当于备份
,当一个服务器宕机之后,其它的服务器可以继续使用。单节点的Redis并发能力是有限的,要想进一步提高Redis的并发能力就要搭建集群,实现读写分离
,主节点负责写操作,从节点负责读操作。在Redis中有三种集群方式,分别是主从同步
、哨兵模式
和分片集群
。
29.主从同步(复制)的流程是什么?
主从同步主要分为全量同步
和增量同步
:
- 全量同步发生在
初始化阶段
,从节点会主动向主节点发送同步请求,主节点收到请求之后会生成一份当前数据的快照
,发送给从节点。从节点收到快照文件进行加载,完成全量复制。需要注意的是,主节点在生成快照文件的时候,会将接收到的命令记录到repl-baklog
日志中,然后将日志文件发送给从节点执行。 - 增量复制发生在
master节点变更数据
的时候,它会把变化的增量数据同步给从节点,增量复制是通过维护offerset
偏移量来实现的。
30.哨兵模式是什么?
主从复制有一个缺点,不能保证redis的高可用,主节点宕机后就丧失了写数据的能力。为了保证高可用性,reids提供了哨兵模式,它可以实现主节点的自动故障恢复
。哨兵会监听主从节点的状态,当master节点发生故障的时候,会自动从剩下的slave节点中一个新的master。
-
Sentinel判断master节点发生故障有两种情况,第一种是
主观下线
,也就是某一个Sentinel检测到master节点发生了故障。第二就是客观下线
,当一般以上的Sentinel检测到master发生了故障。如果出现客观下线,就需要进行故障转移。 -
Sentinel中有一个
Leader
负责故障转移,Leader是通过共识算法Raft
来实现的,共识算法就是让分布式系统中的节点就某个问题达到共识。 -
主节点的选举规则主要通过三个维度,分别是
从节点优先级
、复制进度
和runid
。runid是40字节的随机字符串,选择最小的做为主节点。
31.分片集群过程是什么?
主从复制和哨兵模式这两种方案本质都是通过增加slave数量提高Redis服务的整体可用性,都不支持横向扩展。Redis Cluster
对于横向扩展
非常友好,只需要增加Redis节点到集群中即可。Redis Cluster就是部署多台Redis主节点,这些节点之间平等没有主从之说,同时对外提供读/写
服务。
- Redis Cluster实现了Redis的
分布式存储
,每个节点存储不同的数据,实现数据的分片功能。 - 在Redis Cluster里面引入了
Slot槽
来实现数据分片
,Slot的整体取值范围是0-16383
。每个节点会分配一个slot区间,当我们存取key的时候,redis会根据key计算得到一个slot值,找到对应的节点进行数据的读写。 - Redis Cluster引入了
主从复制
的模式,一个master节点对应一个或者多个slave节点。当master节点出现故障的时候,会自动从slave节点选举一个新的master继续提供服务。 - Redis Cluster虽然解决了
在线扩容
的问题和故障转移
的能力,但是实现起来太复杂,而且slave只是一个冷备节点,不提供分担读写的压力。
32.你知道Redis的哪些使用规范吗?
- 使用
连接池
的时候,避免频繁创建和关闭客户端连接。 - 尽量不使用
Redis事务
,可以使用Lua脚本代替。 - 设置key的
过期时间
,避免Redis中存放太多不经常被访问的key。