在运维中,我们通常使用rsync来进行文件的备份和传输,向较于scp、ftp等工具,rsync可以实现差异同步和断点续传(之前的文章提过【Linux小技巧之断点续传文件rsync】)。但rsync也存在局限性,在上篇文章【万兆网络数据传输-scp加速】中提到过,在万兆网络环境下scp和rsync的传输速度都不太理想,及时修改加密方式,性能提升也是有限。

文章中提到bbcp的传输速度远高于rsync,那么bbcp是否能够替代rsync来实现差异同步和断点续传呢?答案是肯定的。

示例语句如下:

bbcp  -a bbcp_tmp  -fvrep /data/taos root@c3-65:/data/bak/

以上语句会将本地/data/taos目录同步到c3-65的/data/bak 目录下。如果遇到传输错误或文件更新,再次运行以上命令,仅会同步差异文件(注意:会同步整个文件)。

参数说明:
-a dir append mode to restart a previously failed copy.
记录传输进度。不加此参数会重新同步所有文件。
-f forces the copy by first unlinking the target file before copying.
删除目标差异文件。
-e error check data for transmission errors using md5 checksum.
对文件进行md5校验。不加此参数,不会重传差异文件。
-r copy subdirectories and their contents (actual files only).
对文件夹进行递归传输。
-v verbose mode (provides per file transfer rate).
显示传输进度。

福利

可以使用bbcp/rsync 进行TDengine数据库的备份和迁移。
对于企业版,TDengine提过了专业的迁移和同步工具taosX,可以实现数据的迁移、备份、灾备。
但对于社区版,就无法使用这个工具了。而使用taosdump进行数据的导出和导入,对于大数据量基本上是不可能的。

因此,我们可是使用bbcp/rsync来实现数据的备份和迁移。

数据库迁移
  • 如果源和目标的fqdn保持不变,那么直接将数据目录复制到目标服务器,修改dataDir,即可实现数据库集群的迁移。
  • 如果fqdn发生了改变,则需要修改相应配置(步骤繁琐,不在此介绍)。
数据库备份

对于大量数据,使用taosdump进行逻辑数据的导出导入是不现实的,一是导出后数据体积会放大5-20倍,需要占用大量空间;二是在非顺序写入场景,无法实现增量备份;三是导出速度堪忧,可能无法追上数据写入速度。

因此唯一可行的方法是直接备份数据目录。为了保证数据能及时更新,使用bbcp/rsync 会比scp更有效率。但需要注意以下几点:

  1. 备份时尽量不要进行数据库写入操作,防止文件发生变化。可以在备份前先flush database;如果可以停止数据库则是最好的。
  2. 对于集群环境,需要备份每个节点的数据目录。
  3. 使用bbcp/rsync备份数据目录并不能保证备份后的数据完全可用(当某些文件传输不完整时,甚至无法启动数据库)