Skip to content

Commit

Permalink
optimize data sync (#1625)
Browse files Browse the repository at this point in the history
  • Loading branch information
cooper-lzy authored Apr 2, 2022
1 parent ff869fa commit f9bc697
Showing 1 changed file with 21 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,15 @@ Nebula Graph 支持在集群间进行数据同步,即主集群 A 的数据可

- 主从集群的数据同步是异步的(近实时)。

- 不支持多个主集群同步到 1 个从集群。
- 主从集群之间只支持1 对 1,不支持多个主集群同步到 1 个从集群,也不支持 1 个主集群同步到多个从集群,但是可以通过链式方式同步到多个从集群,例如`主集群->从集群1->从集群2->从集群3`

- 支持链式方式同步到多个从集群,例如`主集群->从集群1->从集群2->从集群3`
- Meta listener 监听 Meta 服务,Storage listener 监听 Storage 服务,不可以混用。

- 1 个图空间只有 1 个 Meta listener 和 1 个或多个 Storage listener,这些 listener 可以对应 1 个或多个 drainer。

- listener 服务记录来自主集群的 WAL 或快照,drainer 服务记录来自 listener 的 WAL 和写入从集群的 WAL。这些文件都保存在对应服务的本地。

- 从集群中数据如果不为空,数据同步时可能会导致数据冲突或者数据不一致。建议保持从集群数据为空。

## 操作步骤

Expand Down Expand Up @@ -323,25 +329,30 @@ drainer:机器 IP 地址为`192.168.10.104`,只启动 drainer 服务。

### 主集群中已经有一部分存量数据了,从集群可以同步到之前的存量数据吗?

可以。drainer 接收到 listener 的 WAL 后,如果发现从集群中没有待修改的数据,会从 listener 中拉取全量数据并覆盖到从集群中的相应分片。

### 从集群中已经有数据了,数据同步会有影响吗?
可以。drainer 接收到 listener 的 WAL 后,会发现从集群中没有对应的数据,然后会从 listener 中拉取全量数据并覆盖到从集群中的相应分片。

如果从集群中的数据是主集群中的数据的子集,通过数据同步最终会实现数据一致。
### 从集群中已经有 data 了,数据同步会有影响吗?

如果主集群中没有从集群中的部分数据,通过数据同步最终不会实现数据一致,因为不一致的数据仍然存在于从集群中,需要 DBA 评估下这些差异数据是否需要保留
仍然会进行全量数据同步。如果从集群中的数据是主集群数据的子集,最终会数据一致;如果不是主集群数据的子集,从集群不会进行反向同步,而且这部分数据会保留,请确保主从集群数据不会冲突

### 从集群中已经有 Schema 了,数据同步会有影响吗?

需要 DBA 确保从集群中的 Schema 和主集群中的 Schema 没有冲突,否则数据同步时主集群中的 Schema 会覆盖从集群中的 Schema,可能导致被覆盖的 Schema 对应的数据失效。
数据同步时主集群中的 Schema 会覆盖从集群中的 Schema,因此可能导致被覆盖的 Schema 对应的数据失效或者数据不一致。请确保从集群中的 Schema 和主集群中的 Schema 没有冲突。

### 修改主集群的 Schema 会影响数据同步吗?

可能会增加数据同步延迟。因为 Schema 数据和 data 数据是分开处理的(Meta listener 和 Storage listener),data 数据同步时,drainer 会检查自身的 Schema 版本,如果版本大于当前存储的版本,说明 Schema 有更新,这时候会暂缓更新,等待从集群中的 Schema 数据先更新完成。

### 主从集群的机器数量、副本数量、分片数量需要相同吗?

不需要。因为是以图空间为基本单位,主集群不需要知道从集群的架构信息,只需要将 WAL 发送给 listener 即可。

### 修改 Schema 会影响数据同步吗?
### 如果同步时出现故障,如何修复?

可以根据故障节点,进行如下处理:

可能会增加数据同步延迟。因为 Schema 数据和普通数据是分开处理的(Meta listener 和 Storage listener),普通数据同步时会检查自身的 Schema 版本,如果版本大于当前存储的版本,说明 Schema 有更新,这时候会暂缓更新,等待 Schema 数据先更新完成。
- 主集群故障:会导致同步暂停,重启主集群服务即可。
- listener/drainer/从集群故障:服务恢复后,会收到前一节点发送的故障期间的 WAL。例如 drainer 故障恢复后,会收到 listener 发送来的故障期间的 WAL。如果用新的节点替换故障的 drainer 节点或从集群,需要将原节点的数据复制到新节点,否则相当于重新同步全量数据。

### 如何判断数据同步进度?

Expand Down

0 comments on commit f9bc697

Please sign in to comment.