Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

optimize data sync #1625

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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