顺风车运营研发团队 黄桃
1、主从复制问题 方案讨论 方案一:- 主收到从服务的同步请求,则立马生成一个数据副本+缓冲区,再异步启动BGSAVE进程,读取数据副本并生成RDB文件,新收到的写命令则往缓冲区写入。待RDB文件同步到从服务器完成,再把缓冲区的命令重新执行一遍。
方案二:
- 主收到从服务的同步请求,则只生成缓冲区,再异步启动BGSAVE进程,读取主数据并生成RDB文件,把修改数据的结果往缓冲区写入。待RDB文件同步到从服务器完成,再把缓冲区的数据重新更新一遍。
方案一的复杂性较低,方案二则内存利用率更高,REDIS采用的是方案一。
2、具体过程如下:
1、redis服务器,在收到命令:SLAVEOF 127.0.0.1:6379,后则把命令中的 127.0.0.1:6379 当自己的成主服务,并向其发送SYNC命令。
2、从服务器从生产到离线,等待主服务数据同步。
3、主服务收到SYNC后,则执行BGSAVE命令,异步启动BGSAVE进程,生成RDB文件,新收到的写命令则往缓冲区写入。
4、主服务生产完rdb文件,则把该文件发送到从服务,待同步到从服务器完成,再把缓冲区的命令重新执行一遍。
3、部分主从复制方案实现
4、源码实现:
待补充