> 文章列表 > redis——分布式

redis——分布式

redis——分布式

    • 持久化
      • RDB
      • AOF
    • 主从同步
      • 全量同步
      • 增量同步
    • 哨兵sentinel
        • 作用
        • 服务状态监控
        • 选举master
    • 分片集群
      • 作用
      • 散列插槽 hash slot
      • 集群伸缩
      • 故障转移
    • 多级缓存

持久化

RDB

redis备份文件(快照)

  • 可压缩,耗费cpu
  • 默认在服务停止时触发
  • 可以设置一定条件,条件触发,开启子进程备份
    fork主进程得到子进程,二者共享内存数据(子进程复制主进程的页表虚拟内存),然后备份,用新的RDB文件替换旧的
    子进程和主进程二者共享的页表,映射到同一位置的物理内存,此时子进程读数据,如果主进程修改数据会冲突。
    cpoy on write 技术:子进程备份时,将物理内存设置为只读,主进程写数据需要拷贝一份,在副本中修改,页表的映射关系也改为副本。极端情况下,需要复制全部的数据,则内存使用翻倍
  • 耗时长,两次RDB之间,如果宕机,数据有丢失风险

AOF

将redis全部命令存储。

  • 默认关闭
  • 先写到缓冲区中,再定时/立刻/操作系统决定从缓冲区写到文件中。
  • 整理命令,将之前的无效命令处理掉。根据文件大小触发,减少AOF文件大小
    redis——分布式

主从同步

  • 读写分离,读到从,写到主,高并发读
  • 可以开启无磁盘复制,(网络快的情况下)
  • redis单节点内存较小,RDB也会减小,减少磁盘/网络IO
  • 减少全量同步
  • 从节点过多时,可以主-从-从

全量同步

  • 第一次全量同步,生成RDB文件,发给从节点。之后将repl_baklog命令发给从节点
  • 从节点继承主节点的replid,offset记录从节点同步位置
    redis——分布式

增量同步

redis——分布式

  • repl_baklog文件大小一定,是一个环形缓冲区,如果从节点长期宕机未重启,致使repl_baklog覆盖掉原来的offset则无法增量更新。从节点要尽快恢复

哨兵sentinel

作用

  • 监控:监控redis主节点和从节点,是否正常工作
  • 自动故障恢复:sentinel本身也是一个集群,保证自身可用,出故障自己恢复
  • 通知:sentinel类似注册中心,redis发生改变时,将最新信息发给redis客户端

服务状态监控

心跳检测
主观下线:一段时间未响应
客观下线:一半以上(可变)的sentinel认为实例故障

选举master

  • 确认从节点正常存活:心跳检测未响应则排除
  • slave-priority比较,越小优先级越高,0不参与选举
  • offset越大则节点数据越新越完整
  • 节点id越小,优先级越高
  • 广播新的主节点信息,强制修改旧主节点信息,将其改为从节点

分片集群

多个master

作用

  • 海量数据存储
  • 高并发写

散列插槽 hash slot

将多个插槽(16384)分给多个master
key的有效部分({}中包含的部分)hash 计算插槽

集群伸缩

添加/删除节点,插槽重分配

故障转移

redis——分布式

多级缓存

各个环境添加缓存
redis——分布式
浏览器:静态资源
tomcat的性能不如redis,如果放在redis之前,限制了系统并发量
redis未命中的情况下,请求不会直接达到数据库,保护数据库
tomcat内部实现进程缓存(jvm进程缓存)