本文介绍如何使用rsync工具实现阿里云文件存储NAS NFS协议文件系统之间的数据迁移。
前提条件
已拥有一个存有数据的NFS协议文件系统,并且拥有一个专有网络类型挂载点。
费用说明
NAS与NAS之间的迁移,会涉及如下费用:
准备工作
NAS文件系统之间进行数据迁移时,需要云服务器可以同时访问源NAS和目的NAS。因此,您需要确保通过同一个阿里云专有网络VPC可以同时访问两个NAS。
查看源文件系统挂载点信息。
配置目标文件系统挂载点。
文件系统同地域
目标文件系统与源文件系统的挂载点属于同一VPC下时,在获取目标挂载点信息后,即可参照实施迁移进行数据迁移。
目标文件系统与源文件系统的挂载点不属于同一VPC下时,可以采用以下三种方式准备挂载点:
在目标地域和可用区创建新的文件系统,自动创建新的挂载点。具体操作,请参见通过控制台创建通用型NAS文件系统。
说明如果您购买按量付费的通用型NAS(容量型/性能型/高级型)NFS协议文件系统,请选择与源挂载点相同的VPC网络和虚拟交换机,即可自动生成目标挂载点。在新的文件系统创建之后,可以购买资源包进行抵扣,以节省费用。
在已有的文件系统上创建新的挂载点。具体操作,请参见添加挂载点。
通过云企业网将目标挂载点与源挂载点的VPC网络互相连通。具体操作,请参见通过云企业网实现同地域跨VPC挂载NAS。
文件系统跨账号或跨地域
如果您的目标文件系统与源文件系统的挂载点信息不在同一个账号或同地域下时,则需通过云企业网将您的VPC网络互相连通。具体操作,请参见通过云企业网实现跨账号跨地域挂载NAS。
实施迁移
在准备好源和目标挂载点后,创建新的ECS,同时挂载两个NFS协议文件系统后,使用rsync工具进行复制即可实现数据迁移。迁移数据的操作如下所示。
挂载源和目标文件系统。
重要推荐购买新的临时ECS执行迁移操作。如果使用已有的ECS执行迁移操作,会与正在运行的业务争抢CPU和网络带宽资源。
登录ECS管理控制台单击创建实例后,配置如下重要信息。
地域:选择源文件系统所在的地域。
网络及可用区:选择源文件系统所在的VPC及可用区。
实例规格:一般选择最低规格即可。
镜像:选择CentOS 7.6。
存储:单击共享盘NAS(选填),选择添加文件存储进行配置,详情请参考下图示例。
说明如果源和目标挂载点都在同一个VPC网络中,可以在ECS购买页面中配置NAS挂载信息,ECS启动后,源和目标NAS文件系统会自动挂载。
如果源和目标挂载点不在同一个VPC网络或同一地域或同一账号中时,在ECS购买页面中只需配置源文件系统。在ECS完成创建后,手动挂载目标文件系统。关于手动挂载目标文件系统的操作,请参见挂载NFS协议文件系统。
在ECS创建成功后,源和目标NAS文件系统挂载完成,请执行以下命令确认。
mount | grep nas.aliyuncs.com
如果挂载成功,界面会显示以下信息。源文件系统挂载到了
/mnt/volumeA
目录,目标文件系统挂载到了/mnt/volumeB
目录。安装迁移工具。
执行以下命令安装迁移工具。
sudo yum install -y rsync tmux
说明rsync是负责执行复制的工具。
tmux是帮助查看进度的工具。
迁移存量数据。
执行以下命令,将源文件系统中的存量数据同步到目标文件系统中。
tmux sudo rsync -avP /mnt/volumeA/ /mnt/volumeB/
您还可以利用rsync并发拷贝上传数据,命令如下。
threads=<线程数量>; src=<源路径/>; dest=<目标路径/>; rsync -av -f"+ */" -f"- *" $src $dest && (cd $src && find . -type f | xargs -n1 -P$threads -I% rsync -av % $dest/% )
例如,线程数量为10,原路径为/abc ,目标路径为
/mnt1
。threads=10; src=/abc/; dest=/mnt1/; rsync -av -f"+ */" -f"- *" $src $dest && (cd $src && find . -type f | xargs -n1 -P$threads -I% rsync -av % $dest/% )
说明rsync命令中的源路径结尾必须带有/,否则同步后数据路径不能匹配。
tmux命令会新建tmux session。在tmux session中运行
rsync
可以帮助查看进度。如果在迁移过程中,与ECS的连接断开了,重新登录ECS后执行tmux attach
恢复tmux session,即可继续观察迁移进度。在测试使用的源文件系统中,共有一百万个100 KiB的文件,实际容量100 GiB,使用rsync迁移共耗时320分钟。
迁移增量数据。
在存量数据迁移过程中,如果源文件系统被其它ECS上运行的业务应用写入,那么在存量数据迁移结束后,需要另外同步新的增量数据。
停止业务应用。
为了避免不断有新的数据写入,需要在同步增量数据之前,在所有ECS和容器上停止使用源文件系统的业务应用。
重要在停止业务应用后,请不要手动删除源文件系统的任何数据,否则会在下一步操作中造成数据丢失。
请妥善选择业务低峰期操作。可以使用
fuser -mv <dir>
命令找到读写NAS的进程PID。
同步增量数据。
执行rsync命令,将存量数据迁移开始后的增量数据同步到目标文件系统中。
sudo rsync -avP --delete /mnt/volumeA/ /mnt/volumeB/
rsync命令会先扫描源路径,所以即使增量数据不多,也可能需要较长的时间完成。
警告--delete选项代表从目标文件系统中删除已在源文件系统中被删除的数据,请谨慎使用,避免将目标文件系统中的数据意外删除。
检查迁移结果。
在迁移完成后,执行以下rsync命令,检查目标文件系统是否与源文件系统一致。
sudo rsync -rvn /mnt/volumeA/ /mnt/volumeB/
如果两者数据一致,应该显示以下信息,中间不包含任何文件路径。
切换应用到新的文件系统
在数据迁移完成后,如果您需要将现有业务从旧的文件系统切换到新的文件系统上,请在所有ECS和容器上卸载旧的文件系统,然后挂载新的文件系统。
使用ECS直接挂载NAS文件系统。
执行
mount | grep nas.aliyuncs.com
记录现有NAS挂载信息,注意NAS挂载到的本地路径<dir>。使用
fuser -mv <dir>
找到读写NAS的进程PID,将其全部通过kill -9
命令停止。执行
umount <dir>
卸载旧的文件系统。挂载新文件系统到原本的<dir>路径。更多有关挂载参数的信息,请参见挂载NFS协议文件系统。
启动访问NAS的进程,确认读写正常。
修改/etc/fstab中的自动挂载信息,将旧的挂载点替换为新的挂载点。
使用K8s管理的容器挂载NAS文件系统。
修改现有的动态卷或静态卷YAML配置文件,将旧的挂载点替换为新挂载点。
用修改后的配置文件生成新pod,确认其挂载新的文件系统成功并可正常读写。
回收使用旧的文件系统的所有pod。
在业务切换到新的文件系统后,请继续保留旧的文件系统的数据至少一个星期。不要立刻删除旧的文件系统里的数据,以避免因数据误删除或误同步而造成数据丢失。