Redis 主从复制
命令
SLAVEOF host port # 设置从服务器复制主服务器
SLAVEOF no one # 终止服务器复制,不再接受主服务器的更新
执行过程
步骤 | 主服务器操作 | 从服务器操作 |
---|---|---|
1 | (等待命令进入) | 连接(或者重连接)主服务器,发送SYNC命令 |
2 | 开始执行BGSAVE,并使用缓冲区记录BGSAVE之后执行的所有写命令 | 根据配置选项来决定是继续使用现有的数据(如果有的话)来处理客户端的命令请求,还是发送请求的客户端返回错误 |
3 | BGSAVE执行完毕,向从服务器发送快照文件,并在发送期间继续使用缓冲区记录被执行的写命令 | 丢弃所有旧数据(如果有的话),开始载入主服务器发来的快照文件 |
4 | 快照文件发送完毕,开始向从服务器发送存储在缓冲区里面的写命令 | 完成对快照文件的解释操作,像往常一样开始接受命令请求 |
5 | 缓冲区存储的写命令发送完毕;从现在开始,每执行一个写命令,就向从服务器发送相同的写命令 | 执行主服务器发来的所有存储在缓冲区里面的写命令;并从现在开始,接受并执行主服务器传来的每个写命令 |
在实际中最好让主服务器只使用50%-65%的内存,留下30%-45%的内存用于执行BGSAVE命令和创建记录写命令的缓冲区
警告
Redis 不支持主主复制
主从链
当我们创建多个从服务器时,可能会造成网络不可用。
主服务器和从服务器没有特别不同的地方,所以从服务器也可以拥有自己的从服务器,并由此形成主从链
从服务器对从服务器进行复制在操作上和从服务器对主服务器进行复制的唯一区别在于,如果从服务器X拥有从服务器Y,那么当从服务器X在执行上表中的步骤4时,他将断开与从服务器Y的连接,导致从服务器Y需要重新连接并重新同步
主从链结构