• [技术干货] Mongodb 3.2 云上数据迁移之纯手工版
    好些用户购买华为云dds(mongodb)时都会告知我们他在某某友商云上有mongdb数据库,想把友商上的数据库迁移过来,但在官网上没有发现mongodb数据迁移的工具,问怎么办?此时我们尴尬的说,目前数据迁移工具正在规划中,很快就能在官网上线mongodb数据迁移工具,到时手指动一动就能迁移数据了。但目前呢?目前怎么办?考虑到用户有这个云服务商之间迁移数据的需求,虽然华为云还没出mongodb自动迁移工具,但为解客户燃眉之急,我写些自己平时关于mongodb数据迁移的方法:那就是目前还是有办法的!当然只能利用开源工具进行纯手工操作了,虽然麻烦但也是一种手段,也能将友商数据迁移过来。好,下面我就详细和大家聊聊纯手工迁移mongodb的方案.(目前华为云dd只支持mongodb 3.2.7,因此我们讨论的方案都是围绕3.2.7版本进行的。)任何方案都是有业务场景的,不同的业务场景对应的方案的操作和复杂度是不一样的,我们按照业务场景的复杂度讲解。1. 业务数据不重要,允许业务长时间中断。(1). 停掉友商的mongodb服务,中断业务,不允许任何数据的变更。(2). 使用mongoexport导出数据mongoexport --host --port --ssl --sslAllowInvalidCertificates --type json--authenticationDatabase --username --password --db --collection --out (3).使用mongoimport将数据导入到华为云dds mongoimport--host --port --ssl--sslAllowInvalidCertificates --type json --authenticationDatabase --username --password --db --collection --file 注意:如果购买的华为云数据库有公网ip,可以在任何一台能连上公网ip的服务器上导入导出数据。如果没有购买公网ip,则先购买一台华为云的ecs,这台ecs和数据库在同一个网段和安全组,然后在这台ECS上导入数据。 (4). 将业务数据库ip切换至华为云mongodb,启动业务,数据迁移成功。2. 业务数据不重要,允许丢失数据但不能中断业务 这种业务场景一般是客户数据为临时,但业务不能中断必须保证在迁移的时间段业务是可用的。第二个业务场景和第一个很相似,因此迁移数据的方案也很相似,在数据迁移阶段不停掉友商数据库,数据迁移完成直接切换数据库ip到华为云dds,当然迁移这段时间的数据库就会丢失,因为没有从友商同步数据到华为云dds。3. 业务数据重要不允许丢失,业务不允许中断.这种业务场景中我们选取最具代表性也是最复杂的场景进行分析:我们选取用户存量数据大(上T的数据),ops高,一个小时就新增上百G的数据。因为存量数据大,数据迁移至少都在数小时以上,而ops高,那么在迁移的时间段会积累上百G的数据没有迁移到华为dds。Mongodb社区版没有提供增量导出,增量备份数据的方案,这些都是企业版mongodb才提供的。那么我们能用纯手工的方式(使用mongodb开源社区提供的生态工具)做到增量迁移数据吗?答案是利用开源工具是无法完美做到纯手工增量迁移的。原因如下:1. mongoexport/mongoimport : 首先说下mongoexport的工作原理,看上图是一边mongoexport导出数据一边往数据库里面**数据,显然最后导出的数据大于开始执行mongexport时数据库的数据。看了下mongoexport的源码,工作流程大概如下:首先获取开始执行mongoexport导出数据库的记录数量。得出这个记录数量后,mongoexport 开启一个cursor,利用这个cursor迭代读取数据,cursor每次读取的时候都是批量读取,最后一次迭代读取的数据量是在此时数据库总量和每次批量读取数据量中取最大值,如果此时数据库一直在变更数据那么很难确定最后总共读取的数量。因此客户在导出数据过程中一直在变更数据那么使用mongoexport导出的总数据量是无法确定的。那么迁移过程中新增数据怎么增量迁移呢?mongoexport本身并没有提供增量迁移的功能,但可以通过回放oplog的方法将迁移过程中增量的数据的oplog在目标机器上进行重做。不过Oplog记录的是所有的数据当然也包括不是这次迁移需要的数据的oplog,需要对oplog进行过滤重放,这块手工处理比较麻烦也容易出错,需要写程序进行自动处理。2. mongodump/mongorestore: mongodump可以备份所有数据然后利mongrestore进行恢复。对于备份过程中的增量数据,可以使用开源工具mongooplog处理增量oplog以达到增量备份数据的目的。但由于不同云服务商对shard的命名各不相同,因此恢复完成后必须登录数据库手动修改数据库里面shard的名字,这一步手动处理比较麻烦也容易出错。上述两种方法都需要注意oplog的大小,防止在备份过程中新增数据量过大,oplog数据被轮转覆盖,一旦覆盖就无法增量备份数据了。总结:目前纯手工操作的迁移数据的方式只能适应一些比较简单的业务场景,对于复杂场景,手工迁移存在操作复杂容易出错的缺点,程序化自动化的mongodb迁移工具不久就会出现在华为云官网上,那才是用户最贴心的解决方案。
  • [其他] MRS集群间数据迁移手册
    本帖最后由 雨化微尘 于 2018-6-14 15:22 编辑本文指导用户在集群之间进行数据迁移,假设是要将旧集群中的数据迁移到新安装的新集群中。支持迁移的数据有hdfs、hbase、hive数据,hive的元数据等,其他数据的迁移不在本指导范围内。1 限制条件新集群必须与旧集群在同一VPC当中以保证集群网络通信正常。旧集群需为非Kerberors认证集群。本文档不支持将MRS1.6版本以后的HBase数据迁移到1.6版本之前的集群。2 创建集群并配置网络2.1 创建MRS 1.5集群 1) 在华为云上点击创建集群的按钮进入集群创建页面。7301 2) 配置虚拟私有云与旧集群的虚拟私有云一致。72762.2 申请并配置集群弹性IP申请弹性IP使用户可通过弹性IP节点进入集群后台进行操作,例如使用客户端命令。申请操作如下:1) 在MRS管理页面中点击页面上方的服务列表,然后点击虚拟私有云。72772) 点击弹性IP地址到弹性IP界面。72783) 点击申请弹性IP创建弹性IP。4) 待集群创建完成后,在集群管理界面点击新创建的集群,进入到集群管理界面。72795) 进入到Master2节点中。72806) 选择弹性IP界面并点击绑定弹性IP。72817) 选择之前创建的弹性IP进行绑定。72828) 如果旧集群未绑定弹性IP,可根据上述步骤进行操作。2.3 配置安全组 1) 安全组的设置可建立集群与集群、集群与本地之前的通信。一个集群默认有两个安全组,可通过集群页面进行查看。72832) 在绑定弹性IP的后在界面上点击安全组,并下拉安全组信息,点击安全组ID进入设置界面。72843) 在设置界面对已存在的Master安全组添加规则。72854) 协议可根据需求进行选择,方向为入方向,源地址选择IP地址则是配置节点与集群的通信, IP地址填写需要与集群通信的IP地址,端口填32。72865) 源地址选择安全组,则是配置集群与集群的通信,下拉框内选择原集群的安全组,并且需要将Master和Slave安全组全都加上。728772886) 配置完Master节点的安全信息后,需要再配置Core节点的安全组信息,在集群的管理界面中点击任意一个Core节点进入到节点配置页面,完成步骤2-4操作。72897) 然后到旧集群中重复上述绑定安全组的操作,将新集群的安全组添加旧集群的规则中,使两个集群的网络可以互通。2.4 添加hosts信息通过弹性IP登录到新集群的每个节点上,将旧集群的hosts信息写入新集群的/etc/hosts文件当中。7290同理,将新集群的hosts信息写到旧集群中。在配置完后两个集群的通信已经完成。3 备份Hive元数据 1) 进入旧集群的集群管理界面。72912) 使用集群中的备份功能。72923) 点击创建备份任务72934) 备份模式为手动备份,备份服务选择DBService,路径类型选择LocalHDFS,目的端路径为 /tmp目录(可备份到其他目录),最大备份数设置为1,其余选项使用默认选项。72945) 创建完成后在界面上点击启动,开始备份元数据。72956) 在任务执行完成后,查看任务备份的目录地址。729672974 迁移用户数据4.1 第一轮Distcp拷贝数据在新集群中执行,将hbase、Hive数据从旧集群拷贝到新集群中:1) Distcp Hbase数据hadoop distcp -i hdfs://node-master1-rbufh:25000/hbase/data hdfs://hacluster/hbase2) Discp Hive数据hadoop distcp -i hdfs://node-master1-rbufh:25000/user/hive hdfs://hacluster/user3) Discp Hive元数据的备份数据hadoop distcp -i hdfs://node-master1-rbufh:25000/tmp/test_DBService_20170914054022 hdfs://hacluster/tmp备注:1.命令中标红的是旧集群的主namenode节点名称,需以实际名称为准。2.在MRS版本1.6.x及之前的版本,端口为25000。在MRS1.7.0版本后端口为9820。请根据安装的版本进行命令调整。4.2 手动flush之后停止旧集群的hbase和Hive1) 为了保证HBASE表的数据都能刷到磁盘上,可以在旧集群里面的hbase客户端中对每个表执行flush:flush ´tableName´2) 然后停止HBase和Hive服务。4.3 第二轮Distcp增量数据在新集群中执行,将HBase、Hive数据从旧集群拷贝到新集群中:1) Distcp HBase数据hadoop distcp –update –append –delete hdfs://node-master1-rbufh:25000/hbase/ hdfs://hacluster/hbase/2) Discp Hive数据hadoop distcp –update –append –delete hdfs://node-master1-rbufh:25000/user/hive hdfs://hacluster/user/hive4.4 还原Hive元数据 1) 在新集群中的创建恢复任务。72982) 恢复服务选择DBService,路径类型选择LocalHDFS,恢复路径填写通过distcp传输到新集群的备份数据的相对路径(例如/tmp/test_DBService_20170914054022/V100R002C60U20_DBSERVICE_20170914054047.tar.gz),原实例名称选择hacluster,然后点击执行恢复操作,完成Hive元数据恢复操作。72994.5 重启HBase为了使数据迁移生效,需要重启新集群的HBase服务,在启动过程中,HBase会加载当前HDFS上的数据。启动完成后,数据迁移成功。说明:如果从MRS1.6版本以前的集群数据迁移到MRS1.6版本以后的集群,在重启hbase之前需要执行以下命令。[code]hbase zkcli delete /hbase/table/hbase:hindex delete /hbase/table-lock/hbase:hindex[/code] 5 确认数据完整性(可选)5.1 HDFS使用HDFS命令查看旧集群的数据目录和新集群的数据目录大小是否相同,例如:hdfs dfs –du –s –h /user/hive/hdfs dfs –du –s –h /hbase5.2 Hive在beeline客户端使用select count(*) from ´tablename´命令查看所有表的数据量是否一致。5.3 HBase在HBase Shell中使用count ´tableName´ 命令查看所有HBase表中数据量是否和旧集群中表中数据量一致。
总条数:78 到第
上滑加载中