Redis
0、参考文章
- https://www.cnblogs.com/albert32/p/13404294.html 主从同步
- https://www.cnblogs.com/Eugene-Jin/p/10819601.html 哨兵机制
1、Redis持久化方式
- AOF:将内存中的数据以快照的形式写入磁盘,实际过程中是fork一个子进程来写的,采用的是 copy on write机制
- 优点:恢复数据速度快, 缺点:时点和时点之间的数据会丢
- RDB:以文本日志的形式记录Redis处理的每一个写入、更新或者删除操作,可以设置成每秒落一次盘或者每次改动都落盘或者永不
- 优点:丢失数据少, 缺点:相对于RDB比较慢,体量大
- rewrite优化:先RDB, RDB的同时,记录aof日志,然后再aof一把(可以通过设置aof文件大小、和相对于上一次优化后文件大小的比例来控制优化的频率)
- 当两个都开启的时候,当redis重启的时候,如果AOF文件和RDB文件都有的情况下,redis会优先加载aof文件(aof文件中由于rewrite优化,里面可能也会存储着RDB的数据)
2、Redis主从同步机制
- 全量同步:从机刚起来的时候进行一次全量的同步
- 从服务器连接主服务器,发送SYNC命令
- 主服务器收到命令后,开始BGSAVE生成RDB文件并使用缓冲区记录此后执行的所有写命令
- 主服务器执行完BGSAVE后将所有的RDB文件发送给从机,此时缓冲区依然在记录这期间的写命令
- 从服务器收到快照后丢弃旧的,载入新的快照数据
- 主向从发送缓冲区中的命令
- 从完成快照载入后,开始接收命令,并执行命令完成数据同步
- 增量同步:后续的同步都是增量同步
- slave正常工作后,主服务器执行的每一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的命令
- 主从复制的时候对于 主 和从都是非阻塞的
3、Redis常见数据结构及底层实现
4、Redis的哨兵机制
- 主观宕机:一个哨兵认为master宕机了,只是主观宕机
- 客观宕机:大于等于投票数量的哨兵认为master宕机了,则是客观宕机
- 哨兵对节点的宕机投票实现:主要是通过redis的pub/sub系统实现的,每个哨兵都会往__sentinel__:hello这个channel里面发送消息,同时也会监听
- 3个任务:
- 每个哨兵节点每10秒会向主节点和从节点发送info命令获取最新拓扑结构图
- 每个哨兵节点每隔2秒会向redis数据节点的指定频道上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息
- 每隔1秒每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测
- 选举主节点的时候需要参考的条件:
- slave和master断开连接的时长
- slave的优先级
- 复制offset:同步的数据的多少
- run id
Kafka
1、kafka持久化方式,以及为什么这么快
- 顺序IO写入,比随机IO快
- mmap:内存映射技术持久化
- sendfile: 减少从内核空间到用户空间以及用户空间到内核空间的数据的拷贝,使用sendfile将数据从内核读缓冲区直接到内核的socket缓冲区
2、kafka主从同步机制
- 生产者写入消息,Leader更新LEO
- follower定时从leader中获取数据,获取完成后更新自己的LEO
- follower同步速度是不一样的,有的快有的慢,以最小的LEO作为HW (HW的意义指Consumer可见数据的最大偏移量,重新选Leader的时候也会给所有人截取到HW)
- 所有follower都跟上了leader,leader会再次更新HW
3、生产者等待ACK的级别
- 0:produce 只发送一次数据,不等待ACK
- 1:producer等待broker的ack, partition的leader落盘后就返回ack,可能丢数据
- -1:所有ISR中的follower全部落盘后返回ack, 极限情况可能丢数据,ISR中只有一个leader则可能丢失数据,但更多是重复数据
4、小知识点
- 存储的时候会有2个文件:index文件,记录消息的偏移量位置;log文件:消息数据
- 参考文章:https://www.bilibili.com/video/BV1a4411B7V9?p=14&spm_id_from=pageDriver
MySql
1、MySql持久化方式
- redolog来实现持久化的
2、MySql的主从同步
- master服务器将数据的改变记录在二进制文件中BinaryLog
- 从机定期探测master的BinaryLog是否发生改变
- 当探测到变化后开始一个I/OThread请求master二进制事件
- master 开始一个dump线程传输binaryLog文件
- 从机收到binaryLog后放到replay-log中,并开启一个SQL线程回放日志完成数据同步
3、redolog、undolog、binarylog的区别
- 参考:https://blog.youkuaiyun.com/u010002184/article/details/88526708
https://www.cnblogs.com/teach/p/14730608.html - binarylog是服务层的日志, undolog和binarylog是存储引擎层的东西