OSS采用多可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一地域(Region)的多个可用区。当某个可用区不可用时,仍然能够保障数据的正常访问。OSS同城冗余存储提供99.9999999999%(12个9)的数据设计持久性以及99.995%的服务可用性。
使用场景
同城冗余存储能够提供机房级容灾能力。当发生断网、断电或者灾难事件导致某个机房不可用时,OSS仍能继续提供强一致性的服务。整个故障切换过程用户无感知、业务不中断、数据不丢失,满足关键业务系统对于恢复时间目标(RTO)以及恢复点目标(RPO)等于0的强需求。
注意事项
支持的存储类型
OSS的同城冗余存储目前支持标准存储类型、低频访问存储类型。这两种存储类型的各项对比指标如下:
对比指标 | 标准存储类型 | 低频访问存储类型 |
---|---|---|
数据设计持久性 | 99.9999999999%(12个9) | 99.9999999999%(12个9) |
服务可用性 | 99.995% | 99.50% |
对象最小计量单位 | 无 | 64 KB |
最短存储时间 | 无 | 30天 |
数据取回费用 | 无 | 按实际获取的数据量收取,单位GB |
数据访问 | 实时访问,毫秒延迟 | 实时访问,毫秒延迟 |
图片处理 | 支持 | 支持 |
使用OSS控制台
- 登录OSS管理控制台。
- 单击Bucket列表,然后单击创建Bucket。
- 在创建Bucket面板,按如下说明配置各项参数。
参数 是否必选 描述 Bucket名称 是 填写Bucket名称。命名规则如下: - 所选定的存储空间名称在阿里云OSS的所有现有存储空间名称中必须具有唯一性。
- 只能包括小写字母、数字和短划线(-)。
- 必须以小写字母或者数字开头和结尾。
- 长度必须在3~63字符之间。
地域 是 Bucket的数据中心。 如需通过ECS内网访问OSS,请选择与您ECS相同的地域。更多信息,请参见 OSS访问域名使用规则。
说明 如果您创建的存储空间位于中国内地,您需要在实名登记页面提交您的相关信息完成实名登记。Endpoint 是 Bucket所在地域对应的外网Endpoint。 所属资源组 否 选择Bucket所在的资源组。 存储类型 是 Bucket的存储类型。 - 标准存储:提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问。适用于各种社交、分享类的图片、音视频应用、大型网站、大数据分析等业务场景。
- 低频访问存储:提供高持久性、较低存储成本的对象存储服务。有最低存储时间(30天)和最小计量单位(64 KB)要求。支持数据实时访问,访问数据时会产生数据取回费用,适用于较低访问频率(平均每月访问频率1到2次)的业务场景。
- 归档存储:提供高持久性、极低存储成本的对象存储服务。有最低存储时间(60天)和最小计量单位(64 KB)要求。数据需解冻(约1分钟)后访问,解冻会产生数据取回费用。适用于数据长期保存的业务场景,例如档案数据、医疗影像、科学资料、影视素材等。
- 冷归档存储:提供高持久性的对象存储服务,费用在四种存储类型最低。有最低存储时间(180天)和最小计量单位(64 KB)要求。数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定,解冻会产生数据取回费用。适用于需要超长时间存放的极冷数据,例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等业务场景。 说明
华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北 3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华南1(深圳)、华南2(河源)、华南3(广州)、西南1(成都)、中国香港、美国(硅谷)、美国(弗吉尼亚)、日本(东京)、新加坡、澳大利亚(悉尼)、马来西亚(吉隆坡)、印度尼西亚(雅加达)、菲律宾(马尼拉)、印度(孟买)、德国(法兰克福)、英国(伦敦)、阿联酋(迪拜)地域支持冷归档存储。
关于存储类型的更多信息,请参见存储类型介绍。
存储冗余类型 是 Bucket的数据容灾类型。 - 本地冗余存储
采用单可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一个可用区内多个设施的多个设备上,确保硬件失效时的数据持久性和可用性。
- 同城冗余存储(推荐)
采用多可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一地域(Region)的多个可用区。当某个可用区不可用时,仍然能够保障数据的正常访问。
重要 华南1(深圳)、华北2(北京)、华东1(杭州)、华东2(上海)、中国香港、新加坡以及印度尼西亚(雅加达)地域支持开启同城冗余存储。此外,同城冗余存储的费用较高,且开启后不支持关闭,请谨慎操作。关于同城冗余存储的更多信息,请参见同城冗余存储。
HDFS服务 否 如果您希望通过JindoSDK访问OSS实现数据湖场景,需要开通HDFS服务。开通HDFS功能前,需单击前往授权,并按照页面指引完成授权操作。 重要- 华东1(杭州)、华东2(上海)、华南1(深圳)、华北2(北京)、华北 3(张家口)和新加坡地域支持开启HDFS服务,请联系技术支持申请使用。HDFS服务开启后不支持关闭,请谨慎操作。
- 归档以及冷归档存储类型Bucket不支持开启HDFS服务。
版本控制 否 选择是否开通版本控制功能。 - 开通:开通Bucket版本控制功能后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。当您在错误覆盖或者删除Object后,能够将Bucket中存储的Object恢复至任意时刻的历史版本。更多详情请参见版本控制介绍。
- 不开通:不开通版本控制功能,则不保存覆盖或删除的数据。
读写权限 是 选择Bucket的读写权限。 - 私有(private):只有该存储空间的拥有者可以对该存储空间内的文件进行读写操作,其他人无法访问该存储空间内的文件。
- 公共读(public-read):只有该存储空间的拥有者可以对该存储空间内的文件进行写操作,任何人(包括匿名访问者)可以对该存储空间中的文件进行读操作。 警告 互联网上任何用户都可以对该Bucket内文件进行访问,这有可能造成您数据的外泄以及费用激增,请谨慎操作。
- 公共读写(public-read-write):任何人(包括匿名访问者)都可以对该存储空间内文件进行读写操作。 警告 互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可能会侵害您的合法权益。除特殊场景外,不建议您配置公共读写权限。
服务端加密方式 否 选择是否开启服务器端加密。 说明 华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北 3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华南1(深圳)、华南2(河源)、华南3(广州)、西南1(成都)、中国香港、美国(硅谷)、美国(弗吉尼亚)、日本(东京)、韩国(首尔)、新加坡、澳大利亚(悉尼)、马来西亚(吉隆坡)、印度尼西亚(雅加达)、菲律宾(马尼拉)、泰国(曼谷)、印度(孟买)、德国(法兰克福)、英国(伦敦)、阿联酋(迪拜)支持开启服务器端加密。- 服务端加密方式:选择Object的加密方式。
- 无:不启用服务器端加密。
- OSS完全托管:使用OSS托管的密钥进行加密。OSS会为每个Object使用不同的密钥进行加密,作为额外的保护,OSS会使用定期轮转的主密钥对加密密钥本身进行加密。
- KMS:使用KMS默认托管的CMK或指定CMK ID进行加解密操作。
使用KMS加密方式前,需要开通KMS服务。具体步骤,请参见购买专属KMS实例。
- 加密算法:目前仅支持AES256。
- 加密密钥:服务端加密方式选择KMS时,可配置此项。参数说明如下:
- alias/acs/oss:使用默认托管的CMK生成不同的密钥来加密不同的Object,并且在Object被下载时自动解密。
- CMK ID:使用指定的CMK生成不同的密钥来加密不同的Object,并将加密Object的CMK ID记录到Object的元信息中,具有解密权限的用户下载Object时会自动解密。选择指定的CMK ID前,您需在KMS管理控制台创建一个与Bucket处于相同地域的普通密钥或外部密钥。详情请参见创建密钥。
实时日志查询 否 如果您希望在不付费的情况下实时查询最近7天的OSS访问日志,请选择开通。 有关实时日志查询的更多信息,请参见实时日志查询。
如果您不需要进行实时日志查询,请保持不开通的默认配置。
定时备份 否 如果您希望定时备份您的OSS数据,请选择开通。此时,OSS将自动创建备份计划,并由混合云备份HBR执行备份频率为每天备份一次OSS数据,备份文件保存一周的任务。 重要- 华东1(杭州)、华东2(上海)、华南1(深圳)、华北2(北京)、华北3(张家口)、中国香港、新加坡、澳大利亚(悉尼)、印度尼西亚(雅加达)、美国(硅谷)地域支持定时备份功能。
- 不支持为低频访问、归档和冷归档存储类型的Bucket配置定时备份。
- 不支持备份和恢复软链接(Symlink)、归档和冷归档存储类型的Object以及Object的读写权限ACL。
- 如果HBR未开通或未授权HBR访问OSS,则无法创建定时备份计划。
更多信息,请参见定时备份。
如果您不需要定时备份您的OSS数据,请保持不开通的默认配置。
分层命名空间 否 如果您希望快速地对目录或文件进行重命名,请开启分层命名空间。 重要 仅允许在创建Bucket时开启分层命名空间功能。注意开启后不支持关闭,且不支持部分功能。请参见分层命名空间查看分层命名空间不支持的功能列表。 - 单击确定。
使用阿里云SDK
以下仅列举常见SDK在创建Bucket时开启同城冗余存储的代码示例。关于其他SDK在创建Bucket时开启同城冗余存储的代码示例,请参见SDK简介。
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 创建存储空间并开启分层命名空间。
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName).withHnsStatus(HnsStatus.Enabled);
// 如果创建存储空间的同时需要指定存储类型、存储空间的读写权限、数据容灾类型, 请参考如下代码。
// 此处以设置存储空间的存储类型为标准存储为例介绍。
createBucketRequest.setStorageClass(StorageClass.Standard);
// 数据容灾类型默认为本地冗余存储,即DataRedundancyType.LRS。
createBucketRequest.setDataRedundancyType(DataRedundancyType.LRS);
// 设置存储空间读写权限为公共读,默认为私有。
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.createBucket(createBucketRequest);
// 关闭OSSClient。
ossClient.shutdown();
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\OssClient;
use OSS\Core\OssException;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
$accessKeyId = "yourAccessKeyId";
$accessKeySecret = "yourAccessKeySecret";
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// 设置Bucket的存储类型为低频访问类型,默认是标准类型。
$options = array(
OssClient::OSS_STORAGE => OssClient::OSS_STORAGE_IA
);
// 设置Bucket的读写权限为公共读,默认是私有读写。
$ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ, $options);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss');
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret'
});
// 创建存储空间。
async function putBucket() {
try {
const options = {
storageClass: 'Standard', // 存储空间的默认存储类型为标准存储,即Standard。如果需要设置存储空间的存储类型为归档存储,请替换为Archive。
acl: 'private', // 存储空间的默认读写权限为私有,即private。如果需要设置存储空间的读写权限为公共读,请替换为public-read。
dataRedundancyType: 'LRS' // 存储空间的默认数据容灾类型为本地冗余存储,即LRS。如果需要设置数据容灾类型为同城冗余存储,请替换为ZRS。
}
// 填写Bucket名称。
const result = await client.putBucket('examplebucket', options);
console.log(result);
} catch (err) {
console.log(err);
}
}
putBucket();
# -*- coding: utf-8 -*-
import oss2
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 创建存储空间。
# 如果需要在创建存储空间时设置存储类型、存储空间访问权限、数据容灾类型,请参考以下代码。
# 以下以配置存储空间为标准存储类型,访问权限为私有,数据容灾类型为同城冗余存储为例。
bucketConfig = oss2.models.BucketCreateConfig(oss2.BUCKET_STORAGE_CLASS_STANDARD, oss2.BUCKET_DATA_REDUNDANCY_TYPE_ZRS)
bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE, bucketConfig)
using Aliyun.OSS;
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
var accessKeyId = "yourAccessKeyId";
var accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
var bucketName = "examplebucket";
// 初始化OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
// 创建存储空间。
try
{
var request = new CreateBucketRequest(bucketName);
//设置读写权限ACL为公共读PublicRead,默认为私有权限。
request.ACL = CannedAccessControlList.PublicRead;
//设置数据容灾类型为同城冗余存储。
request.DataRedundancyType = DataRedundancyType.ZRS;
client.CreateBucket(request);
Console.WriteLine("Create bucket succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Create bucket failed. {0}", ex.Message);
}
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建名为examplebucket的存储空间,并设置存储类型为低频访问oss.StorageIA、读写权限ACL为公共读oss.ACLPublicRead、数据容灾类型为同城冗余存储oss.RedundancyZRS。
err = client.CreateBucket("examplebucket", oss.StorageClass(oss.StorageIA), oss.ACL(oss.ACLPublicRead), oss.RedundancyType(oss.RedundancyZRS))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"<StsServer>"];
OSSClientConfiguration *cfg = [[OSSClientConfiguration alloc] init];
cfg.maxRetryCount = 3;
cfg.timeoutIntervalForRequest = 15;
// 由于client在释放时会取消持有的session中的所有任务并将session置为无效,因此请保证client的生命周期在请求完成前不会被释放。
// Endpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
OSSClient *client = [[OSSClient alloc] initWithEndpoint:@"Endpoint" credentialProvider:credentialProvider clientConfiguration:cfg];
OSSCreateBucketRequest * create = [OSSCreateBucketRequest new];
// 设置存储空间名称为examplebucket。
create.bucketName = @"examplebucket";
// 设置访问权限为私有。
create.xOssACL = @"private";
// 设置存储类型为低频访问类型IA。
create.storageClass = OSSBucketStorageClassIA;
OSSTask * createTask = [client createBucket:create];
[createTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"create bucket success!");
} else {
NSLog(@"create bucket failed, error: %@", task.error);
}
return nil;
}];
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/*初始化OSS账号信息。*/
/*阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/*yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/*填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/*初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/*指定新创建bucket的名称、存储类型和ACL。*/
CreateBucketRequest request(BucketName, StorageClass::IA, CannedAccessControlList::PublicReadWrite);
/*设置数据容灾类型为同城冗余存储。*/
//request.setDataRedundancyType(DataRedundancyType::ZRS);
/*创建Bucket。*/
auto outcome = client.CreateBucket(request);
if (!outcome.isSuccess()) {
/*异常处理。*/
std::cout << "CreateBucket fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/*释放网络等资源。*/
ShutdownSdk();
return 0;
}
使用命令行工具ossutil
关于使用ossutil在创建Bucket时开启同城冗余存储的具体步骤, 请参见mb(创建存储空间)。
使用REST API
如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucket。