您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
图数据库设计实践| 存储服务的负载均衡和数据迁移
 
作者:陈恒
   次浏览      
2021-2-22
 
编辑推荐:
本文主要描述对于存储层(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 这个实例的状态变化。

说明:有颜色为红色说明对应的数值发生变化,如果数值不变,则为黑色。

 

 

   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]
 
最新文章
InfluxDB概念和基本操作
InfluxDB TSM存储引擎之数据写入
深度漫谈数据系统架构——Lambda architecture
Lambda架构实践
InfluxDB TSM存储引擎之数据读取
最新课程
Oracle数据库性能优化、架构设计和运行维护
并发、大容量、高性能数据库设计与优化
NoSQL数据库(原理、应用、最佳实践)
企业级Hadoop大数据处理最佳实践
Oracle数据库性能优化最佳实践
更多...   
成功案例
某金融公司 Mysql集群与性能优化
北京 并发、大容量、高性能数据库设计与优化
知名某信息通信公司 NoSQL缓存数据库技术
北京 oracle数据库SQL优化
中国移动 IaaS云平台-主流数据库及存储技术
更多...