文章插图
全量复制
- master 执行 bgsave ,在本地生成一份 rdb 快照文件 。
- master node 将 rdb 快照文件发送给 slave node,如果 rdb 复制时间超过 60秒(repl-timeout),那么 slave node 就会认为复制失败,可以适当调大这个参数(对于千兆网卡的机器,一般每秒传输 100MB,6G 文件,很可能超过 60s)
- master node 在生成 rdb 时,会将所有新的写命令缓存在内存中,在 slave node 保存了 rdb 之后,再将新的写命令复制给 slave node 。
- 如果在复制期间,内存缓冲区持续消耗超过 64MB,或者一次性超过 256MB,那么停止复制,复制失败 。
client-output-buffer-limit slave 256MB 64MB 60
- slave node 接收到 rdb 之后,清空自己的旧数据,然后重新加载 rdb 到自己的内存中,同时基于旧的数据版本对外提供服务 。
- 如果 slave node 开启了 AOF,那么会立即执行 BGREWRITEAOF,重写 AOF 。
- 如果全量复制过程中,master-slave 网络连接断掉,那么 slave 重新连接 master 时,会触发增量复制 。
- master 直接从自己的 backlog 中获取部分丢失的数据,发送给 slave node,默认 backlog 就是 1MB 。
- master 就是根据 slave 发送的 psync 中的 offset 来从 backlog 中获取数据的 。
master 默认每隔 10秒 发送一次 heartbeat,slave node 每隔 1秒 发送一个 heartbeat 。
异步复制master 每次接收到写命令之后,先在内部写入数据,然后异步发送给 slave node 。
redis 如何才能做到高可用如果系统在 365 天内,有 99.99% 的时间,都是可以哗哗对外提供服务的,那么就说系统是高可用的 。
一个 slave 挂掉了,是不会影响可用性的,还有其它的 slave 在提供相同数据下的相同的对外的查询服务 。
但是,如果 master node 死掉了,会怎么样?没法写数据了,写缓存的时候,全部失效了 。slave node 还有什么用呢,没有 master 给它们复制数据了,系统相当于不可用了 。
redis 的高可用架构,叫做 failover 故障转移,也可以叫做主备切换 。
master node 在故障时,自动检测,并且将某个 slave node 自动切换为 master node 的过程,叫做主备切换 。这个过程,实现了 redis 的主从架构下的高可用 。
【分布式系统之Redis主从架构】
推荐阅读
- 系统内置工具,macOS如何屏幕共享?
- 小程序开发之自动售货机解决方案
- 脸型配发型
- 王老吉,广药与加多宝谅茶之争何时休
- 怎样正确运动减肥呢?
- 减肥运动什么时候最有效呢?
- 有机绿茶之乡,竹溪县迈向茶叶强县侧记
- 聚焦同安军营村,百年茶村遭遇低价之殇
- 关于邻居友好的初中作文 人与人之间的关爱作文
- 中国茶界纵论茶天下的破局之路