您的位置:首页 > 数据库 > Redis

redis复制

2016-01-13 12:50 453 查看
redis的复制主要是通过同步(sync)和 命令传播搞定的。

同步(sync):即是在从服务器想主服务器发送同步请求,主服务器接收请求,然后执行bgsave命令,在后台生成一个rdb文件,同时将后续命令写入缓冲区,当rdb文件生成,给从服务器。

命令传播: rdb发送完成后,会将缓冲区的命令,发送给从服务器,从而达到主从一致的状态。

2.8以前的sync命令有一个缺陷,主从服务断开在重连,会在促发一次sync,这样很浪费资源,因为主服务器生成rdb,传输暂用网络资源,同时从服务器在载入rdb文件时,会阻塞会拒绝所有请求命令。

2.8修改了这个问题,采用psync命令来同步,psync 会同步断网后的命令请求,这样不用生成rdb传输。

psync同步有三个部分组成

1、主从的复制偏移量

按字节算,主服务像从服务传输时候会记录传输字节。比如传输1000字节,在传输33字节,偏移量就是1033字节,从服务器也是1033字节,如果从服务器是1000字节,说明33字节的数据没有同步成功,在次连接后只是传输33字节的数据。

2、复制缓冲区

默认是1M,如果操作1M,还是会生成rdb文件同步的,所以要合理设置这个值。

主在发送命令时候,会同时写入这个缓存区,缓冲区是一个先进先出的队列,里面记录了发送信息,并且每个字符都有自己的偏移量(递增的),这样就能按丢失的偏移量来同步数据了

3、从服务器会记录主服务的进程id,如果主服务器重启等原因,从服务会比对 进程id,如果不对sync请求,同步rdb文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: