8、主从复制
8.1 复制原理
-
机制是什么?
-
master负责读写,slave负责读
-
配从不配主:一般对从节点进行配置
- 配置命令:slaveof 主节点IP 主节点端口,每次启动时都需要进行命令输入
- 在配置文件里面配置
-
常用的配置方式:
- info replication:查看主从信息
- 一主二仆:主从节点异常情况下的表现:
- 主节点异常时,所有从节点等待主节点的恢复;此时从节点一般不具有写功能,角色也保持不变
- 某个从节点异常时,重新上线后,如果不启动时配置属于哪个主节点,此时角色是主节点,不会复制原来的主节点的数据,需要重新通过命令配置主从关系。
- 薪火相传:形成一个master和slave的链
- 上一个slave可以是下一个slave的Master,slave同样可以接受其他slaves的连接和同步请求,那么该slave作为链条中的下一个的master,可以有效减轻master的写压力
- 中途变更转向,会清除之前的数据,重新建立拷贝最新的
- 反客为主:slaveof no one,改变当前的从节点属性,使当前数据库停止与其他数据的同步,转变成主数据库
-
复制原理:
- slave启动成功连接到master后会发送一个sync命令,用来同步数据
- master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
- 全量复制:slave服务在接受到主库数据库文件数据后,将其存盘并加载到内存中
- 增量复制:master继续将新的所有收集到的修改命令一次传给slave以完成同步。但是只要是重新连接master,一次完全同步将被自动执行
-
断点续传
- 如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始
- 主节点会在内存中常见一个backlog,主从节点都会保存一个replication offset、master id,osffset保存在backlog中,如果主从网络断掉,从节点会让主节点从上次的offset开始复制。
-
无磁盘化复制
- 主节点直接在内存中创建rdb文件,然后发送给从节点,不会在本地落地磁盘
# 是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。
如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件。
有2种方式:disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。
socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。
disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。
socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的情况下推荐用socket方式。
repl-diskless-sync no
#diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。
所以最好等待一段时间,等更多的slave连上来
repl-diskless-sync-delay 5
- 主从复制流程