第四个场 景是 替换ES 。在多点内部, ES 用的非 常多,但 ES 的本钱非常高。假如涉及到大数据量存储的话,ES 必要许多机器,我们用 TiDB 做了一些 ES 的替换。实话实说,有一些查询场景,好比模糊查询, ES 其实比 TiDB 会更好一些。所以做 ES 替换的时候,我们也做了一些测试,假如迁到 TiDB 里查询性能没有 ES 好,我们就不会去替换。实际结果测下来,有大概 60% 的 ES 是可以替换的,整体本钱也降低了许多。 多点的数据技能栈架构
上图是双机房摆设方案的架构图,微软云有两个 zone,华为云有一个 zone,TiDB 的 PD 集群跨三个 zone 摆设, TiCDC 在微软云和华为云各摆设一个节点,TiDB 也在微软云和华为云各摆设一套,各摆设一些节点。这样做的话,必要在 TiKV 节点打上 dc 的 label,然后去把 region 分布在三个机房。TiDB 至少 2 个节点,跨 2 个机房摆设,TiCDC 也是跨 2 个机房摆设。我们也对 DRC-TiDB 同步链路恢复做了一些优化,做了一些 master standby 的布局,假如一个 DRC-TiDB 链路中, MySQL 到 TiDB 的链路挂了,另外一个能起到 standby 的作用。
这是我们在 TiKV 上打的一些 dc 的 label,里面的 zone、dc、rack、 host 其实大家都可以自己设置,这只是标识出你要把 region 分布在哪些机器、zone 上。不外,Placement rules 跟这个方法是不能一起利用的,有可能出现预期外的一些题目。
实施方面,我们将 PD 集群从微软云迁徙 1 个节点到华为云,TiKV 节点打上 dc label,从微软云迁出部分节点到华为云,等它主动 rebalance 完,然后 TiDB 也从微软云迁出一个节点到华为云。整个过程其实黑白常平滑的,假如我们用 MySQL 从一个云迁徙到多个云的话,就会非常麻烦。或者将 MySQL 从一个云迁徙到另外一个云,也非常麻烦。我们其实做过许多 MySQL 的迁徙工作,好比前段时间把腾讯云上的 MySQL 整体迁徙到火山云,其中一些情况的工作量非常大,而且风险也很大,但 TiDB 做这种迁徙就非常平滑。 多云 TiDB 集群实践过程中的题目