1. 背景
项目需要将华为云的OBS对象存储服务的存储桶bucket的内容迁移复制到AWS云的S3存储桶中,AWS中暂无实现改需求的云服务,所以采用开源的第三方软件rclone来实现。
rclone可以使用在linux操作系统中,是一种命令行形式的工具。
2. 已知环境信息
华为云OBS:
1. 已从统一身份认证服务IAM中获取到账号的access_key_id和secret_access_key;
2. 存储桶区域:西南-贵州 cn-southwest-2
AWS S3:
1. 已从统一身份认证服务IAM中获取到账号的access_key_id和secret_access_key;
2. 存储桶区域:新加坡 ap-southeast-1
3. 安装rclone
3.1 安装包下载
采用curl的形式下载,在Linux服务器中输入命令(amd64类型):
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
也可以在官网中下载对应的安装包,上传到服务器(可根据服务器类型选择不同的安装包):
官网下载地址:/
3.2 安装rclone
解压zip安装包:
unzip rclone-current-linux-amd64.zip
命令授权:
cd rclone-v1.60.0-linux-amd64/
#这里目录名称可能不一样,注意cd进入的目录即可
sudo cp rclone /usr/sbin/
sudo chown root:root /usr/sbin/rclone
sudo chmod 755 /usr/sbin/rclone
3.3 开始配置
rclone的配置来源于rclone.conf文件,软件支持使用命令生成配置文件,也可以直接在配置文件中输入相关的内容,在这两种方式中二选一即可。
3.3.1 (方式一)直接编辑配置文件
我们直接创建配置目录并编辑配置文件,简单明了,明白各个配置参数的意思即可。
mkdir -p /root/.config/rclone/
touch /root/.config/rclone/rclone.conf
vim /root/.config/rclone/rclone.conf
输入以下内容,根据环境信息进行相应的配置。
[s3] #1号配置的名称,随便定义
type = s3 #服务类型,为S3类型的服务
provider = AWS #供应商,我这里是AWS
env_auth = false
access_key_id = xxxxxx #这里对应的是aws账号access_key_id
secret_access_key = xxxxxxxx #这里对应的是aws账号secret_access_key
region = ap-southeast-1 #地区,我的S3桶位于新加坡区域
endpoint = s3.ap-southeast-1.amazonaws.com #endpoint,新加坡区域
[obs] #2号配置的名称,随便定义
type = s3 #服务类型,为S3类型的服务
provider = HuaweiOBS #供应商,我这里是华为云OBS
access_key_id = xxxxx #这里对应的是华为云账号access_key_id
secret_access_key = xxxx #这里对应的是华为云账号secret_access_key
region = cn-southwest-2 #地区,我的OBS桶位于贵阳区域
endpoint = obs.cn-southwest-2.myhuaweicloud.com #endpoint,贵阳区域
进行验证,输入命令查看两份配置各自的情况:
rclone lsd obs:
#注:lsd 列出
#注:obs: obs代表是配置的名称,即rclone.conf中的[obs]这行,冒号表示obs在配置对应的区域-贵阳-中的所有桶名
验证成功后,说明配置已经成功,可以访问到了,接下来跳转到3.4章节进行数据复制。
3.3.2 (方式二)生成配置文件
输入rclone config命令,进入生成配置文件的流程:
rclone config
输入n,新建配置。
输入配置的名称
输入5,选择存储类型为S3,泛指对象存储服务。
输入1,选择供应商为AWS
输入1
输入access_key_id
输入secret_access_key
输入区域,本次AWS的区域为新加坡,输入12或者ap-southeast-1
输入endpoint,输入12,对应的是新加坡区域
访问限制,直接回车,不需要。
是否配置高级设置,输入n否
是否保存,输入y保存
输入q退出。
按照此方法将源端和目的端的2个配置都配置完成。
配置文件位置/root/.config/rclone/rclone.conf
3.4 数据复制
完成配置文件并验证成功后,就可以开始进行数据复制了。
此处我们简单的使用copy或者sync参数
不同处是copy是增量复制,只复制目的端缺少的。例如两端数据一样后,源端删除了某个文件a.txt,再执行一次copy,目的端对应的文件a.txt仍然存在;
sync是同步,会将目的端同步为源端的情况,会删除目的端中源端没有的文件。例如两端数据一样后,源端删除了某个文件a.txt,再执行一次sync,目的端对应的文件a.txt也会被删掉。
copy:
#命令解析
#rclone copy增量复制,不会删除目的端比源端多的文件 -P显示速度 源端配置名:桶名 目的端配置名:桶名
rclone copy -P obs:ydstestbucket s3:prod-public-rewards
结果如下,可以看到复制过去了2个文件:
当我们删除obs中的1个文件后,再次执行命令时,就可以看到只check了1次,同时,在目的端,被删除的文件依然存在:
sync:
#命令解析
#rclone sync同步,将目的端同步为源端数据 -P显示速度 源端配置名:桶名 目的端配置名:桶名
rclone sync -P obs:ydstestbucket s3:prod-public-rewards
结果如下,可以看到复制过去了2个文件:
当我们删除obs中的1个文件后,再次执行命令时,就可以看到check了2次,同时也进行了一次删除,这时就完成了目的端向源端同步:
当然,rclone还有很多的参数和命令,可以自行学习。
3.5 后台窗口命令screen
当我们需要复制的桶里面数据过多时,一直开着命令窗口界面就不是一个很稳妥的办法,这时我们可以开启一个后台运行窗口来运行rclone复制命令。
3.5.1 安装screen
使用yum安装即可
yum install screen -y
3.5.2 创建后台窗口
#命令 screen -S 后台窗口名称
#例如:
screen -S window01
这时可以看到我们的命令行进入了一个新的窗口了。这时,我们可以在这个窗口中执行耗时较长的rclone数据复制命令。
例如,这里我们执行一个ping命令,使它一直进行ping操作:
然后Crtl+A+D退出后台窗口。
输入screen -ls可以查询到正在后台运行中的窗口:
screen -ls
输入screen -r 窗口名,可以再次进入窗口:
screen -r window01
可以看到后台窗口还在执行ping命令:
3.5.3 结束后台窗口
当后台窗口执行命令结束后,可以输入exit退出并关闭后台窗口,也可以在Crtl+A+D退出窗口后,kill掉screen窗口的进程,然后输入screen -wipe清理。
screen -S [name] #创建并进入后台窗口
screen -ls #列出后台窗口
screen -r [name] #进入后台窗口
screen -wipe #清理Dead的后台窗口
在后台窗口中输入exit退出并关闭窗口后,再次输入screen -ls可以看到没有窗口存在:
Crtl+A+D退出窗口后,kill掉screen窗口的进程,可以看到存在dead的窗口,然后输入screen -wipe清理即可:
文章来源:https://www.toymoban.com/news/detail-787668.html
推荐使用在后台窗口中exit的方式关闭,用完随手就关了,更简单。文章来源地址https://www.toymoban.com/news/detail-787668.html
到了这里,关于使用rclone工具实现华为云OBS至AWS S3数据迁移同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!