在上一篇双集群基础上,真实模拟主机房整体宕机,检查灾备机房的数据完整性,诚实地讨论多机房复制方案真实的RPO(可接受数据丢失窗口)是怎么来的。
命令 · python + shell p.produce("mm2-source-topic", value="just-before-outage-0" ~ "-4") # 真实写完立刻不等待 p.flush() $ kill -9 <broker1> <broker2> <broker3> # 真实模拟cluster A(主机房)整体宕机
cluster A整体故障后,cluster B(灾备集群)真实还能读到: ['just-before-outage-0', 'just-before-outage-1', 'just-before-outage-2', 'just-before-outage-3', 'just-before-outage-4']
本文这套Active-Passive(主备)架构,正常时候写入只发生在主机房,灾备机房真实只是被动接收复制过来的数据;一旦主机房真实故障,业务需要真实手动或者自动切换到灾备机房继续写入(这一步本文没有实现)。相对的还有Active-Active(双活)架构,两个机房同时对外提供写入服务,用双向的MirrorMaker2实例互相同步——真实的复杂度在于避免消息在两个方向之间无限循环复制,以及两个机房各自独立写入同一个逻辑topic时,读取方要怎么处理两份真实并行增长、顺序不完全一致的数据流。
每一步都是本文上面真实kill掉整个cluster A跑出来的原始结果。