前言:面试中经常会遇到的问题,小结一下
主从复制的好处
1 避免单点故障,redis挂掉以后,redis插槽有空档,导致redis不可用
2 构建读写分离架构,满足读写分离的场景。(数据库一般80%都是读请求,20%的写请求)
redis主从同步的过程
1 当从库和主库建立主从关系后,从库会向主库发送PSYNC命令
2 主库接受到PSYNC命令后,开始在后台保存快照,并缓存些命令到临时缓冲区中。
3 当RDB快照完成后,redis会将RDB文件和这段时间缓存的写命令通过网络IO发送给从机器
4 redis 接收到后会载入快照文件,并且执行收到的写命令。
5 之后每当主redis接收到写命令之后就将写命令发送给从redis,从redis执行写命令,保持主从的一致性。
注意:数据是持久化到磁盘,从库redis加载数据,完成数据同步,中间涉及到磁盘IO
常见问题: 服务宕机处理手段
如果是从库redis 宕机,直接重启,会自动加入主从架构,并自动通过增量复制完成数据同步
如果是主库宕机:选择一个从库断掉主从关系,并将自身提升为主库提供服务 : SLAVEOF NO ONE。重启挂掉的服务,通过 SLAVEOF ip port 将其设置为其他从库的从库,保持主从架构。
哨兵机制
在上边的逻辑中,主服务宕机,需要运维人手动重启。redis提供哨兵机制,可以自动实现重启。
哨兵的主要作用:监控redis服务是否正常运行,如果主reids宕机,在从库中选取 leader当新的主库,如果是从库宕机,直接重启从库机器,并且 slave of master
单个哨兵的监控:只监控 master ,自动发现master 下的 slave
多个哨兵的监控:在监控master的同时,还会互相监督;
redis集群
redis集群主要是用来解决redis的高并发问题的,redis集群将16384个插槽分配到集群中的机器中,当有请求来的时候,首先会根据请求的key值计算hash值,再看映射到哪台集群上,集群上的每台机器都保存着插槽分配信息和集群中有效机器的ip port.
集群未解决的问题
1、 集群中的每个节点都会定期的向其它节点发送PING命令,并且通过有没有收到回复判断目标节点是否下线;
2、 集群中每一秒就会随机选择5个节点,然后选择其中最久没有响应的节点放PING命令;
3、 如果一定时间内目标节点都没有响应,那么该节点就认为目标节点疑似下线;
4、 当集群中的节点超过半数认为该目标节点疑似下线,那么该节点就会被标记为下线(fail);
5、 当集群中的任何一个节点下线,就会导致插槽区有空档,不完整,那么该集群将不可用;
6、 如何解决上述问题?
a) 在Redis集群中可以使用主从模式实现某一个节点的高可用
b) 当该节点(master)宕机后,集群会将该节点的从数据库(slave)转变为(master)继续完成集群服务;
集群下的主从复制”,3台master搭建集群,分别为每一台master 做一个主从架构。这应该就是集群和主从同时保证高并发和高可用的架构
网友评论