全部產品
Search
文件中心

Object Storage Service:建立同城冗餘儲存Bucket

更新時間:Feb 10, 2026

OSS同城冗餘儲存提供99.9999999999%(12個9)的資料設計持久性。在支援多可用性區域的地區,OSS採用多可用性區域的資料冗餘儲存機制,將資料冗餘儲存在同一地區的多個可用性區域,通過跨可用性區域的資料分布確保當某個可用性區域發生故障時,仍能正常訪問資料,實現機房級容災保護。

注意事項

  • 支援同城冗餘的地區以及同城冗餘的資料持久性和服務可用性,請參見儲存冗餘

  • 相對於本地備援儲存體,同城冗餘儲存會產生更高的儲存費用。更多資訊,請參見OSS產品定價

  • 開啟同城冗餘儲存後,不支援關閉。

操作步驟

使用OSS控制台

  1. 登入OSS管理主控台

  2. 在左側導覽列,單擊Bucket列表然後單擊建立Bucket

  3. 建立Bucket面板,設定儲存冗餘類型同城冗餘儲存(推薦),然後配置各項參數。

    關於參數說明的更多資訊,請參見建立儲存空間

使用阿里雲SDK

以下僅列舉常見SDK在建立Bucket時開啟同城冗餘儲存的程式碼範例。關於其他SDK在建立Bucket時開啟同城冗餘儲存的程式碼範例,請參見SDK簡介

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "yourEndpoint";
        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫Bucket名稱。
        String bucketName = "examplebucket";
        // 填寫資源群組ID。如果不填寫資源群組ID,則建立的Bucket屬於預設資源群組。
        //String rsId = "rg-aek27tc****";
        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
        String region = "cn-hangzhou";
        
        // 建立OSSClient執行個體。
        // 當OSSClient執行個體不再使用時,調用shutdown方法以釋放資源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 建立儲存空間並開啟階層命名空間。
            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName).withHnsStatus(HnsStatus.Enabled);
            // 如果建立儲存空間的同時需要指定儲存類型、儲存空間的讀寫權限、資料容災類型,請參考如下代碼。
            // 此處以設定儲存空間的儲存類型為標準儲存為例介紹。
            createBucketRequest.setStorageClass(StorageClass.Standard);
            // 資料容災類型預設為本地備援儲存體,即DataRedundancyType.LRS。如果需要設定資料容災類型為同城冗餘儲存,請設定為DataRedundancyType.ZRS。
            createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS);
            // 設定儲存空間讀寫權限為公用讀取,預設為私人。
            createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
            // 在支援資源群組的地區建立Bucket時,您可以為Bucket配置資源群組。
            //createBucketRequest.setResourceGroupId(rsId);


            // 建立儲存空間。
            ossClient.createBucket(createBucketRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourregion',
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // yourBucketName填寫Bucket名稱。
  bucket: 'yourBucketName',
});

// 建立儲存空間。
async function putBucket() {
  try {
    const options = {
      storageClass: 'Standard', // 儲存空間的預設儲存類型為標準儲存,即Standard。如果需要設定儲存空間的儲存類型為Archive Storage,請替換為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();        
import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器
parser = argparse.ArgumentParser(description="put bucket sample")
# 添加命令列參數 --region,表示儲存空間所在的地區,必需參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令列參數 --bucket,表示儲存空間的名稱,必需參數
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 添加命令列參數 --endpoint,表示其他服務可用來訪問OSS的網域名稱,非必需參數
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    args = parser.parse_args()  # 解析命令列參數

    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定配置中的地區資訊
    cfg.region = args.region
    # 如果提供了endpoint參數,則設定配置中的endpoint
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 執行建立儲存空間的請求,儲存類型為標準儲存
    result = client.put_bucket(oss.PutBucketRequest(
        bucket=args.bucket,
        create_bucket_configuration=oss.CreateBucketConfiguration(
            storage_class='Standard',
           data_redundancy_type='ZRS'
        )
    ))
    # 輸出請求的結果狀態代碼和請求ID,用於檢查請求是否成功
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id}'
    )


if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數
using Aliyun.OSS;
using Aliyun.OSS.Common;

// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱。
var bucketName = "examplebucket";
// 填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。
const string region = "cn-hangzhou";

// 建立ClientConfiguration執行個體,按照您的需要修改預設參數。
var conf = new ClientConfiguration();

// 設定v4簽名。
conf.SignatureVersion = SignatureVersion.V4;

// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
// 建立儲存空間。
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);
    }
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /*初始化OSS帳號資訊。*/
    
    /*yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    
    / *yourRegion填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn - hangzhou。 * /
    std::string Region = "yourRegion";

    /*填寫Bucket名稱,例如examplebucket。*/
    std::string BucketName = "examplebucket";

    /*初始化網路等資源。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /*指定新建立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;
}
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義命令列參數
var (
	region     string // 儲存空間所在地區
	bucketName string // 儲存空間名稱
)

// 初始化命令列參數解析
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查儲存空間名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查地區是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 配置OSS用戶端
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). // 使用環境變數提供訪問憑證
		WithRegion(region)                                                                // 設定地區

	// 建立OSS用戶端執行個體
	client := oss.NewClient(cfg)

	// 構建建立儲存空間的請求
	request := &oss.PutBucketRequest{
		Bucket: oss.Ptr(bucketName), // 設定儲存空間名稱
		CreateBucketConfiguration: &oss.CreateBucketConfiguration{
			DataRedundancyType: oss.DataRedundancyZRS, // 設定資料冗餘類型為ZRS(跨地區冗餘儲存)
		},
	}

	// 發送建立儲存空間的請求
	result, err := client.PutBucket(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket: %v", err) // 處理錯誤並終止程式
	}

	// 輸出建立儲存空間的結果
	log.Printf("put bucket result: %#v\n", result)
}

使用命令列工具ossutil

關於使用ossutil在建立Bucket時開啟同城冗餘儲存的具體操作, 請參見put-bucket

使用REST API

如果您的程式自訂要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。更多資訊,請參見PutBucket