文章目录
- 1. 复制风暴
- 1.1 单节点复制风暴
- 1.2 单机器复制风暴
- 1.3 总结
1. 复制风暴
复制风暴是指大量从节点对同一主节点或者对同一台机器的多个主节点短时间内发起全量复制的过程。复制风暴对发起复制的主节点或者机器造成大量开销,导致 CPU、内存、带宽消耗。因此我们应该分析出复制风暴发生的场景,提前采用合理的方式规避。规避方式有如下几个。
1.1 单节点复制风暴
当一个主机下面挂了很多个 slave从机的时候,主机 master 挂了,这时 master 主机重启后,因为 runid 发生了变化,所有的 slave 从机都要做一次全量复制。这将引起单节点和单机器的复制风暴,开销会非常大。
解决:
- 可以采用树状结构降低多个从节点对主节点的消耗。
- 从节点采用树状树非常有用,网络开销交给位于中间层的从节点,而不必消耗顶层的主节点。但是这种树状结构也带来了运维的复杂性,增加了手动和自动 处理故障转移的难度。
当也不一定
1.2 单机器复制风暴
由于 Redis 的单线程架构,通常单台机器会部署多个 Redis 实例。当一台机器(machine)上同时部署多个主节点(master)时,如果每个 master 主机只有一台 slave 从机,那么当机器宕机以后,会产生大量全量复制。这种情况是非常危险的情况,带宽马上会被占用,会导致不可用。
解决:
- 应该把主节点尽量分散在多台机器上,避免在单台机器上部署过多的主节点。
- 当主节点所在机器故障后提供故障转移机制,避免机器恢复后进行密集的全量复制。
如下图所示,左侧是单机器部署了多个master实例,右侧为分散部署:
1.3 总结
简单的区分单节点复制风暴和单机器复制风暴:
- 首先风暴的原因都是机器挂了,导致master节点重启后,大量的从节点发起同步数据的操作
- 不同点是二者的侧重点不同
单节点复制风暴是假设一个master下关联100从节点,而单机器复制风暴是指某个机器上有10个master,每个关联10个从节点,它们都是100个从节点,如果主机挂了,都会产生风暴。
- 单节点复制风暴:采用减少单个主节点关联的从节点
- 单机器复制风暴:采用分散机器部署,让鸡蛋不要放到一个篮子里
参考:
《redis之主从问题处理》