完整教程:Redis 的主从模式
目录
为什么会有主从模式
当我们只在一台服务器上部署 Redis 服务时,由于一台服务器所能承受的并发量和可用性都是有限的
- 可用性:当这台服务器挂了,那么就无法提供服务
- 并发量:一台服务器的 CPU、内存、网络带宽等资源是有限的,其所能承受的访问量也是有限的
通过这时我们能够引入多台服务器部署 Redis 服务,这样不仅是可用性还是并发量都会有一个较大的提升
- 可用性:多台服务器同时挂掉的概率较小,即使有一台服务器挂了,那么剩下的服务器也能继续提供服务
- 并发量:引入多台服务器后,CPU、内存、网络带宽等资源也会变多,其能支持的访问量也会变大
什么是主从模式
当我们引入多台服务器部署 Redis 服务时,会指定一台服务器作为主节点,剩下的作为为从节点。
通过主节点能够支持写执行以及读操作,只是从节点只能协助读操控。
既然是主从结构,那么就需要从节点上的数据跟随主节点的信息变化而变化,即当主节点上的数据发生变化后,从节点需要同步主节点的内容,与主节点的信息保持一致。
当我们引入主从模式后,对于读操作,其可用性和并发量都有较大的提升,但是对于写操作,依然只有一台服务器能提供写服务,其可用性和并发量并不会有较大的提升。但是在实际情况中,写操作比读操作更频繁。
在上面的介绍中,从节点只允许读数据,不允许写数据。在配置中,当 slave-read-only 配置为 yes 时表示从节点为只读模式,no 表示从节点也可以写材料。但是在主从复制中,数据只能由主节点同步给从节点,当我们允许从节点修改材料后,就会导致主节点的从节点的数据不一致。
延迟传输
主节点与从节点之间的数据同步是通过网络进行传输的(TCP),既然是网络传输,就会存在延迟,TCP 支持 nagle 算法。在 Redis 配备中,提供了 repl-disable-tcp-nodelay 选项,默认为 no,表示开启 TCP_NODELAY 效果。
- no:表示开启,那么主节点在进行修改数据时,就会将若干个修改数据的请求合并为一个请求,发送给从节点,这样做能够节省网络带宽,但是会增加同步数据的延迟
- yes:表示关闭,当主节点修改数据后,就第一时间将这个请求发送给从节点,这样就会减小同步内容的延迟,可是会消耗更多的网络带宽
拓扑结构
Redis 主从模式具有多种结构。
一主一从

即一个主节点,一个从节点。
通过从节点能够分担主节点上读数据的压力,然而主节点写数据的压力不变。此时能够关闭主节点的 AOF,这样主节点就不会将数据同步至硬盘中,由于主节点会将数据同步给从节点,那么从节点中的数据就相当于是主节点的备份。
但是关闭主节点 AOF 的操作存在一定的缺陷,即当主节点挂了之后,不能让其自动重启。因为这时主节点中没有 AOF 文件,那么主节点启动后就不存在数据,此时主节点会将同步数据的请求发送给从节点,于是从节点就会删除自身的数据,导致数据丢失。对于此种情况,行将从节点的 AOF 材料复制一份给主节点,那么主节点在重启后就会获取到全部的数据,保证数据不丢失。
一主多从
星型结构

主节点与每一个从节点都有连接。
- 优点:当主节点上的数据发生改变后,其余的从节点会第一时间收到同步内容的请求,在较短的时间内就能保证数据的一致性
- 缺点:主节点需要将一份同步资料的请求发送多次,消耗的网络带宽更多
树形结构

- 优点:主节点在发送同步数据的请求时,只应该将请求发送至与之连接的从节点,从节点再将同步请求发送至下面的从节点,这样就能减少网络带宽的消耗
- 缺点:同步的时间更长,需要较长的时间保证主节点与从节点之间的数据一致性
浙公网安备 33010602011771号