配从不配主
- 主要开启密码 在redis.conf requirepass xxxx
- 在从机配置
查看主从关系
在主机或从机执行
info replication
注意点
- 从机可以读,但没有写的权限
- 主从机同时启动, 主机写一个命令,从机复制一个命令 主机开启动,写入命令,从机在启动, 会把之前主机命令全部复制,之后主机写入一个命令,从机复制一个命令。
- 主机宕机之后,从机不会自动变成主机。
- 从机配置在redis.cnf, 重启仍然生效
- slave 主机IP 主机端口号, 本次生效, 重启从机 ,就失效了。
- slave 主机IP 主机端口号,每次与master断开只会,都需要重新连接,除非配置在redis.conf文件,在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系**转而和新的主数据库同步
- 薪火相传,A主机下面挂载一个B从机, 同时B从机下面又挂载一个C从机, A是master B是slave ,C是slave,B虽然是C的master,但整体它依然是slave机。 不能写操作。但这样比Amaster下面挂载BC两个从机, 可以减少Amaster的写压力。
slaveof no one
当前的从机变成主机。 但原来复制的数据还在。
主从复制的原理
1、slave启动,同步初请
slave启动成功连接到master后会发送一个sync命令
slave首次全新连接master,一次完全同步(全量复制)将自动执行,slave自身原有的数据会被master数据覆盖清除
2、首次连接,全量复制
master节点收到sync命令后开始在后台保持快照(RDB持久化,主从复制时会触发RDB)
同时收集所有接受到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,
master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
3、心跳持续,保持通信
master发出ping包的周期,默认是10秒
在redis.conf repl-ping-replica-period 10
4、进入平稳,增量复制
master继续将新的所有收集到的修改命令自动依次传给slave,完成同步
5、从机下线,重连续传
master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterid,offset是保存在backlog中的。Master只会把已经复制到的offset后面的数据复制给slave,类似断点续传
主从复制的缺点
默认情况下,主机宕机,从机不会自动变成主机,需要人工干预。