11、哨兵机制作用?
(1)监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
(2)自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障
转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复
制新的主节点。
(3)配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前
Redis 服务的主节点地址。
(4)通知(Notification):哨兵可以将故障转移的结果发送给客户端。
12、哨兵机制节点组成?
它由两部分组成,哨兵节点和数据节点:(1)哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的 redis 节点,不
存储数据。
(2)数据节点:主节点和从节点都是数据节点。
13、哨兵机制原理?
(1)定时任务:每个哨兵节点维护了 3 个定时任务。定时任务的功能分别如下:通过向主
从节点发送info 命令获取最新的主从结构;通过发布订阅功能获取其他哨兵节点的信息;
通过向其他节点发送ping 命令进行心跳检测,判断是否下线。
(2)主观下线:在心跳检测的定时任务中,如果其他节点超过一定时间没有回复,哨兵节
点就会将其进行主观下线。顾名思义,主观下线的意思是一个哨兵节点“主观地”判断下线;
与主观下线相对应的是客观下线。
(3 ) 客 观 下 线 : 哨 兵 节 点 在 对 主 节 点 进 行 主 观 下 线 后 , 会 通 过 sentinel
is-master-down-by-addr 命令询问其他哨兵节点该主节点的状态;如果判断主节点下线的
哨兵数量达到一定数值,则对该主节点进行客观下线。
(4)选举领导者哨兵节点:当主节点被判断客观下线以后,各个哨兵节点会进行协商,选
举出一个领导者哨兵节点,并由该领导者节点对其进行故障转移操作。监视该主节点的所有
哨兵都有可能被选为领导者,选举使用的算法是Raft 算法;Raft 算法的基本思路是先到先
得:即在一轮选举中,哨兵A 向 B 发送成为领导者的申请,如果 B 没有同意过其他哨兵,
则会同意A 成为领导者。选举的具体过程这里不做详细描述,一般来说,哨兵选择的过程
很快,谁先完成客观下线,一般就能成为领导者。
(5)故障转移:选举出的领导者哨兵,开始进行故障转移操作,该操作大体可以分为 3 个
步骤:
①在从节点中选择新的主节点:选择的原则是,首先过滤掉不健康的从节点;然后选择优先
级最高的从节点(由 slave-priority 指定);如果优先级无法区分,则选择复制偏移量最大的从
节点;如果仍无法区分,则选择runid 最小的从节点。
②更新主从状态:通过 slaveof no one 命令,让选出来的从节点成为主节点;并通过 slaveof
命令让其他节点成为其从节点。
③将已经下线的主节点(即 6379)设置为新的主节点的从节点,当 6379 重新上线后,它会成
为新的主节点的从节点。
14、哨兵机制缺点
写操作无法负载均衡;存储能力受到单机的限制。(Redis 集群解决了该情况)
15、Zookeeper 锁是如何实现的?
一般使用Curator 进行使用 Zookeeper 锁,例如有两个客户端 A 和客户端 B,首先 A 先在锁
节点下创建例如01 子节点的锁,然后再获取节点信息,发现自己的 01 节点排名第一,那
么就获得锁。
客户端B 也需要获取锁,现在锁节点下创建例如 02 的子节点,然后再获取锁节点信息,发
现锁节点信息为[01,02],并不排第一,因此获取不到锁,客户端 B 会在他的顺序节点的上一
个顺序节点加一个监听器。
当客户端A 使用完锁,删除 01 节点,客户端 B 获取到 01 删除的监听,然后发现自己的 02
节点排名第一,那么就获取到锁。16、分布式缓存读写不一致问题
17、Java 线程你是怎么使用的
18、数据库是如何调优的?
(1)数据表加合适的索引
(2)针对执行计划进行优化
(3)根据慢 sql 进行优化
(4)加缓存
(5)参数调优
19、git rebase 命令发生了什么?
rebase 命令可以帮我们把整个提交历史变成干净清晰的一条线。
20、手撕代码。牛客题霸上的原题,可以去看看:NC13 二叉树的最大深度
全部评论
(0) 回帖