使用rclone工具实现华为云OBS至AWS S3数据迁移同步

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清理即可:

         推荐使用在后台窗口中exit的方式关闭,用完随手就关了,更简单。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Java实现华为云OBS上传,你可以使用OBS Java SDK提供的API。下面是一个简单的示例代码: 首先需要在pom.xml中添加OBS Java SDK的依赖: ```xml <dependency> <groupId>com.obs</groupId> <artifactId>obs-sdk-java</artifactId> <version>3.20.1</version> </dependency> ``` 然后可以使用以下代码实现文件上传: ```java import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.PutObjectRequest; import com.obs.services.model.PutObjectResult; import java.io.File; public class ObsUploader { public static void main(String[] args) { String endPoint = "obs.cn-north-1.myhwclouds.com"; // OBS服务的EndPoint String ak = "AccessKeyId"; // 访问OBS的Access Key Id String sk = "SecretAccessKey"; // 访问OBS的Secret Access Key String bucketName = "your-bucket-name"; // 存储桶名称 String objectKey = "your-object-key"; // 对象在OBS中的唯一标识符 File file = new File("your-file-path"); // 待上传的文件路径 ObsClient client = new ObsClient(ak, sk, endPoint); // 创建OBS客户端 try { PutObjectRequest request = new PutObjectRequest(bucketName, objectKey, file); // 创建上传请求 PutObjectResult result = client.putObject(request); // 上传文件 System.out.println("Upload success. ETag: " + result.getEtag()); } catch (ObsException e) { System.out.println("Upload failed. Error message: " + e.getErrorMessage()); } finally { client.close(); // 关闭OBS客户端 } } } ``` 在代码中,需要替换为自己的Access Key Id、Secret Access Key、存储桶名称、对象唯一标识符、待上传文件的路径等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值