Redis高可用性要求
Redis的高可用性是必不可少的,数据库的数据不能轻易弄丢,那么Redis的高可用性又包含哪些内容呢?答案:包含数据可用性和实例可用性
1.数据可用性
-
实例异常退出时,数据不丢失
-
持久化保存数据方法
- 内存快照:RDB
- 日志:AOF
思考:是否足够保证数据可用?数据不丢失 != 时刻可用的;每一个键值对是否都能持久化?
-
数据可用性如何保证?需要掌握的知识点,如下图所示:
- 内存快照(Redis DB)是怎么回事?
- 存的数据是:时刻T时的内存数据
- 怎么存数据的?用命令bgsave,使用rdb文件保存内存镜像数据
- 怎么用快照进行恢复,步骤如下:
- 将rdb文件copy到Redis数据目录
- 启动redis-server
- 日志记录(Append Only File),
- 存的数据是:实例收到的所有写操作
- 怎么存数据的?步骤如下:
- 使用aof文件通过追加的方式记录写操作
- 三种配置决定落盘时机
2.实例可用性
-
一个实例退出时,还有其他实例能提供服务
-
主从集群
- 主从哨兵
- 哨兵机制+故障切换
-
思考:
- 主从集群是否为完美方案?
- 主从数据能保证一致吗?
- 故障切换会失败吗?
-
实例可用性如何保证?需要掌握的知识点,如下图所示:
- 主从复制:通过增加冗余从库,提高从库可用性,并不提供强一致性的保证
- 主从库间的第一次复制,
- 主库通过全量复制把RDB发送给从库
- 全量复制完成后,将复制阶段新写操作发送给从库
- 主库可以读写,从库只读
- 若主从库间网络断连
- 断开很久了,因为积压缓冲区是环形的,会覆盖数据。从库要增量复制了,跟上面的步骤一样
- 时间不长,从库复制偏移量仍然在复制积压缓冲区。从库再次连接后,执行增量复制
- 主从库间的第一次复制,
- 哨兵机制:通过哨兵监控主库心跳,实现主库故障判断和自动切换。热备份
- 哨兵监控主从库心跳
- 主观下线:单个哨兵自行判断
- 客观下线:超过quorum个哨兵判断为主观下线,即一个哨兵会询问其他哨兵你有没有发现主库下线了
- 主客观下线:误判,漏判,心跳:磁盘和网络心跳结合使用
- 故障切换:实质就是分布式Raft协议,Paxos分布式共识的问题
- 通过哨兵机制进行主从切换
- 哨兵Leader选举,收到谁的先就投给谁,刚开始主观发现下线,发起投票选举的时候,会给自己投一票
- 哨兵Leader如何执行主从切换?
- 选主
- 过滤掉网络状况不好的从库
- 剩余从库打分:从库优先级>从库复制进度>从库ID号
- 通知客户端/其他从库主库已切换新主库
- 选主
面试问题:一亿个ID该用什么类型保存?
1.使用string类型保存
2. 使用hash类型保存
哪个更好呢?下一个博客我会揭晓。