TiFlash 存算分离两个 Write节点的 Region 分布不均匀

这里贴一下群里的反馈总结:

  1. 为什么会导致分布倾斜?
    PD 目前没有对象存储使用量的上报口。如果 tiflash 把对象存储的使用量当作 used size 上报,当对象存储的存储量接近本地盘容量的话,会导致 PD 停止调度 region 到那个 store 上。无法达到减少 write node 硬件成本的目的。
    目前 write node 上报的 store 的使用量按照本地盘算,确实可能会导致调度不均衡。
  2. 最终会达到稳态么?
    TiFlash 的数据分为 Delta 层(新写入的小数据块)和 Stable 层。Delta 层的数据写入后累积达到阈值(一般 100w 行左右)会 Compact 为 Stable 层。Delta 层的数据也会上传 S3,但是本地数据需要等 Compact 为 Stable 层的时候才会清理。Stable 层的数据在上传 S3 之后会清理本地数据。本地的 delta 数据涨到一定程度后,维持在一个稳定的位置。
    也就是如果数据一直都有大量写入,最终两者会是均衡的,但是如果两者写入速度有差异,一个先写完,另外一个写的比较慢,两者 Local 盘数据量有差异,就会导致这个差异一直存在,两者永远不会均衡。

解决方案:
设置两个 tiflash write node,并且表的 tiflash 副本也设置为 2 副本。

  • 优点: 既能保证数据不倾斜,也可以保证高可用,在滚动重启 Write Node 时不会引起业务查询报错
  • 缺点: 内存使用量翻倍,Remote 存储容量也会翻倍,成本更高。