您现在的位置是:首页 >学无止境 >Redis系列--主从复制网站首页学无止境
Redis系列--主从复制
一、redis主从复制介绍
在 Redis 复制的基础上,使用和配置主从复制非常简单,能使得从 Redis 服务器(下文称 slave)能精确得复制主 Redis 服务器(下文称 master)的内容。每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。
一句话就是主从复制,master以写为主,slave以读为主。当master数据变化时,自动将新数据异步同步到其他slave数据库当中去。数据的复制是单向的,只能由主节点到从节点
二、作用
1、读写分离
2、容灾恢复
3、数据备份
4、水平扩容支撑高并发
三、 配置以及命令
四、主从复制三种常见配置
一、一主两从
一、一主两从两种配置
1、直接配置文件配置,重启还会生效(具体配置请看官网)
2、使用命令配置,只是临时配置,重启失效
二、一主两从常见问题
1、从机是否可以执行写命令?
从机不可以执行写命令
2、从机切入点问题 ,也就是slave是从头开始复制还是从切入点开始复制?
假设:
master启动,写到k3
slave1跟着master同时启动,跟着写到k3
slave2写到k3后才启动,那之前的也是会复制过来的
3、主机shutdown后情况如何?从机是变为master还是原地待命
从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来
4、 主机shutdown后,重启后主从关系还在吗?从机能够顺利复制
主从关系依旧在,也能顺利复制
二、slaveof 新主库ip 新主库端口
其实就是上一个slave可以作为下一个slave的master,slave同样可以接收其他slave的连接和同步请求,那么该slave作为下一个的master,可以有效减轻主master的写压力。
这种其实就是改变了一下数据同步的方向,其实6380还是不能进行写操作
使用命令:slaveof 新主库ip 新主库端口
三、slaveof no one
使当前数据库停止与其他数据库的同步,转成主数据库
五、主从复制原理以及工作流程
slave启动,连接master:
1、slave启动成功连接到master后会发送一个同步命令
2、slave首次全新连接到master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。
首次连接,全量复制:
3、master节点收到同步命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据命令缓存起来,master节点执行RDB持久化完成后,master将rdb快照文件和所有缓存的命令发送到所有slave,已完成一次完全同步
4、而slave服务器在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。
保持通信:
5、master会发出PING包给slave,以此来确认slave是否存活。默认时间是10s
6、当第一次全量复制后,master如果有新增的数据,将会收集新的数据自动一次传给slave,完成同步
从机下线,重连续传:
7、当slave宕机或者下线后,master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId。master只会把已经复制的offset后面的数据复制给slave,类似于断点续传。
六、主从复制的缺点
1、复制延时,信号衰减
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
2、master挂了,slave不会自动重选一个master,且s剩余的slave不能执行写命令。每次master挂了都只能人工干预