背景
在单集群部署环境下,OpenMLDB 具备集群内节点级别的高可用能力。但若受到机房断电或者自然灾害等不可抗拒因素,则将造成的机房或大部分节点无法正常运转的情况,从而引发该集群状态异常,导致在线服务中断。为此,OpenMLDB 提供了一个跨机房容灾方案来解决该问题。在该方案中,用户可以在多个异地机房,分别部署独立的 OpenMLDB 集群,并且将这多套 OpenMLDB 集群设置成为主从复制模式。在这种部署架构下,如果主集群无法提供服务,用户可以进行主从切换,从而保证业务不中断。
架构
名词定义
- 主集群:能支持读写的集群,并且可以给从集群同步数据。一个主集群可以有多个从集群。
- 从集群:只提供读请求的集群,数据和主集群保持一致;可以在需要的时候切换为主集群;可以部署多个。
- 分片 leader:主分片,接收读写数据。
- 分片 follower:从分片,只接受分片 leader 同步过来的数据,目前不接受客户端的直接写请求。
- offset:本文 offset 特指 OpenMLDB 的 binlog 所保存的数据偏移量,该值越大,说明保存有更多的新鲜数据。
关于名词的进一步解释可以查看 OpenMLDB 的在线模块架构文档:https://openmldb.ai/docs/zh/main/reference/arch/online_arch.html
目标
- 主集群支持写操作,主从集群都可以支持读操作
- 一个主集群可以有多个从集群作为备份
- 主集群出现意外不可用时能够手动切换,让其中一个从集群提升为主集群
- 能够自动处理主集群或者从集群内部节点下线不可用(包括 nameserver 和 tablet)的情况
技术方案
主从集群的整体技术架构如下图所示:
主从集群之间的同步信息,主要包含数据同步和元信息同步两部分。
初始状态
对于主从集群的初始状态,可以为以下状态之一:
- 主集群和从集群的数据均为空
- 主或从集群不为空,主从集群的表名以及 schema 一致,并且主集群 offset 大于等于从集群的 offset,否则会报错。<