当前位置:网站首页>【Redis】主从复制的核心原理
【Redis】主从复制的核心原理
2022-08-09 02:30:00 【超级码里喵】
Redis 主从架构
单机的 redis,能够承载的 QPS 大概就在上万到几万不等。对于缓存来说,一般都是用来支撑读高并发的。因此架构做成主从(master-slave)架构,一主多从,主负责写,并且将数据复制到其它的slave 节点,从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现水平扩容,支撑读高并发。redis replication -> 主从架构 -> 读写分离 -> 水平扩容支撑读高并发
redis replication 的核心机制
- redis 采用异步方式复制数据到 slave 节点,不过 redis2.8 开始,slave node 会周期性地确认自己每次复制的数据量;
- 一个 master node 是可以配置多个 slave node 的;
- slave node 也可以连接其他的 slave node;
- slave node 做复制的时候,不会 block master node 的正常工作;
- slave node 在做复制的时候,也不会 block 对自己的查询操作,它会用旧的数据集来提供服务;但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了;
*slave node 主要用来进行横向扩容,做读写分离,扩容的 slave node 可以提高读的吞吐量。
注意:
- 如果采用了主从架构,那么建议必须开启 master node 的持久化,不建议用 slave node 作为master node 的数据热备,因为那样的话,如果你关掉 master 的持久化,可能在 master 宕机重启的时候数据是空的,然后可能一经过复制, slave node 的数据也丢了。
- 另外,master 的各种备份方案,也需要做。万一本地的所有文件丢失了,从备份中挑选一份 rdb去恢复 master,这样才能确保启动的时候,是有数据的,即使采用了后续讲解的高可用机制,slave node 可以自动接管 master node,但也可能 sentinel 还没检测到 master failure,master node 就自动重启了,还是可能导致上面所有的 slave node 数据被清空。
redis 主从复制的核心原理
- 当启动一个 slave node 的时候,它会发送一个 PSYNC 命令给 master node。
- 如果这是 slave node 初次连接到 master node,那么会触发一次 full resynchronization 全量复制。此时 master 会启动一个后台线程,开始生成一份 RDB 快照文件,
- 同时还会将从客户端 client 新收到的所有写命令缓存在内存中。 RDB 文件生成完毕后, master会将这个 RDB 发送给 slave,slave 会先写入本地磁盘,然后再从本地磁盘加载到内存中,
- 接着 master 会将内存中缓存的写命令发送到 slave,slave 也会同步这些数据。
- slave node 如果跟 master node 有网络故障,断开了连接,会自动重连,连接之后 master node仅会复制给 slave 部分缺少的数据。
过程原理
- 当从库和主库建立MS关系后,会向主数据库发送SYNC命令
- 主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来
- 当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis
- 从Redis接收到后,会载入快照文件并且执行收到的缓存的命令
- 之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致
缺点
- 所有的slave节点数据的复制和同步都由master节点来处理,会照成master节点压力太大,使用主从从结构来解决
边栏推荐
猜你喜欢
MT4/MQL4 Getting Started to Mastering EA Tutorial Lesson 1 - MQL Language Common Functions (1) OrderSend() Function
力扣刷题记录2.1-----27. 移除元素
最近看到很多人想自学或者报班但是不清楚如何选择,我今天就和大家说说
危化企业双预防机制数字化建设工作要求
为什么应用程序依赖关系映射对于云迁移至关重要
【剑指offer65】不适用加减乘除做加法
MT4 / MQ4L entry to the master of EA tutorial lesson two (2) - - MQL language commonly used function account information commonly used functions
Flume (四) --------- Flume 企业开发案例
使网络安全威胁风险更高和成本更高的五个趋势
力扣刷题记录7.1-----707. 设计链表
随机推荐
Simple example of .reduce()
C#计算SHA1加密和base64编码
How to install yii2
2020.12.4日志
力扣刷题记录5.1-----59. 螺旋矩阵 II
Force buckled brush problem record 7.1 -- -- -- -- -- 707. The design list
DataGridView在多线程中出现大红叉
如何保护智能家居避免黑客攻击
项目经理VS产品经理,二者到底有何不同?
数字 05 verilog&vivado2018.2零散笔记
Yii2开启 Schema 缓存
接口自动化测试-接口封装思想
OJ:L2-012 关于堆的判断
What is the difference between a project manager and a product manager?
My thoughts on software development
Maya engine modeling
最新工业界推荐系统数据集-召回排序模型原理、结构及代码实战整理分享
A40i gxl3680 ts_print报错:tslib: Selected device is not a touchscreen (must support ABS and KEY event
[LeetCode84双周赛] [模拟] 6174. 任务调度器 II,[贪心&数学] 6144. 将数组排序的最少替换次数
金融行业软件测试面试题(含答案)| 入门指南