跨区域复制是在不同OSS地域之间自动、异步复制文件,将源存储空间中文件的改动(新建、覆盖、删除操作)同步到目标存储空间中。该功能用于满足异地容灾和数据复制的需求。
更多跨区域复制的内容请参见开发指南中的管理跨区域复制。
开启跨区域复制
以下代码用于开启跨区域复制:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName); request.setReplicationRuleID("<yourRuleId>"); request.setTargetBucketName("<yourTargetBucketName>"); // 目标Endpoint以北京为例。 request.setTargetBucketLocation("oss-cn-beijing"); // 设置禁止同步历史数据。默认会同步历史数据。 request.setEnableHistoricalObjectReplication(false); ossClient.addBucketReplication(request); // 关闭OSSClient。 ossClient.shutdown();
查看跨区域复制
以下代码用于查看存储空间已开启的跨区域复制:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); List<ReplicationRule> rules = ossClient.getBucketReplication(bucketName); for (ReplicationRule rule : rules) { System.out.println(rule.getReplicationRuleID()); System.out.println(rule.getTargetBucketLocation()); System.out.println(rule.getTargetBucketName()); } // 关闭OSSClient。 ossClient.shutdown();
查看跨区域复制进度
跨区域复制进度分为历史数据同步进度和实时数据同步进度。
- 历史数据同步进度用百分比表示,仅对开启了历史数据同步的存储空间有效。
- 实时数据同步进度用新写入数据的时间点表示,代表这个时间点之前的数据已同步完成。
以下代码用于查看跨区域复制进度:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); BucketReplicationProgress process = ossClient.getBucketReplicationProgress(bucketName, "<yourRuleId>"); System.out.println(process.getReplicationRuleID()); // 是否开启了历史数据同步。 System.out.println(process.isEnableHistoricalObjectReplication()); // 历史数据同步进度。 System.out.println(process.getHistoricalObjectProgress()); // 实时数据同步进度。 System.out.println(process.getNewObjectProgress()); // 关闭OSSClient。 ossClient.shutdown();
查看可同步的目标地域
以下代码用于获取存储空间所能同步到的地域列表:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); List<String> locations = ossClient.getBucketReplicationLocation(bucketName); for (String loc : locations) { System.out.println(loc); } // 关闭OSSClient。 ossClient.shutdown();
关闭跨区域复制
以下代码用于关闭已开启的跨区域复制:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 关闭跨区域复制。关闭后目标存储空间内的文件依然存在,只是不再同步源存储空间内文件的所有改动。 ossClient.deleteBucketReplication(bucketName, "<yourRuleId>"); // 关闭OSSClient。 ossClient.shutdown();