TIDB双机房部署

IDC1: TIKV1 TIKV2 TIKV3 TIPD1 TIPD2 TIPD3 TIDB1 TIDB2 TIDB3
IDC2: TIKV4 TIKV5 TIKV6 TIPD4 TIPD5 TIPD6 TIDB4 TIDB5 TIDB6

如果我通过调度策略把 Region leader 和 PD leader 都迁移到IDC1,当IDC1整个挂了之后,集群还能够对外提供服务么?

  1. 麻烦具体描述下这些配置是的拓扑关系,如果是当作容灾,是想要 binlog 同步? 还是使用 raft 协议自动同步?那么几副本,如何分配?
  2. 可以参考文档
    https://docs.pingcap.com/zh/tidb/stable/three-data-centers-in-two-cities-deployment#参数配置优化

使用raft协议同步,3副本;
其实问题就是 同城3中心的情况下,挂了一个机房(没有超过半数),群集会自动重新选举lead,业务不会挂;如果用同城两中心的架构,挂了一个机房(等于半数),另一个机房还能提供服务么?或者换个说法 raft协议支不支持偶数个的 中心 配置呢?

  1. 首先,不管是几个机房,假设是3副本,那么只要两个机器有问题,比如down了,那么就可能存在有一些region有两个副本在这两个机器上,那么这个region访问就会有影响。
  2. 假设按照你的模式,一个机房挂掉了,那么假设有打标签,保证至少有一个副本在另一个机房里,那么很多region都会有影响,是无法提供服务的。 这时如果确认无法恢复,可以使用 tikv-ctl 删除异常副本,恢复业务。
  3. 最好不要偶数,奇数比较好。

可以这么理解么,偶数个的情况需要手动缩容,减少tikv数量到奇数个(6->3),恢复业务
假设有打标签,这种情况会有丢失数据的风险么?

  1. 通常是建议 3 机房每个一个副本,那么如果一个机房出问题,是完全不影响业务的。
  2. 如果是您这种 2 机房,那么通过打标签把 2 个副本放在同一个机房,剩下的一个副本都放在另一个机房。 那么当只有一个副本的机房出问题时,是不影响业务的;如果是两副本的机房出问题,那么只能从一个副本的机房,使用灾难恢复的方法来恢复数据,并不会丢数据。具体可以参考其他用户的恢复文章。 注意,一定是在确保损坏的机器无法再次启动时再使用。
1赞