生产环境 TiDB 集群混合部署实践
作者: 啦啦啦啦啦原文来源:https://tidb.net/blog/d496b398
【是否原创】是
【首发渠道】TiDB 社区
【首发渠道链接】其他平台首发请附上对应链接
【正文】
一、背景
由于各种场外因素导致我们不能自由选择的理想硬件环境,加之目前单台物理机的硬件配置往往都高于需求,为了更合理地规划资源,很多时候一台服务器不能够“奢侈地”只部署一个实例,而是会考虑单机多实例部署 TiDB 或者 TiKV。这就需要在现有的环境中尽可能地搭建满足高可用、高性能的 TiDB 集群。本文主要分享一次实际生产环境中混合部署 TiDB 集群的过程,供大家参考。
二、硬件配置
10 台物理机,每台配置均为 56C 384G 4 块 2TB NVME 硬盘。监控、HA 等机器使用虚拟机即可,因此不算在采购预算内。
配置达标,但是由于种种因素原本预计装一个集群的硬件需要混合部署 2 套集群。
三、集群拓扑规划
集群 1
集群 2
如果拆解成单独的集群,他们的架构应该是这样
但是实际上是混合部署,那么他们的架构应该是这样
四、集群 label 规划
集群 1 拓扑 tikv 配置 labels 规划为:
集群 2 拓扑 tikv 配置 labels 规划为:
设置 PD 的 location-labels 配置:
五、总结
本次操作是想在目前服务器数量不变的情况下尽可能做到高可用,但是由于成本等多方面因素并没有选择异地容灾及同城多机房容灾方案,所以选择了该混合部署方案。
HA 本身的可用性:
haproxy+keepalived 实现 ha 的高可用。
PD server 及 TiDB server 的可用性:
由于 pd 和 tidb 是混合部署的,所以这里放在一起说。10.0.0.1-10.0.0.0.4 为 2 套集群 tidb 和 pd 混部,从架构图中可以看到,任意一台服务器宕机,都最多只影响一套集群内的一个 tidb 节点和一个 pd 节点。同一套集群内 tidb 节点仍有一个可用,pd 节点剩余 2 副本,tidb 和 pd 都满足高可用。
TiKV server 的可用性:
为了在具有相近物理位置的 TiKV 上只放置一个副本,PD 可以根据 TiKV 的物理位置进行最优调度以尽可能的提高 TiKV 集群的可用性。我们都知道 Raft Group 副本数选择为 3 的 TiKV 集群可以容忍一个节点宕机而不丢失数据且正常提供服务。一个集群同时有两个 TiKV 节点宕机可以通过合理规划让同时故障的两个 TiKV 出现在同一个隔离区的概率变高来提高可用性。本次部署同样选择为 3 副本,服务器 10.0.0.5(host1)和 10.0.0.6(host2)在一个机柜,10.0.0.7(host3)和 10.0.0.8(host4)在一个机柜,10.0.0.9(host5)和 10.0.0.10(host6)在一个机柜,根据上面的规划,虽然一台服务器上有 2 套集群的各 2 个 TiKV 实例,但是 PD 知道哪些 TiKV 节点在同一台服务器上,也知道哪些服务器在同一个机柜上。PD 在副本调度时,会按照 label 层级,保证同一份数据的不同副本尽可能分散,至少能够保证任一服务器宕机 2 套集群的 TiKV 均可用。也可以设置 isolation-level 参数来进一步加强对 TiKV 集群的拓扑隔离要求。任一机柜故障后,例如 10.0.0.5 和 10.0.0.6 同时宕机,由于 2 套集群中这两台服务器都只存放一个副本,TiDB 集群依然是可用的。
第一次发文章,希望能对各位大佬有帮助,实际部署也是很早之前了,如果有不严谨或者纰漏的地方也请见谅。
参考文章:https://tidb.io/blog/8f2a6d62
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/0a194079b7e8b3bc8dc42affd】。文章转载请联系作者。
评论