是什么?能干嘛?
就是主从复制,以master以写操作为主,slave以读操作为主,当master的数据发生改变的时候,自动将新的数据异步同步到其他slave数据库
这样就可以完成读写分离,数据备份,水平扩容支持高并发
操作步骤
配从库不配主库
基本命令操作:
info replication:查看节点的主从关系,配置信息
replicaof 主库ip 主库端口:一般写进redis.config中
----------------主从复制
slaveof 主库ip 主库端口:在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的的同步关系转而和新的主数据库同步
----------------改换门庭
slaveof one:使当前数据库停止和其他数据库进行同步操作,转为主数据库
----------------自立为王
如何实现不同数据库的主从关系
配置文件固定写死 在从数据库的配置文件中写入replicaof 主库ip 主库端口
命令操作手动指定 在从数据库执行slaveof 主库ip 主库端口命令,需要注意的是这种设置主从关系是一次性的,也就是说如果从机关机后重启是没有之前的主从关系的
两者之间的区别?
配置:持久稳定
命令:当次生效
主从问题
1.从机可以进行写命令吗?
显然从机不能进行写操作
2.从机是从头开始复制还是从切入点开始复制?
首次一锅端,后续跟随,master写,slave跟
3.主机shutdown后从机会变成主机吗?
从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来(这是复制的一大弊端)
4.主机shutdown后重启主从关系还在吗?从机能否顺利复制?
主从关系依旧还在
总结
复制原理和工作流程
slave启动,同步初请
slave启动成功连接到master后会发送一个sync命令,一次完全同步将会被执行,slave自身数据将会被master数据覆盖清除
初次连接,全量复制
master节点收到sync命令会在后台保存快照(即RDB持久化,主从复制会触发RDB),同时收集所有修改数据命令并保存缓存起来,master节点执行完持久化后,将rdb文件和缓存的命令集一并发送给slave,以完成一次同步
心跳持续,保持通信
repl-ping replica-period 10
进入平稳,增量复制
master会将新收集到的修改命令自动一次传给slave完成同步
从机下线,重连续传
master会检查backlog内的offset,master和slave都会保存一份offset和masterID,master只会把已经复制的offset后面的数据复制给slave,类似于断点续传
复制的缺点
1.由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
2.当master挂点时,slave节点只会等待主机重新启动,非常影响业务处理,所以需要无人值守运维