目录
PD架构
PD由至少三个节点组成,并集成了ETCD,支持自动故障转移,无需担心单点故障 ;同时ETCD raft 保证数据一致性
三个PD节点中有一个leader,当leader出故障时根据raft协议重新选举
ps:*PD代表为PD leader(*标识leader)
store:集群中的的储存节点(一个TiKV node中有多个store,一个store中有多个region)
peer:region的副本,包括leader和follower
ps:region负责集群中一段连续是数据
元数据储存,用于相应数据的查找(对应的leader region在哪一个TiKV node上) 级调度region在TiKV上的分布,缓解热点
路由功能
当Executer收到SQL时,向TiKV Client发起请求,有TiKV Client向PD获取相关数据的位置(路由信息)
TSO分配
TSO=物理时间 physical time + 逻辑时间 logical time (不能交换顺序)
TSO是一个int64类型的数据,包括物理时间和逻辑时间
- 物理时间 physical time:以毫秒为单位
- 逻辑时间 logical time:将1ms分成262144个TSO
tsFuture:用于标识什么时刻请求TSO
tsFuture.wait:等待PD client从PD返回TSO
整个过程是一个异步过程
当SQL到达并向PD Client发起TSO请求,首先PD Client返回tsFuture对象(用于标识什么时刻请求TSO),同时PD Client向PD请求TSO,而SQL进入解析编译阶段;当解析编译完成,若TSO为分配,调用tsFuture.wait方法(等待PD client从PD返回TSO),直到从PD Client获取TSO
总结:
PD Client具有批处理功能用于为多个事务或SQL分配TSO
TiKV Client内的region cache用于缓存最近访问的region位置
时间窗口
时间窗口机制用于防止会话过多时PD生成过多TSO对持久化存储造成负担,导致IO瓶颈
一次分配一段时间的TSO,将一段时间的TSO放入缓存中
如图leader PD为三个会话分配了3s的TSO,此时也只需向PD存储一次
若PD leader宕机,raft选取新的leader;而原leader缓存丢失,只能重新开始下一段时间的tso分配
如上图,每次分配3s的TSO,下一次为703-706,若此时PD leader,而新的PD收到请求TSO,则在706-709中分配,故PD发出的TSO只会递增不会递减
调度
TiKV node和region每隔一段时间向PD发出心跳,PD根据心跳信息进行调度
- Store Heartbeat:来自存储阶段TiKV node的心跳,含有region分布等信息
- Region Heartbeat:来自存储阶段region的心跳,含有访问频率等信息
Balance Leader:读写均衡
Balance Region:存储均衡
Hot region:可能热点region将其split成多个region发布在其他TiKV node,缓解热点
Region merge:合并过小的region,减小负载
Label
假设:DC代表数据中心,Rack代表机柜
其中假设Rack 4或DC 2不可用将导致整个Region 1不可用
同理,假设DC 1不可用,将导致Region 2不可用
(3副本情况下,如果副本中两个(超过一半的)region不可用则导致整个region不可用)
location-labels设置label层级,如图有三层,zone,rack,host
ps:location-labels中设置的label与现实中的物理设备没有直接联系,如根据配置Zone既可以代表机柜,也可以代表一个TiKV节点
isolation-level设置隔离级别,如图中设置隔离基本为zone,则region副本不应在同一个zone层上
server.label是设置存储单元的label,如上图中TiKV的labels为zone=1(1号数据中心),rack=1(1号机柜),host=1(1号服务器)
例题
1.下列关于PD (Placement Driver)架构和功能正确的是?
A.访问PD集群中的任何一个节点都可以获得TSO
B.TiKV会周期性地向PD上报状态
C.PD会周期性地查询TikV的状态,不需要TiKV上报,目的是为了高效
D.PD的调度功能只能平衡region的分布,无法对leader进行调度
答案:B
解析:A:只有访问作为leader的PD才能获取TSO;C:TiKV和Region
会周期性的发出含有自身状态的心跳给PD,而不是PD主动查询;D:PD的平衡包括region和leader
2.关于label,下列说法不正确的是?
A. label的本质是个调度系统,可以人为控制region副本的存放位置
B. label需要在PD和TiKV上进行配置
C. isolation-level要和数据中心(DC)对应,这样可以获得最大的可用性
D.如果某个region的所有副本不可用,有可能造成整个TiDB数据库不可用
答案: C
解析:A:label的机制就是将region分散化,避免集中存储,较低数据丢失的风险;B:label需要在TiKV(server.label)和PD(location-labels和isolation-level)上配置;C:isolation-level的设置应根据实际情况设定;D:如果该region存储元数据,例如数据库的用户名,密码等,则有可能造成整个TiDB数据库不可用