时间:2023-07-09|浏览:160
ZNBase是浪潮开源的NewSQL分布式数据库,拥有强一致、高可用的分布式架构。在高负载的情况下,分布式数据库能够将负载压力平衡到不同的物理机节点上,充分利用不同节点的资源。本文将介绍ZNBase在面对高负载存储过程中采用的负载均衡策略。
负载均衡
为了更有效利用不同物理机节点的资源,避免服务器性能的浪费,在数据库高负载的情况下需要尽量将压力平衡到各个物理机节点上。这也是分布式数据库的研究重点之一。
云溪数据库ZNBase在存储上采用三副本策略,即每份数据默认同时存在三个节点中,每个副本为一个Replica。数据库在进行读写时,其中一份副本会获得一定时间内的租约,成为lease,该lease的节点即为该range的leaseholder。系统的读写都是通过leaseholder进行的,leaseholder会将对该副本的读写同步到其他的Replica。
ZNBase在启动时会创建StoreReblancer,用于自适应的对副本进行均衡。ZNBase通过对Replica以及lease进行迁移以平衡数据库的压力负载。StoreReblancer会以10秒的周期反复执行,如果存储的压力超过阈值,则会循环对每个range分两个部分进行平衡,包括租约平衡和副本平衡。
图1-1负载均衡基本流程图
租约平衡
ZNBase会维护当前节点存储的副本,其中的lease会维护该副本的QPS(每秒查询率),并按照QPS降序进行排序。压力不够阈值的range,不进行平衡。StoreReblancer会循环遍历一个range的多个副本,排除本地的,排除压力不符合阈值的,排除不正常的,排除zone限制的副本,选择剩下的副本转移租约。租期的选举和迁移不涉及到replica的复制和传输。
对于需要迁移的range来说,StoreReblancer对其租约迁移的副本选取规则如下:
非本地副本。
当前store拥有的租期是合法的。
判断租期转移后本地range的QPS可以转到阈值以内。
待迁移的replica的raftStatus领先于候选的replica的raftStatus
满足zone(分区信息)的约束条件。一些表可能会带有租期的限制条件,规定了该数据表的副本所在的结点,以及租期所在的结点。对于固定了租期的数据表,StoreReblancer不会迁移其range的租期。
Lease选取的基本流程如图1-2所示:
图1-2待选取lease流程
如果当它的QPS大于当前的阈值范围,数据库会将其租约转移到该存储该副本的其他节点上。因为数据库是直接对leaseholder进行读写,并由leaseholder同步到其他副本,故当节点负载过大时,只要将较大读写负载的副本租约转换到其他节点,就可以把该部分的压力均衡出去。
副本平衡
如果保存某副本的三台节点压力负载都不符合lease的迁出条件时,数据库会选择将该副本同步到三副本以外的节点,然后将lease迁出,以动态平衡压力。系统会对需要平衡的range进行筛选,对于压力没有达到阈值的range或迁移后对该store的QPS影响较小时,则不会进行平衡操作。
系统首先设定目标store数量,通常等于range的副本数。循环一个range的多个副本,排除本地副本后,如果副本所在的store压力符合阈值,或者不存在,将该store放入目标数组。
如果目标数组的目标数量不足,则继续从其他所有store中选择,直到符合目标数量。选择Store目标数组的过程需要符合zone(分区)限制,容量限制,压力阈值限制,并排序。如果还是不足,则放弃平衡。同时,副本的迁移应该满足多样性的限制,多样性指副本所在的多级分区的分散程度,副本所在的多级分区越分散,多样性分值越高。在选择目标store时,需要将新的多样性分值同原来的多样性分值进行比较,如果不如以前,则放弃平衡。
ZNBase会循环目标数组,计算新的租约和压力值,然后选择目标数组进行副本迁移。迁移过程首先用batch命令,副本收到命令,并发送快照。
热数据分裂
如果同时对某副本的数据进行大量的读写,压力负载是由于该副本引起时,单纯的迁移lease或者replica都无法较好的调节该情况。该部分功能由splitQueue进行管理。ZNBase会选择对热点数据的range进行分裂,从而把压力从单个range上分开,该步骤会导致创建新的星际比特replica,从而分散了压力和流量。创建新的replica之后的均衡仍由store-reblancer进行。数据库会在range分裂后再进行reblance。当压力降低后,系统会自动进行range的合并。
总结
以上就是ZNBase在处理高负载存储时采用的负载均衡策略,通过租约平衡、副本平衡与热数据分裂三种不同维度的均衡策略,避免了单个节点在高负载情况下出现性能瓶颈,提升了数据库系统的读写性能。
热点:数据