《蒋德钧的 Redis 集训班》学习笔记 Day two

457 阅读3分钟

Redis高可用性要求

Redis的高可用性是必不可少的,数据库的数据不能轻易弄丢,那么Redis的高可用性又包含哪些内容呢?答案:包含数据可用性和实例可用性

1.数据可用性

  • 实例异常退出时,数据不丢失

  • 持久化保存数据方法

    • 内存快照:RDB
    • 日志:AOF

    思考:是否足够保证数据可用?数据不丢失 != 时刻可用的;每一个键值对是否都能持久化?

  • 数据可用性如何保证?需要掌握的知识点,如下图所示:

image.png

  • 内存快照(Redis DB)是怎么回事?
    • 存的数据是:时刻T时的内存数据
    • 怎么存数据的?用命令bgsave,使用rdb文件保存内存镜像数据
    • 怎么用快照进行恢复,步骤如下:
      • 将rdb文件copy到Redis数据目录
      • 启动redis-server
  • 日志记录(Append Only File),
    • 存的数据是:实例收到的所有写操作
    • 怎么存数据的?步骤如下:
      • 使用aof文件通过追加的方式记录写操作
      • 三种配置决定落盘时机

2.实例可用性

  • 一个实例退出时,还有其他实例能提供服务

  • 主从集群

    • 主从哨兵
    • 哨兵机制+故障切换
  • 思考:

    • 主从集群是否为完美方案?
    • 主从数据能保证一致吗?
    • 故障切换会失败吗?
  • 实例可用性如何保证?需要掌握的知识点,如下图所示:

image.png

  • 主从复制:通过增加冗余从库,提高从库可用性,并不提供强一致性的保证
    • 主从库间的第一次复制,
      • 主库通过全量复制把RDB发送给从库
      • 全量复制完成后,将复制阶段新写操作发送给从库
      • 主库可以读写,从库只读
    • 若主从库间网络断连
      • 断开很久了,因为积压缓冲区是环形的,会覆盖数据。从库要增量复制了,跟上面的步骤一样
      • 时间不长,从库复制偏移量仍然在复制积压缓冲区。从库再次连接后,执行增量复制
  • 哨兵机制:通过哨兵监控主库心跳,实现主库故障判断和自动切换。热备份
    • 哨兵监控主从库心跳
    • 主观下线:单个哨兵自行判断
    • 客观下线:超过quorum个哨兵判断为主观下线,即一个哨兵会询问其他哨兵你有没有发现主库下线了
  • 主客观下线:误判,漏判,心跳:磁盘和网络心跳结合使用
  • 故障切换:实质就是分布式Raft协议,Paxos分布式共识的问题
    • 通过哨兵机制进行主从切换
    • 哨兵Leader选举,收到谁的先就投给谁,刚开始主观发现下线,发起投票选举的时候,会给自己投一票
  • 哨兵Leader如何执行主从切换?
    • 选主
      • 过滤掉网络状况不好的从库
      • 剩余从库打分:从库优先级>从库复制进度>从库ID号
    • 通知客户端/其他从库主库已切换新主库

面试问题:一亿个ID该用什么类型保存?

1.使用string类型保存

2. 使用hash类型保存

哪个更好呢?下一个博客我会揭晓。