【问题标题】:TiDB single drainer architecture is creating a single point of failureTiDB 单排水器架构正在制造单点故障
【发布时间】:2021-08-10 09:07:19
【问题描述】:

我们正在尝试在两个 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 数据吗?

【问题讨论】:

    标签: tidb


    【解决方案1】:

    我也是 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
    

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

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 1970-01-01
      • 2016-06-21
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      相关资源
      最近更新 更多