Redis 面试题 021 - 030

021、什么是哨兵模式?

三个定时任务

  1. 每 10 秒每个 sentinel 对 master 和 slave 节点执行一次 info 命令,用于发现 slave 节点,确认主从关系。
  2. 每 2 秒每个 sentinel 通过 master 节点的频道交互对节点的看法和自身信息,类似于发布订阅,每个哨兵哨兵向 master 频道发送消息,也从其中消费消息,以实现哨兵之间的通信。
  3. 每 1 秒每个 sentienl 对其他 sentinel 和 redis 执行 ping 操作。

哨兵是一个独立的进程,它会监控所有 master 节点和 slave 节点,如果哨兵发现 master 节点宕机了,它会选择一个 slave 将其切换成 master,并通知其他 slave 节点。

但是一个哨兵进程进行监控的时候还是可能会出现问题,因此可以设置多个哨兵进程进行监控,不同哨兵之间也能彼此感知到,如果一个哨兵感知到 master 节点宕机了并不会立马做出反应,而是会先询问其他哨兵,这种情况被称为主观下线,如果有超过指定数量的哨兵节点都认为 master 节点宕机了,那么所有哨兵就会认为这个 master 节点真的宕机了,这称作客观下线,确认 master 节点客观下线就会进行领导者选举,也就是说从 sentinel 节点中选出一个进行故障转移,每一个认为master节点主观下线的sentienl都会向其他sentienl节点发送命令请求将它设置为领导者,收到命令sentienl如果还没有通过其他哨兵发送的命令,那么就同意该请求,否则就拒绝,当一个sentienl发现自己的票数已经超过sentienl集合的半数并且超过设定的法定人数,它将会称为领导者,可以进行故障转移,然后领导者就会从 slave 节点中选出一个作为合适的作为新的 master 节点,并通知其他 slave 节点,这样保证了高可用性。

022、什么是 Redis 集群?

Redis 使用 hash 分区。

节点分区:根据待存数据的 hash 值按照节点数取余进行分区,扩容时为了减少数据迁移量可以直接使用翻倍扩容。

一致性哈希分区:把所有 hash 值连在一起看作一个环,在环上均匀的添加缓存节点,数据计算哈希值后到环上,会顺时针去找下一个缓存节点,把数据存储到缓存节点。这样在扩容时只会影响到相邻两个节点之间的数据。但还是建议翻倍扩容,为了负载均衡。

虚拟槽分区:Redis Cluster 使用的方案,Redis Cluster 默认有 16384 个槽,会平局分给 Redis 的多个节点,然后通过 key 的 hash 计算出需要存储到哪个槽,然后它会找到对应的节点把数据存储到对应的槽中。

Redis Cluster 数据分区规则采用虚拟槽方式(16384个槽),每个节点负责一部分槽和相关的数据,实现数据和请求的负载均衡。

Redis Cluster 几个核心概念:节点、meet、指派槽、复制。

节点 A meet 节点 B 后,A和B就能相互通信,A 又meet了 C,那么A和c就能通信了,同时b和c也能通信了。

Redis Cluster 特性:主从复制、高可用。

集群伸缩 = 槽和数据在节点之间的移动。

新节点加入集群一般有两个作用,一是为它迁移槽和数据进行扩容,二是作为从节点负责故障转移。

集群数据倾斜:可能的原因有每个节点的槽分配不均,或者不同的槽对应的键值数量差异较大,或者包含bigkey(就是一个key对应的数据量比较大,比如一个list存了几百万条数据)。

集群请求倾斜:常见原因有热点key或者bigkey。

集群模式下从节点不接受任何读写请求,如果你对从节点读的话它会转移到对应的主节点。

023、

024、

025、

026、

027、

028、

029、

030、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值