REDIS主从同步优点
1.Master可以有多个slave(分散读请求),提高系统伸缩性
2.多个slave可以连接到相同的Master,slave还可以和其他slave形成树状结构
3.可以用主从同步来实现高可靠性的数据持久化
REDIS主从同步原理
1.设置好slave后,slave主动和Master建立连接,发送SYNC命令
2.Master启动一个后台进程(fork命令,采用cope-on-write·机制),将内存的数据以快照的方式写入为文件中,同时收集新的写命令缓存起来。
3.Master后台进程完成数据快照后(rdb文件),将rdb文件传输给slave服务器
4.slave本地清空库数据,把rdb文件导入数据库中
5.Master服务器将所有更改数据库的操作,以命令的形式转发给slave,slave执行命令就可以达到同步的效果
主从同步设置
1.在从服务器终端运行slaveof ip port #slave重启后主从关系消失
2.在从服务器配置文件中加入slaveof ip port
REDIS主从同步缺点
当slave服务器和Master断开重连后,Master需要将数据库里的数据重新做一次快照。实际上我们只需要将slave和master断开的这段时间的更改数据库命令发送到slave就行,但是却多做了一次SYNC命令,这是不合理的.。
为了解决旧版复制功能的缺陷,新版复制功能(2.8版本以后)实现了PSYNC功能,PSYNC可以实现完整同步和部分重同步。
部分重同步由三个部分构成:
1.主服务器,从服务器复制偏移量、
主从服务器都会维护各自的复制偏移量,每次主向从从服务器传播N个字节数据时,就将自己的偏移量加上N,从服务器收到N个自己的数据时就将自己复制偏移量加上N
2.主服务器的复制积压缓冲区
每次住服务器将命令发送给从服务器时,还会将命令入队到复制积压缓冲区
3.服务器的运行ID
每个服务器都有自己的运行ID
部分重同步简略步骤如下
1.主从断开重连后,从服务器发送PSYNC <RUNID> <OFFSET>
2.主服务器根据自己的复制偏移量,从服务器传的复制偏移量,复制积压缓冲区的内容来判断是否执行部分重同步
3.如果是部分重同步,主服务器将把从服务器缺少的数据传给从服务器,主从服务器状态再度回到一致
参考书籍:REDIS设计与实现