分享
[Alpha] 跨机房容灾方案
输入“/”快速插入内容
[Alpha] 跨机房容灾方案
1.
背景
在单集群部署环境下,OpenMLDB 具备集群内节点级别的高可用能力。
但
若受到机房断电或者自然灾害等
不可抗拒因素
,则将造成的
机房或大部分节点无法正常运转
的情况
,
从而引发
该集群状态异常,
导致在线服务
中断。
为此
,OpenMLDB 提供了一个跨机房容灾方案来解决该问题。在该方案中,用户可以在多个异地机房,分别部署独立的 OpenMLDB 集群,并且将这多套 OpenMLDB 集群设置成为主从复制模式。在这种部署架构下,如果主集群无法提供服务,用户可以进行主从切换,从而保证业务不中断。
2.
架构
2.1
名词定义
•
主集群:能支持读写的集群,并且可以给从集群同步数据。一个主集群可以有多个从集群。
•
从集群:只提供读请求的集群,数据和主集群保持一致;可以在需要
的
时候切换为主
集
群;可以部署多个。
•
分片 leader:主分片,接收读写数据
。
•
分片 follower:从分片,只接受分片 leader 同步过来的数据,目前不接受客户端的直接写请求
。
•
o
ffset
:本文 offset 特指 OpenMLDB 的 binlog 所保存的数据偏移量,该值越大,说明保存有更多的新鲜数据。
💡
关于名词的进一步解释可以查看 OpenMLDB 的在线模块架构文档:
https://openmldb.ai/docs/zh/main/reference/arch/online_arch.html
2.2
目标
•
主集群支持写操作,主从集群都可以支持读操作
•
一个主集群可以有多个从集群作为备份
•
主集群出现意外不可用时能够手动切换,让其中一个从集群提升为主集群
•
能够自动处理主集群或者从集群内部节点下线不可用(包括 nameserver 和 tablet)的情况
2.3
技术方案
主
从
集群的整体技术架构如下图所示
:
主从集群之间的同步信息,主要包含数据同步和元信息同步两部分。
2.3.1
初始状态
对于主从集群的初始状态,可以为以下状态之一:
•
主集群和从集群的数据均为空
•
主或从集群
不为空,主从集群的表名以及 schema 一致,并且主集群 offset 大于等于从集群的 offset,否则会报错。
2.3.2
元信息同步
元信息同步发生在主从集群的 nameserver 之间。具体的过程如下:
•
建立好主从关系之后,主集群的 nameserver 会向从集群同步主集群的表信息,从集群创建相应的表。注意,主从集群节点数不需要一致,但是每张表的分片数需要保持一致。
•
主集群的 nameserver
每隔一段时间获取
从集群的表拓扑信息
2.3.3
数据同步
主从集群之间的数据同步主要通过 binlog 进行,其总体的同步逻辑如下:
•
单集群内部:leader → followers 同步数据
•
主从集群之间:主集群 leader → 从集群 leader 同步数据
下图可视化列举了该同步逻辑和数据流方向。
假设有一个从集群,表为三副本。其具体过程为:主集群分片的 leader 会创建两个 replicator 线程来负责集群内部
数据
同步,以及
1
个 replicator 线程来负责同步数据到从集群的 leader;从集群的
leader 会创建两个 replicator 线程,分别给
从
集群内部的 followers 同步数据。