课程名称:3.9.3 Rack Awareness(TiDB 集群的混合部署方案)
学习时长:
20分钟
课程收获:
了解 TiDB 集群中的机架感知
课程内容:
一、What is rack awareness
简单说就是程序或数据知道自己所在位置
二、Why rack awareness
- TiDB是一个分布式数据库,默认三副本,当一个事物发起提交时需要多副本(两个副本)写入成功后事务即为提交成功,实现高可用。
- 设想10台TiKV服务器,丢失两台,就可能存在一部分数据丢失了两副本,导致TiDB集群无法对外提供服务。
- 如果想提高可用性,比如损坏了一个机架或一个数据中心的服务器仍能对外提供则需要引入态势感知,从而使PD知道数据在什么位置,进而让PD可以选择最优存放数据方案。
三、How to achieve rack awareness
- Achieve rack awareness in TiDB
- pd-server配置参数replication.location_label= [“dc”,“zone”.“rack”,“host”]
此种配置感知层级依次递减dc感知层级最高其次为zone - TiKV server配置参数lable = {dc"beijing",zone=“zone1”,rack=“rack1”,host=“192.168.0.1”}
根据lable自身位置的信息给每一个层级赋值 - 当所有TiKV均设置好lable参数时,PD就可以感知到数据的分布情况,从而将数据的不同副本按lable调度到最佳位置
- Formula
- 假设一个数据存在三副本peer1,peer2,peer3,以peer1为例写出以下计算公式。
- 解释
- len(location-labels)表示配置了感知层级的数目
- diff(peer1,peer2)表示peer1和peer2所在的TiKV lable中第一个不一样的感知层级的层号,当层号均相同时此公式直接为0,PD会将peer1调度到所有TiKV得分最高的实例上
- 示例
- 当peer1在host1、host2、host5、host6时DC层级和peer2不同,他们的不同层号应该是1
- 当peer1在host3时记为-1(peer1与2的两个层级都相同,这部分分数不计算,直接为0)
- 当peer1在host4时第二个层级不同,记为2
- 把这些数值带入公式后的出peer1在每个host上的得分,因为host1与2的得分均为200,PD将peer1调度到这两个最高分的任意一个host上都是满足条件的
- 我们可以看到PD将peer1分别调度到了3个DC中,从而满足损坏一个数据中心中仍能保证多副本存在,从而对外提供服务