BDS支持Cassandra进行极速数据迁移-阿里云开发者社区

开发者社区> 阿里云数据库> 正文

BDS支持Cassandra进行极速数据迁移

简介: 阿里云BDS服务是一款专门服务NoSQL迁移的服务,本文主要介绍BDS如何支持Cassandra数据库迁移。

背景

Apache Cassandra 做数据迁移一直是一件比较难的事情,特别是要做到无缝、不停机的迁移更是难上加难。现在社区在Cassandra之间迁移数据有推荐使用COPY 命令,sstableloader等方式,但是上述方式都不具备高效的迁移的能力,且各有各自的弊病,COPY 是在cqlsh 端启动多线程的范围scan,把数据读出来成为CSV格式文本,然后批量写入Cassandra,数据量大的时候满足不了需求;sstableloader则会出现源端一份数据在目标端多副本keyspace下多重迁移,浪费迁移时间和空间。
BDS 是阿里云NoSQL 团队内部孵化的一款NoSQL 数据迁移的服务,经过阿里巴巴集团内部多年打磨,并在阿里云上为公有云用户提供服务,最近BDS 支持了Cassandra数据迁移,通过BDS的服务可以满足用户对海量Cassandra数据迁移、高性能迁移、极低业务中断的迁移成本等各方面的诉求。

实现原理

稳定、高性能、低迁移时间、低业务影响是BDS迁移的首要宗旨,通过分析发现要想达到最快的迁移时间,最好的方式就是进行文件级别的copy,Cassandra集群每一个节点是预先分配好相关的数据范围,如果我们可以做到源端每个范围的数据直接对等迁移,在目标端回放,就可以做到最大速度迁移。1.jpg

图1
如图1所示,左边源集群由4个节点(W/X/Y/Z)组成,每个节点会预先分配好对应的关联数据范围,这里我们简单让每个节点具备一个token分配具体数据范围就是(10-40]加上(40-max]以及加上(min-40]。
BDS迁移前需要对应有一个关联的目标集群比如这里是图1右边的4个节点集群,使用BDS进行迁移的时候,BDS会按照如下步骤进行迁移:

  • 1.目标集群回放源集群的拓扑状态,例子中就是:w'负责10,X'负责20,Y'负责30,Z'负责40,那么最终目标集群负责的范围也是一一映射的为(10-40]加上(40-max]以及加上(min-40];
  • 2.BDS把源集群各个节点的sstable文件对等的拷贝到目标集群的对等节点,例子中就是:W->W',X->X',Y->Y',Z->Z';
  • 3.对于新增的数据BDS也是拷贝文件,但是主要是源集群Cassandra的incremental backup开启后的会在backups目录下新生成的各个增量文件,进行对等的copy;
  • 4.对于所有copy的文件,在目标端直接refresh下,在目标集群内存中load下sstable文件元信息;

通过上述方式,会保证全量以及增量数据可以被完整以及快速的被迁移。 通过测试以及分析,BDS 该种迁移方案的迁移速度,几乎就是集群节点间远程拷贝文件的速度,非常快,举个例子:3个节点,每个节点1T数据的集群,集群总数据3T,在迁移带宽150MB/s的网络环境下,2个小时可以完成迁移远高于其他迁移方案。

方案对比

方案 详情 优点 缺点 迁移复杂度
COPY FROM & COPY TO cqlsh 并发scan数据转存csv文件,然后写入Cassandra cqlsh支持的命令 数据量大后支撑不了,迁移需要停机离线迁移 中,cqlsh直接使用命令行导入导出文件即可
sstableloader 使用该命令,对sstable文件进行操作在目标端进行stream传输 比COPY FROM/TO 快 表3副本情况下,会造成迁移速度太慢,以及目标集群可能是9份数据冗余 高,人工执行sstable文件的load
BDS for cassandra BDS迁移直接copy文件,进行load 快,稳定,极少停机,业务影响少 需要购买BDS服务 简单,购买以后,配置双方地址,页面点击即可

操作流程

  • 1.在https://cn.aliyun.com/product/hbase 页面购买BDS服务
    1.jpg
  • 2.用户准备好需要迁移到的环境,比如购买好云Cassandra服务或者自建好Cassandra服务
  • 3.需要迁移的源cassandra集群开启sftp服务,具体开启操作可以谷歌,如果需要增量迁移需要用户源集群所有节点,通过nodetool 开启incremental backup。
  • 4.BDS里面配置源集群和目标集群的endpoint地址,详细配置如下:

    • 4.1. 购买好的BDS服务配置好访问源集群和目标集群所有ip的白名单,且如果用户 使用云cassandra服务,需要在源集群点击添加白名单,把bds的对应ip加入;2.jpg
    • 4.2. BDS页面内,点击基本信息->UI访问->引擎软件UI->BDS,跳转链接点击高级访问,输入账户密码,如果不知道账户密码,可以再UI访问页面点击"重置UI访问密码"进行密码重置;3.jpg
  • 4.3.新页面数据源管理,添加数据源,这里需要添加源集群数据源和目标集群数据源;其中"集群名"可以取可辨识的集群名即可,"数据源类型"选择"Cassandra3x";5.jpg
    "数据源参数"参考模板如下:
{
  "cassandraPassword":"访问cassandra集群密码",
  "cassandraUser":"访问cassandra集群账户",
  "confDir":"你的cassandra 配置文件目录",
  "dataDir":[
    "你cassandra 数据的目录"
  ],
  "hosts":[
    {
      "ip":"集群cassandra ip,如果有多个的话,按照下面方式组织"
    },
    {
      "ip":"多个集群ip第二个,依次类推"
    },
    {
      "ip":"多个集群ip第三个"
    }
  ],
  "nodetoolCmd":"你cassandra的nodetool的目录地址,细化到nodetool,比如xxx/bin/nodetool",
  "sshPassword":"ssh可以访问的密码",
  "sshUser":"ssh可以访问的账户",
  //以下2行目标集群数据源模板需要配置下,启动和停止cassandra命令需要写绝对路径,真实数据源配置文件中删除本行提示
  "startCmd":"su cassandra -l -c '启动cassandra命令'", 
  "stopCmd":"su cassandra -l -c '停止cassandra命令'"
}

上述配置,需要数据源集群和目标集群的数据源都配置一份,配置的模板如上。

  • 5.cassandra迁移选项中一键搬站目录下,配置好源集群和目标集群数据源以后,可以配置对应需要迁移的表,配置完成,点击迁移服务;
  • 4.jpg

附言

为了营造一个开放的 Cassandra 技术交流环境,社区建立了微信群公众号和钉钉群,为广大用户提供专业的技术分享及问答,定期开展专家技术直播,欢迎大家加入。
另外阿里云提供商业化Cassandra使用,中国站和国际站都支持:https://www.aliyun.com/product/cds
阿里云近期推出云原生多模数据库Lindorm,欢迎大家使用:https://www.aliyun.com/product/apsaradb/lindorm


47fe6c9c326148a8828ab044ad3c6840.jpg





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云数据库
使用钉钉扫一扫加入圈子
+ 订阅

帮用户承担一切数据库风险,给您何止是安心!

官方博客
链接