摘要
在文章《Nbula架构剖析系列(一)图数据库的存储设计》中,我们提过分布式图存储的管理由MtaSrvic来统一调度,它记录了所有partition的分布情况,以及当前机器的状态。当DBA增减机器时,只需要通过consol输入相应的指令,MtaSrvic便能够生成整个Balanc计划并执行。而之所以没有采用完全自动Balanc的方式,主要是为了减少数据搬迁对于线上服务的影响,Balanc的时机由用户自己控制。
在本文中我们将着重讲解在存储层如何实现数据和服务的负载平衡。
简单回顾一下,NbulaGraph的服务可分为graph,storag,mta。本文主要描述对于存储层(storag)的数据和服务的balanc。这些都是通过Balanc命令来实现的:Balanc命令有两种,一种需要迁移数据,命令为BALANCEDATA;另一种不需要迁移数据,只改变partition的raft-ladr分布(负载均衡),命令为BALANCELEADER。1
本文目录
?Balanc机制浅析
?集群数据迁移?Stp1:准备工作?Stp1.1查看现有集群状态?Stp1.2创建图空间?Stp2加入新实例?Stp3迁移数据?Stp4假如要中途停止balancdata?Stp5查看数据迁移结果?Stp6Balancladr?批量缩容?示例数据迁移2
Balanc机制浅析
在图数据库NbulaGraph中,Balanc主要用来balancladr和partition,只涉及ladr和partition在机器之间转移,不会增加或者减少ladr和partition的数量。
上线新机器并启动相应的Nbula服务后,storag会自动向mta注册。Mta会计算出一个新的partition分布,然后通过rmovpartition和addpartition逐步将数据从老机器搬迁到新的机器上。这个过程所对应的命令是BALANCEDATA,通常数据搬迁是个比较漫长的过程。但BALANCEDATA仅改变了数据和副本在机器之间的均衡分布,ladr(和对应的负载)是不会改变的,因此还需要通过命令BALANCELEADER来实现负载的均衡。这个过程也是通过mta实现的。3
集群数据迁移
以下举例说明BALANCEDATA的使用方式。本例将从3个实例(进程)扩展到8个实例(进程):
Stp1:准备工作部署一个3副本的集群,1个graphd,1个mtad,3个storagd(具体部署方式请参考集群部署文: