编辑推荐: |
本文主要描述对于存储层(storage)的数据和服务的
balance。这些都是通过 Balance 命令来实现的:Balance 命令有两种,一种需要迁移数据,命令为
BALANCE DATA ;另一种不需要迁移数据,只改变 partition 的
raft-leader 分布(负载均衡),命令为 BALANCE LEADER
。
本文来自vesoft,由火龙果软件Linda编辑、推荐。 |
|
平衡主体浅析
在图数据库Nebula Graph中,Balance主要用于balance Leader和partition,只涉及Leader和partition在机器之间转移,不会增加或减少Leader
and partition的数量。
上线新机器并启动相应的Nebula服务后,存储会自动向metametameta。Meta会计算出一个新的partition分布,然后通过删除partition
和add partition将数据从老机器搬迁到新的机器上。这个过程所对应的命令是BALANCE DATA
,通常数据搬迁是个比较漫长的过程。
但BALANCE DATA仅改变了数据和副本在机器之间的均衡分布,leader(和对应的负载)是不会改变的,因此还需要通过命令BALANCE
LEADER来实现负载的均衡。这个过程也是通过meta实现的。
大规模数据迁移
举例以下说明BALANCE DATA的使用方式本。译文将从3个实例(进程)扩展到8个实例(进程):
步骤1:准备工作
部署一个3副本的副本,1个图形,1个metad,3个存储(具体部署方式请参考部署部署文:https
://zhuanlan.zhihu.com/p/80335605 ),通过SHOW HOSTS 命令可以看到重新的状态信息:
步骤1.1查看现有状态
按照部署部署文档部署好3副本合并之后,用SHOW HOSTS 命令查看下现在可用情况:
SHOW HOSTS 返回结果解释:
IP,端口表示当前的存储实例。这个最大化启动了3个storaged服务,并且还没有任何数据。(192.168.8.210:34600,192.168.8.210:34700,192.168.8.210:34500)
状态表示当前实例的状态,目前有在线/离线两种。当机器下线以后(metad在一段间隔内收不到其心跳),将其更改为离线。这个时间间隔可以在启动metad的时候通过设置expired_threshold_sec来修改,当前默认值是10分钟。
领导人数:表示当前实例
领导者分布:表示当前领导者在每个空间上的分布,目前尚未创建任何空间。(space可以理解为一个独立的数据空间,类似MySQL的数据库)
分区分布:不同空间中分区的数量。
可以看到 领导分布和 分区分布暂时都没有数据。
步骤1.2创建图空间
创建一个称为test的图空间,包含100个分区,每个分区有3个副本。
片刻后,使用SHOW HOSTS命令显示累积的分布。
如上,创建包含100个_partitio_n和3个副本图空间之后,3个实例的 领导分布和_Partition分布_具有对应的数值,对应的_Partition分布_都为100。当然,这样的learder分布还不均匀。
步骤2加入新实例
启动5个新存储的实例进行扩容。启动完成后,使用SHOW HOSTS命令查看新的状态:
上新实例之后,占用由原来的3个实例变成了8个实例。上图数据库icon为蓝色的图标为添加的5个实例,此时仅被加入了替代,新实例的状态为Online
,,但此时 领导者分布和_分区分布_并没有数值,说明还不会参与服务。
步骤3迁移数据
运行BALANCE DATA命令。
如果已经积累了新机器加入,则生成一个新的计划ID。对于已经平衡的转移,重复运行BALANCE DATA不会有任何新操作。如果当前有正在执行的计划,那会显示当前计划的ID。
也可通过BALANCE DATA $id查看这个balance的具体执行进度。
BALANCE DATA $id 返回结果说明:
第一列balanceId,spaceId:PARTID,SRC-> DST表示一个具体的平衡任务以。1570761786,
1:88, 192.168.8.210:34700->192.168.8.210:35940
为例:
1570761786为余额ID
1:88,1表示当前的spaceId(也就是space test的ID),88表示迁移的partitionId
192.168.8.210:34700->192.168.8.210:35940,表示数据从192.168.8.210:34700搬迁至
192.168.8.210:35940。而原先192.168.8.210:34700中的数据将会在迁移完成后再GC删除
第二列表示当前task的运行状态,有4种状态
成功:运行成功
失败:运行失败
进行中:运行中
无效:无效的任务
最后对所有任务运行状态的统计,部分分区尚未完成迁移。
步骤4如果要中途停止余额数据
BALANCE DATA STOP 命令已停止已经开始执行的余额数据计划。如果没有正在运行的balance计划,则返回错误提示。如果有正在运行的balance计划,则返回计划对应的ID。
由于每个balance计划对应BALANCE DATA STOP几个平衡任务,不会停止已经开始执行的balance任务,只会取消后续的task,已经开始的task将继续执行直至完成。
用户可以在BALANCE DATA STOP之后输入BALANCE DATA $id来查看已经停止的balance计划状态。
所有已经开始执行的任务完成后,可以再次执行BALANCE DATA,重新开始余额。如果之前停止的计划中有失败的任务,逐步继续执行之前的计划,如果之前停止的计划中所有任务新建一个balance计划并开始执行。
步骤5查看数据迁移结果
大多数情况下,搬迁数据是个比较漫长的过程。但是搬迁过程不会影响现有服务。现在可以通过SHOW HOSTS查看运行后的partition分布。
分区分布相近,分区总数300不变且partition已均衡的分布至各个实例。
如果有运行失败的任务,可再次运行BALANCE DATA命令进行修复。如果多次运行仍无法修复,请与社区联系GitHub。
步骤6平衡领导者
BALANCE DATA仅能平衡分区,但是领导者分布仍然不均衡,意味着这旧实例的服务较重,新而实例的服务能力未得到充分使用运行。BALANCE
LEADER重新分布筏负责人:
片刻后,使用SHOW HOSTS命令查看,此时Raft Leader已均匀分布至所有的实例。
如上,BALANCE LEADER 成功执行后,添加的实例和原来的实例(对应上图图标蓝色和黑色图标)的_Leader
distribution _相近,所有实例已均衡,可以,也可以 看到余额命令只涉及Leader和partition在物理机器上的转移,并且没有增加或减少Leader和partition。
批量缩容
星云图支持指定需要下线的机器进行批量缩容语法为。BALANCE DATA REMOVE $host_list,例如:BALANCE
DATA REMOVE 192.168.0.1:50000,192.168.0.2:50000,将指定移除192.168.0.1:50000,192.168.0.2:50000两台机器。
如果可移除指定机器后,不满足副本数要求(例如剩余机器数小于副本数),星云图将拒绝本次balance请求,并返回相关错误码。
示例数据迁移
上面讲了如何从3个实例变成8个实例的实例,如果你对上文有疑问,记得在这里的评论区留言哈。我们现在看看上面迁移的过程,192.168.8.210:
34600 这个实例的状态变化。
说明:有颜色为红色说明对应的数值发生变化,如果数值不变,则为黑色。
|