0

我们正在尝试在两个 TiDB 集群之间创建 Master-Master 复制。每个集群有 3 台 PD 服务器、4 台 KV 服务器和 2 台 TiDB 服务器。TiDB 在启用 binlog 的情况下运行。在 TiDB 服务器上,我们还安装了 pump。现在我们开始安装排水器,我​​们看到以下问题:

  • 如果我们在配置为将数据同步到远程 TiDB 集群的同一 TiDB 服务器上部署多个 Drainer - 我们会在远程 TiDB 中获得重复的条目。每个 drainer 分别发送插入,因此对于源集群上的每个插入记录,我们在目标集群上获得 2 条记录
  • 如果我们在专门为其分配的单独服务器上部署单个排水器,我​​们将创建单点故障。如果此服务器出现问题 - 数据将不会同步。此外,我们找不到任何有关泵组设计的信息。众所周知,pump 将所有事务保存为 gc 天,并且可以设置的最小值为 1 天。
  • 如果我们有 2 个 TiDB 服务器并且每个都在运行 pump - 每个 pump 是否保存相同的完整数据?还是分片?如果分片,它有副本吗?如果我们丢失了一台 TiDB 服务器(上面运行了 pump)——我们会丢失部分 pump 数据吗?
4

1 回答 1

0

我也是 TiDB 用户。

从官网看,建议您使用单独的实例来部署泵和排水器。

Q1:每台泵是否保存相同的完整数据?还是有阴影?如果您部署超过 1 个 pump,事务记录将随机发送到 pump,而 drainer 用于根据提交时间合并这些 binlog。

Drainer collects and merges binlogs from each Pump, converts the binlog to SQL or data of a specific format, and replicates the data to a specific downstream platform.

https://docs.pingcap.com/tidb/stable/tidb-binlog-overview#:~:text=Drainer%20collects%20and%20merges%20binlogs%20from%20each%20Pump%2C%20converts%20the%20binlog%20to%20SQL%20or%20data%20of%20a%20specific%20format%2C%20and%20replicates%20the%20data%20to%20a%20specific%20downstream%20platform.

Q2.如果我们丢失了一台 TiDB 服务器(上面运行了 pump),我们会丢失部分 pump 数据吗?理想情况下,如果一个泵发生故障,那么新的二进制日志将被发送到其他可用的泵,并且二进制日志文件存储在排水机而不是泵中。

Here is the drainer config file: 
https://github.com/pingcap/tidb-binlog/blob/master/cmd/drainer/drainer.toml

我认为它非常有用,您可以按照它进行自己的设置。根据我的经验,您可以将二进制日志存储到两个排水器以避免丢失数据,而不是只有一个排水器。此外,另一种方法是将二进制日志同步到 kafka,drainer.toml文件中也提供了该方法。

于 2021-11-30T10:20:32.147 回答