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

redis主从复制

2016-11-25 15:30 134 查看
一、什么是redis主从复制

主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致。

二、redis主从复制特点

1、同一个Master可以拥有多个Slaves。

2、Master下的Slave还可以接受同一架构中其它slave的链接与同步请求,实现数据的级联复制,即Master->Slave->Slave模式;

3、Master以非阻塞的方式同步数据至slave,这将意味着Master会继续处理一个或多个slave的读写请求;

4、Slave端同步数据也可以修改为非阻塞是的方式,当slave在执行新的同步时,它仍可以用旧的数据信息来提供查询;但返回的是同步之前的数据,当slave与master失去联系时,slave会返回一个错误给客户端;

5、主从复制具有可扩展性,即多个slave专门提供只读查询与数据的冗余,Master端专门提供写操作;

6、通过配置禁用Master数据持久化机制,将其数据持久化操作交给Slaves完成,避免在Master中要有独立的进程来完成此操作。

三、Redis Replication工作原理:

1):Slave启动后,无论是第一次连接还是重连到Master,它都会主动发出一个SYNC命令

2):当Master收到SYNC命令之后,将会执行BGSAVE(后台存盘进程),即在后台保存数据到磁盘(rdb快照文件),同时收集所有新收到的写入和修改数据集的命令存入缓冲区(非查询类)

3):Master在后台把数据保存到快照文件完成后,会传送整个数据库文件到Slave

4):Slave接收到数据库文件后,会把内存清空,然后加载该文件到内存中以完成一次完全同步

5):然后Master会把之前收集到缓冲区中的命令和新的修改命令依次传送给Slave

6):Slave接受到之后在本地执行这些数据修改命令,从而达到最终的数据同步

7):之后Master与Slave之间将会不断的通过异步方式进行命令的同步,从而保证数据的时时同步

8):如果Master和Slave之间的链接出现断连,Slave可以自动重连Master。根据版本的不同,断连后同步的方式也不同:

    2.8之前:重连成功之后,一次全量同步操作将被自动执行

    2.8之后:重连成功之后,进行部分同步操作

部分同步:

从2.8开始,当Master和Slave之间的连接断开重连后,他们之间可以采用持续复制处理方式替代完全重同步操作。部分重同步会用到PSYNC的命令,2.8之后的版本才有此命令,之前的只有SYNC命令。只要Slave是2.8或以上的版本,Slave就会根据Master的版本来决定到底是使用PSYNC还是SYNC

部分同步工作原理如下:

1):Master为被发送的复制流创建一个内存缓冲区(in-memory backlog),记录最近发送的复制流命令

2):Master和Slave之间都记录一个复制偏移量(replication offset)和当前Master ID(Master run id)

3):当出现网络断开,Slave会重新连接,并且向Master请求继续执行原来的复制进程

4):如果Slave中断网前的MasterID和当前要连的MasterID相同,并且从断开时到当前时刻Slave记录的偏移量所指定的数据仍然保存在Master的复制流缓冲区里面,则Master会向Slave发送缺失的那部分数据,Slave执行后复制工作可以继续执行

5):否则Slave就执行完整重同步操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息