暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis缓存集群方案及面试问题

元素周期表A 2021-06-28
1743

1. 主从
解决读写分离的问题。分为主库 master、从库 slave。一般主库可以写数据,从库只读自动同步主库更新的数据。集群情况下,有节点宕机会导致请求不可用;主机宕机可能会导致数据不一致;从机重启同步数据需要考虑主机的 io 压力。生产环境建议使用哨兵和cluster方法

2. 哨兵
Redis Sentinel,哨兵机制,解决主从节点高可用的问题。监控主从服务器运行状态;检测到 master 宕机时,会发布消息进行选举,自动将 slave 提升为 master


总结下哨兵组件的主要功能:
    集群监控:负责监控 Redis master 和 slave 进程是否正常工作。
   消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
    故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
    配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。

3. Cluster
Redis Cluster,分布式解决方案,解决单点故障与扩展性以及哨兵机制中每台 Redis 服务器都存储相同的数据浪费内存的问题。实现了 Redis 的分布式存储,也就是每台 Redis 节点上存储不同的内容

redis哈希槽:redis 集群没有使用一致性 hash,而是引入了哈希槽的概念。

redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 算法计算的结果,对 16384 取模后放到对应的编号在 0-16383 之间的哈希槽,集群的每个节点负责一部分哈希槽


========================================

1.Redis 集群会有写操作丢失吗?

  • 过期 key 被清理

  • 最大内存不足,导致 Redis 自动清理部分 key 以节省空间

  • 主库故障后自动重启,从库自动同步

  • 单独的主备方案,网络不稳定触发哨兵的自动切换主从节点,切换期间会有数据丢失



2.Redis集群之间是如何复制?

2.8 版以前,Redis 通过同步(sync)和指令传播(command propagate)两个操作完成同步
    同步(sync):将从节点的数据库状态更新至与主节点的数据库状态一致
    指令传播(command propagate):主节点数据被修改,会主动向从节点发送执行的写指令,从节点执行之后,两个节点数据状态又保持一致

2.8 版开始新增 PSYNC 指令,PSYNC 具有两种模式:
    完整重同步(full resynchronization),与 SYNC 过程基本一致
    部分重同步(partial resynchronization),借助复制偏移量、复制积压缓冲区、服务器运行 ID ,完成主从节点断开连接后,从节点重连主节点后,条件允许,主节点将连接断开期间执行的写指令发送给从节点,从节点接收并执行写指令,将数据库更新至主节点当前状态


文章转载自元素周期表A,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论