本文介绍如何在阿里云文件存储NFS文件系统之间迁移数据。

前提条件

拥有一个存有数据的NFS文件系统,并且拥有一个专有网络类型挂载点。

准备工作

  1. 查看源挂载点信息。
    迁移之前请记录源文件系统的挂载点和所属的专有网络VPC信息,详情请参见查看挂载点列表
    说明 如果您的文件系统只有经典网络挂载点,需要创建一个专有网络挂载点,详情请参见添加挂载点
  2. 配置目标挂载点。
    给目标NFS文件系统准备挂载点,可以采用以下三种方式:
    • 在目标地域和可用区创建新的文件系统,自动创建新的挂载点。
    • 在已有的文件系统上找到已有的挂载点。
    • 在已有的文件系统上创建新的挂载点。
    说明 如果目标文件系统和源文件系统在同一地域,为了方便迁移操作,请尽量保证目标挂载点与源挂载点在同一个VPC网络内。
    1. 新建文件系统。
      如果需要创建新文件系统,详情请参见创建文件系统
      说明 如果您购买按量付费的通用型(容量型/性能型)NFS文件系统,请选择与源挂载点相同的VPC网络和虚拟交换机,即可自动生成目标挂载点。在新的文件系统创建之后,可以再购买存储包进行绑定,以节省费用。
    2. 找到已有挂载点。

      如果已有的目标文件系统拥有一个与源挂载点处于相同VPC网络的挂载点,即可直接使用。详情请参见查看挂载点列表

    3. 新建挂载点。
      添加新的挂载点,详情请参见添加挂载点。以下情况需要添加挂载点:
      • 如果您希望将数据迁移至已有的文件系统,而已有的挂载点与源挂载点属于不同的VPC网络。
      • 创建新的文件系统后,没有自动生成挂载点。
      说明 在添加新挂载点时,尽量选择源挂载点所在的VPC网络。

实施迁移

在准备好源和目标挂载点后,创建新的ECS,同时挂载两个NFS文件系统后,使用rsync工具进行复制即可实现数据迁移。迁移数据的操作如下所示。

  1. 挂载源和目标文件系统。
    注意 推荐购买新的临时ECS执行迁移操作。如果使用已有的ECS执行迁移操作,会与正在运行的业务争抢CPU和网络带宽资源。
    登录ECS管理控制台创建实例后,在ECS购买页面的第一页选择以下配置。
    • 地域及可用区:选择源文件系统所在的地域及可用区。
    • 实例:一般选择最低规格即可。
    • 镜像:选择CentOS 7.6。
    • 存储:点击NAS存储下方的增加文件存储进行配置,详情请参考下图示例。
      说明
      • 如果源和目标挂载点都在同一个VPC网络中,可以在ECS购买页面中配置NAS挂载信息,ECS启动后,源和目标NAS文件系统会自动挂载。
      • 如果源和目标挂载点不在同一个VPC网络中,在ECS购买页面中只需配置源文件系统。在ECS完成创建后,手动挂载目标文件系统,详情请参见跨VPC挂载文件系统
      增加文件存储
    在ECS创建成功后,源和目标NAS文件系统挂载完成,请执行以下命令确认。
    mount | grep nas.aliyuncs.com
    如果挂载成功,界面会显示以下信息。源文件系统挂载到了/mnt/volumeA目录,目标文件系统挂载到了/mnt/volumeB目录。挂载成功
  2. 安装迁移工具。
    执行以下命令安装迁移工具。
    sudo yum install -y rsync tmux
    说明
    • rsync是负责执行复制的工具。
    • tmux是帮助查看进度的工具,详情请参见tmux用户指南
  3. 迁移存量数据。
    执行以下命令,将源文件系统中的存量数据同步到目标文件系统中。
    tmux
    sudo rsync -avP /mnt/volumeA/ /mnt/volumeB/
    注意
    • rsync命令中的源路径结尾必须带有/,否则同步后数据路径不能匹配。
    • tmux命令会新建tmux session。在tmux session中运行rsync可以帮助查看进度。如果在迁移过程中,与ECS的连接断开了,重新登录ECS后执行tmux attach恢复tmux session,即可继续观察迁移进度。
    • 在测试使用的源文件系统中,共有一百万个100KB的文件,实际容量100GB,使用rsync迁移共耗时320分钟。
  4. 迁移增量数据。
    在存量数据迁移过程中,如果源文件系统被其它ECS上运行的业务应用写入,那么在存量数据迁移结束后,需要另外同步新的增量数据。
    1. 停止业务应用。
      为了避免不断有新的数据写入,需要在同步增量数据之前,在所有ECS和容器上停止使用源文件系统的业务应用。
      注意
      • 在停止业务应用后,请不要手动删除源文件系统的任何数据,否则会在下一步操作中造成数据丢失。
      • 请妥善选择业务低峰期操作。可以使用fuser -mv<dir> 命令找到读写NAS的进程PID。
    2. 同步增量数据。
      执行rsync命令,将存量数据迁移开始后的增量数据同步到目标文件系统中。
      sudo rsync -avP --delete /mnt/volumeA/ /mnt/volumeB/
      注意
      • --delete选项代表从目标文件系统中删除已在源文件系统中被删除的数据,请谨慎使用,避免将目标文件系统中的数据意外删除。
      • rsync命令会先扫描源路径,所以即使增量数据不多,也可能需要较长的时间完成。
  5. 检查迁移结果。
    在迁移完成后,执行以下rsync命令,检查目标文件系统是否与源文件系统一致。
    sudo rsync -rvn /mnt/volumeA/ /mnt/volumeB/
    如果两者数据一致,应该显示以下信息,中间不包含任何文件路径。NFS文件系统迁移结果

切换应用到新的文件系统

在数据迁移完成后,如果您需要将现有业务从旧的文件系统切换到新的文件系统上,请在所有ECS和容器上卸载旧的文件系统,然后挂载新的文件系统。

如果使用ECS直接挂载NAS文件系统:
  1. 执行mount | grep nas.aliyuncs.com记录现有NAS挂载信息,注意NAS挂载到的本地路径<dir>
  2. 使用fuser -mv <dir>找到读写NAS的进程PID,将其全部通过kill -9命令停止。
  3. 执行umount <dir>卸载旧的文件系统。
  4. 挂载新文件系统到原本的<dir>路径,详情请参见手动挂载NFS文件系统中的推荐参数。
  5. 启动访问NAS的进程,确认读写正常。
  6. 修改/etc/fstab中的自动挂载信息,将旧的挂载点替换为新的挂载点。
如果使用K8S管理的容器挂载NAS文件系统:
  1. 修改现有的动态卷或静态卷yaml配置文件,将旧的挂载点替换为新挂载点。
  2. 用修改后的配置文件生成新pod,确认其挂载新的文件系统成功并可正常读写。
  3. 回收使用旧的文件系统的所有pod。
注意 在业务切换到新的文件系统后,请继续保留旧的文件系统的数据至少一个星期。不要立刻删除旧的文件系统里的数据,以避免因数据误删除或误同步而造成数据丢失。