使用rsync从旧文件系统同步到CFS文件系统
所有文档

          文件存储 CFS

          使用rsync从旧文件系统同步到CFS文件系统

          本文档提供了一种基于rsync的数据同步方案,帮助用户将存储在本地机房、其它云厂商的文件系统数据备份或迁移到百度智能云CFS中。

          以下假设被同步的文件系统已经挂载在一台或者多台服务器上,路径为/old_fs

          操作步骤

          1. 登录云服务器

            1. 在云服务器BCC上绑定EIP,从而拥有公网IP。
            2. 确保远端服务器可以通过ssh方式登录到BCC的公网IP。
          2. 配置公钥

            登录远端服务器,执行如下命令:

            ssh-keygen -t rsa      #创建公钥,会提示输入信息,可以不用管,一直敲回车即可
            cat ~/.ssh/id_rsa.pub  #查看生成的公钥,将这里的内容拷贝,准备输入下一步中的文件中 

            登录BCC,编辑文件~/.ssh/id_rsa.pub,将上一步拷贝的公钥,输入到这里。

            至此,现在从远端服务器,即可无需秘钥登录并访问BCC。

          3. 策略评估

            用户需要评估以下因素,以采用更合适的方式来同步数据:

            1. 同步期间是否可以暂停对已有文件系统的写入。如果可以,则只执行一次全量同步(同步方案4.1)。如果不可以,请评估同步期间的新写入数据量,若数据量很少,可以使用全量同步+一次增量同步(同步方案4.2),否则使用周期性同步方案4.3。
            2. 文件系统的数据量。若已有文件系统数据量较大,则分目录进行同步。每个子目录的同步,是不相关的,既可同时进行,也可序列化执行。同时,CFS支持多个虚机同时挂载,适当增加虚机的数量来并发执行子目录的同步可提高同步的速度。
          4. 同步方案

            同步过程会针对用户对旧文件系统是否有写操作而略有不同。下面分别讨论以下几种情况:

            4.1 用户没有写IO请求到原有文件系统

            首先确认CFS文件系统已经被mount到BCC上机器上的/mnt/cfs/或其他目录上,接着在远端服务器上执行如下命令:

            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_1
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_2
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_3
            ...

            注释

            –z:允许压缩

            –v:冗长

            –r:递归

            user:bcc的登录账号

            bcc_ip:BCC的公有IP地址

            4.2 用户有少量的写IO请求到原有文件系统

            若用户有写IO的请求,此时通过rsync命令,不能保证原文件系统和CFS文件系统保持绝对同步。但rsync内部的算法可以保证两个文件系统是大部分同步的。用户可以在第一次rsync执行完毕后,暂停应用程序的写操作IO到原有文件系统。具体步骤如下:

            1. 用户对旧文件系统的写IO可以继续。在远端服务器上执行如下命令:
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_1
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_2
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_3
            ...
            1. 暂停用户对旧文件系统的写IO。在远端服务器上执行如下命令:
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_1
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_2
            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_3
            ...

            第二次执行rsync操作时,由于已经做过一次同步操作,第二次会根据计算两个文件的差异,然后进行同步。因此,第二次执行rsync操作会快很多。

            4.3 用户有大量的写IO请求到原有文件系统

            当用户的应用程序有大量的写IO,同时又不能暂停IO的情况下。理论上无法通过同步保证旧文件系统和CFS的强一致性。此时可以考虑周期的运行rsync操作,尽可能让两个文件系统保持最大程度的一致。在Linux系统下,有多重周期执行命令的办法,这里我们推荐使用crontab,它可以方便的周期的调用rsync。例如:

            crontab -e

            接着将下列内容输入,其含义是每间隔1小时调动一次rsync命令。

            * */1 * * * rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_1

            可通过如下命令查看crontab命令是否配置成功。

            crontab -l

            当用户经过一段周期的从旧文件系统到百度CFS的同步后,选择一个合适时机,暂停应用程序对旧文件系统的写操作,同时删掉crontab的任务,操作如下:

            crontab -e #根据提示,删除rsync任务并退出

            最后再手动的执行以下rsync命令,再次确保两个文件系统完全同步。

            rsync -zvr /old_fs/sub_folder_1/ user@bcc_ip:/mnt/cfs/sub_folder_1
            rsync -zvr /old_fs/sub_folder_2/ user@bcc_ip:/mnt/cfs/sub_folder_2
            rsync -zvr /old_fs/sub_folder_3/ user@bcc_ip:/mnt/cfs/sub_folder_3
            ...

            此时,用户则可以从旧的服务器迁移应用程序到百度BCC服务器上。

          5. 统计结果

            每当执行完rsync后,会显示出这次同步的结果,其中包括:

            1. 同步花费的时间;
            2. 传送了多少字节;
            3. IO传送的速度;
            4. 一共有多少文件被同步。
          上一篇
          使用SFTP上传下载CFS文件系统数据
          下一篇
          API参考