跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Enterprise Storage 7 文件 / 操作和管理指南 / 存取叢集資料 / Ceph 物件閘道
適用範圍 SUSE Enterprise Storage 7

21 Ceph 物件閘道

本章介紹物件閘道相關管理任務的詳細資料,例如,檢查服務的狀態,管理帳戶、多站台閘道或 LDAP 驗證。

21.1 物件閘道限制和命名限制

下面列出了物件閘道的一些重要限制:

21.1.1 桶限制

透過 S3 API 存取物件閘道時,桶名稱必須符合 DNS 且允許使用虛線字元「-」。當透過 Swift API 存取物件閘道時,您可使用支援 UTF-8 的字元 (斜線字元「/」除外) 的任何組合。桶名稱最多可包含 255 個字元。桶名稱必須是唯一的。

提示
提示:使用符合 DNS 的桶名稱

雖然透過 Swift API 存取時,可使用任何基於 UTF-8 的桶名稱,但仍建議您根據 S3 命名限制對桶命名,以免在透過 S3 API 存取同一個桶時發生問題。

21.1.2 儲存之物件的限制

每個使用者的物件數量上限

預設無限制 (大約不超過 2^63)。

每個桶的物件數量上限

預設無限制 (大約不超過 2^63)。

要上傳/儲存的物件的最大大小

單次上傳的上限為 5GB。更大的物件可分為多個部分上傳。多部分區塊的最大數量為 10000。

21.1.3 HTTP 標題限制

HTTP 標頭和要求限制取決於所使用的 Web 前端。預設 Beast 會將 HTTP 標題大小限制為 16 kB。

21.2 部署物件閘道

Ceph 物件閘道採用與其他 Ceph 服務相同的程序進行部署,即使用 cephadm。如需詳細資料,具體請參閱第 5.4.2 節 「服務和放置規格」第 5.4.3.4 節 「部署物件閘道」

21.3 操作物件閘道服務

您可以如同操作其他 Ceph 服務一般來操作物件閘道,首先使用 ceph orch ps 指令識別服務名稱,然後執行以下指令來操作服務,例如:

ceph orch daemon restart OGW_SERVICE_NAME

如需操作 Ceph 服務的完整資訊,請參閱第 14 章 「Ceph 服務的操作

21.4 組態選項

如需物件閘道組態選項的清單,請參閱第 28.5 節 「Ceph 物件閘道」

21.5 管理物件閘道的存取

您可以使用與 S3 或 Swift 相容的介面來與物件閘道通訊。S3 介面與大部分 Amazon S3 RESTful API 都相容。Swift 介面與大部分 OpenStack Swift API 都相容。

這兩個介面都要求您建立特定的使用者,並安裝相關的用戶端軟體,以使用該使用者的機密金鑰來與閘道通訊。

21.5.1 存取物件閘道

21.5.1.1 S3 介面存取

若要存取 S3 介面,您需要有 REST 用戶端。S3cmd 是一個指令行 S3 用戶端。您可以在 OpenSUSE Build Service 中找到它。該儲存庫包含既適用於 SUSE Linux Enterprise 套裝作業系統又適用於基於 openSUSE 的套裝作業系統的版本。

如果您想測試自己是否能夠存取 S3 介面,也可以編寫一個簡短的 Python 程序檔。該程序檔將連接到物件閘道,建立新桶,並列出所有桶。aws_access_key_idaws_secret_access_key 的值取自第 21.5.2.1 節 「新增 S3 和 Swift 使用者」中所述 radosgw_admin 指令傳回的 access_keysecret_key 的值。

  1. 安裝 python-boto 套件:

    root # zypper in python-boto
  2. 建立名為 s3test.py 的新 Python 程序檔,並在其中包含以下內容:

    import boto
    import boto.s3.connection
    access_key = '11BS02LGFB6AL6H1ADMW'
    secret_key = 'vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY'
    conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = 'HOSTNAME',
    is_secure=False,
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
    )
    bucket = conn.create_bucket('my-new-bucket')
    for bucket in conn.get_all_buckets():
      print "NAME\tCREATED".format(
      name = bucket.name,
      created = bucket.creation_date,
      )

    請以您在其上設定了物件閘道服務的主機的主機名稱來取代 HOSTNAME,例如 gateway_host

  3. 執行程序檔:

    python s3test.py

    該程序檔將輸出類似下方內容的資訊:

    my-new-bucket 2015-07-22T15:37:42.000Z

21.5.1.2 Swift 介面存取

若要透過 Swift 介面存取物件閘道,需要使用 swift 指令行用戶端。該介面的手冊頁 man 1 swift 介紹了有關其指令行選項的詳細資訊。

從 SUSE Linux Enterprise 12 SP3 到 SUSE Linux Enterprise 15 的「Public Cloud」模組中都隨附了該套件。在安裝該套件之前,需要啟動該模組並重新整理軟體儲存庫:

root # SUSEConnect -p sle-module-public-cloud/12/SYSTEM-ARCH
sudo zypper refresh

root # SUSEConnect -p sle-module-public-cloud/15/SYSTEM-ARCH
root # zypper refresh

若要安裝 swift 指令,請執行以下指令:

root # zypper in python-swiftclient

使用以下語法進行 swift 存取:

tux > swift -A http://IP_ADDRESS/auth/1.0 \
-U example_user:swift -K 'SWIFT_SECRET_KEY' list

請以閘道伺服器的 IP 位址取代 IP_ADDRESS,以在第 21.5.2.1 節 「新增 S3 和 Swift 使用者」中針對 swift 使用者執行 radosgw-admin key create 指令所產生輸出中的相應值取代 SWIFT_SECRET_KEY

例如:

tux > swift -A http://gateway.example.com/auth/1.0 -U example_user:swift \
-K 'r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h' list

輸出為:

my-new-bucket

21.5.2 管理 S3 和 Swift 帳戶

21.5.2.1 新增 S3 和 Swift 使用者

您需要建立使用者、存取金鑰和機密才能讓最終使用者與閘道互動。使用者分兩種類型:使用者子使用者。與 S3 介面互動時使用使用者子使用者是 Swift 介面的使用者。每個子使用者都與某個使用者相關聯。

若要建立 Swift 使用者,請執行以下步驟:

  1. 若要建立 Swift 使用者 (在我們的術語中稱作子使用者),您需要先建立關聯的使用者

    cephuser@adm > radosgw-admin user create --uid=USERNAME \
     --display-name="DISPLAY-NAME" --email=EMAIL

    例如:

    cephuser@adm > radosgw-admin user create \
       --uid=example_user \
       --display-name="Example User" \
       --email=penguin@example.com
  2. 若要建立使用者的子使用者 (用於 Swift 介面),必須指定使用者 ID (--uid=USERNAME)、子使用者 ID 和該子使用者的存取層級。

    cephuser@adm > radosgw-admin subuser create --uid=UID \
     --subuser=UID \
     --access=[ read | write | readwrite | full ]

    例如:

    cephuser@adm > radosgw-admin subuser create --uid=example_user \
     --subuser=example_user:swift --access=full
  3. 為使用者產生機密金鑰。

    cephuser@adm > radosgw-admin key create \
       --gen-secret \
       --subuser=example_user:swift \
       --key-type=swift
  4. 這兩個指令都會輸出 JSON 格式的資料,其中顯示了使用者狀態。請注意以下幾行,並記住 secret_key 值:

    "swift_keys": [
       { "user": "example_user:swift",
         "secret_key": "r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h"}],

透過 S3 介面存取物件閘道時,需要執行以下指令來建立 S3 使用者:

cephuser@adm > radosgw-admin user create --uid=USERNAME \
 --display-name="DISPLAY-NAME" --email=EMAIL

例如:

cephuser@adm > radosgw-admin user create \
   --uid=example_user \
   --display-name="Example User" \
   --email=penguin@example.com

該指令還會建立使用者的存取金鑰和機密金鑰。檢查該指令輸出中的 access_keysecret_key 關鍵字及其值:

[...]
 "keys": [
       { "user": "example_user",
         "access_key": "11BS02LGFB6AL6H1ADMW",
         "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
 [...]

21.5.2.2 移除 S3 和 Swift 使用者

刪除 S3 使用者與刪除 Swift 使用者的程序類似。不過,在刪除 Swift 使用者時,您可能需要同時刪除該使用者及其子使用者。

若要移除 S3 或 Swift 使用者 (包括其所有子使用者),請在以下指令中指定 user rm 和使用者 ID:

cephuser@adm > radosgw-admin user rm --uid=example_user

若要移除子使用者,請指定 subuser rm 和子使用者 ID。

cephuser@adm > radosgw-admin subuser rm --uid=example_user:swift

您可使用以下選項:

--purge-data

清除與該使用者 ID 關聯的所有資料。

--purge-keys

清除與該使用者 ID 關聯的所有金鑰。

提示
提示:移除子使用者

移除某個子使用者時,移除的是其對 Swift 介面的存取權限。該使用者仍會保留在系統中。

21.5.2.3 變更 S3 和 Swift 使用者的存取金鑰與機密金鑰

存取閘道時,access_keysecret_key 參數用於識別物件閘道使用者。變更現有使用者金鑰的過程與建立新使用者金鑰的過程相同,舊金鑰會被覆寫。

對於 S3 使用者,請執行以下指令:

cephuser@adm > radosgw-admin key create --uid=EXAMPLE_USER --key-type=s3 --gen-access-key --gen-secret

對於 Swift 使用者,請執行以下指令:

cephuser@adm > radosgw-admin key create --subuser=EXAMPLE_USER:swift --key-type=swift --gen-secret
--key-type=TYPE

指定金鑰的類型。值為 swifts3

--gen-access-key

產生隨機存取金鑰 (預設針對 S3 使用者)。

--gen-secret

產生隨機機密金鑰。

--secret=KEY

指定機密金鑰,例如手動產生的金鑰。

21.5.2.4 啟用使用者定額管理

Ceph 物件閘道允許您針對使用者以及使用者擁有的桶設定定額。定額包括一個桶中的最大物件數,以及最大儲存大小 (MB)。

在啟用使用者定額之前,需要先設定定額的參數:

cephuser@adm > radosgw-admin quota set --quota-scope=user --uid=EXAMPLE_USER \
 --max-objects=1024 --max-size=1024
--max-objects

指定最大物件數。指定負值會停用檢查。

--max-size

指定最大位元組數。指定負值會停用檢查。

--quota-scope

設定定額的範圍。選項包括 bucketuser。桶定額將套用到使用者擁有的桶。使用者定額將套用到使用者。

設定使用者定額後,可啟用該定額:

cephuser@adm > radosgw-admin quota enable --quota-scope=user --uid=EXAMPLE_USER

若要停用定額:

cephuser@adm > radosgw-admin quota disable --quota-scope=user --uid=EXAMPLE_USER

若要列出定額設定:

cephuser@adm > radosgw-admin user info --uid=EXAMPLE_USER

若要更新定額統計資料:

cephuser@adm > radosgw-admin user stats --uid=EXAMPLE_USER --sync-stats

21.6 HTTP 前端

Ceph 物件閘道支援兩個內嵌式 HTTP 前端:BeastCivetweb

Beast 前端使用 Boost.Beast 程式庫處理 HTTP 剖析,使用 Boost.Asio 程式庫處理非同步網路 I/O。

Civetweb 前端使用 Civetweb HTTP 程式庫,該程式庫屬於 Mongoose 的分支。

您可以使用 rgw_frontends 選項來設定它們。如需組態選項的清單,請參閱第 28.5 節 「Ceph 物件閘道」

21.7 為物件閘道啟用 HTTPS/SSL

若要讓物件閘道可使用 SSL 進行安全通訊,您需要擁有 CA 核發的證書,或建立自行簽署的證書。

21.7.1 建立自行簽署的證書

提示
提示

如果您已擁有 CA 簽署的有效證書,請跳過本節。

以下程序說明如何在 Salt Master 上產生自行簽署的 SSL 證書。

  1. 如果您需要透過其他主體身分來識別您的物件閘道,請將這些身分新增至 /etc/ssl/openssl.cnf 檔案 [v3_req] 區段的 subjectAltName 選項中:

    [...]
    [ v3_req ]
    subjectAltName = DNS:server1.example.com DNS:server2.example.com
    [...]
    提示
    提示:subjectAltName 中的 IP 位址

    若要在 subjectAltName 選項中使用 IP 位址而非網域名稱,請使用下面一行取代範例行:

    subjectAltName = IP:10.0.0.10 IP:10.0.0.11
  2. 使用 openssl 建立金鑰和證書。輸入需要包含在證書中的所有資料。建議您輸入 FQDN 做為通用名稱。簽署證書前,確認「X509v3 Subject Alternative Name:」包含在要求的延伸中,並且產生的證書中設定了「X509v3 Subject Alternative Name:」。

    root@master # openssl req -x509 -nodes -days 1095 \
     -newkey rsa:4096 -keyout rgw.key
     -out rgw.pem
  3. 向證書檔案附加金鑰:

    root@master # cat rgw.key >> rgw.pem

21.7.2 設定使用 SSL 的物件閘道

若要將物件閘道設定為使用 SSL 證書,請使用 rgw_frontends 選項。例如:

cephuser@adm > ceph config set WHO rgw_frontends \
 beast ssl_port=443 ssl_certificate=config://CERT ssl_key=config://KEY

如果您未指定 CERTKEY 組態機碼,物件閘道服務將在以下組態機碼中尋找 SSL 證書和金鑰:

rgw/cert/RGW_REALM/RGW_ZONE.key
rgw/cert/RGW_REALM/RGW_ZONE.crt

如果您要覆寫預設的 SSL 金鑰和證書位置,請使用以下指令將它們輸入至組態資料庫:

ceph config-key set CUSTOM_CONFIG_KEY -i PATH_TO_CERT_FILE

然後透過 config:// 指令使用您的自訂組態機碼。

21.8 同步模組

物件閘道部署為多站台服務,您可以在不同區域之間鏡像其資料和中繼資料。同步模組建立在多站台架構的基礎上,可將資料和中繼資料轉遞到不同的外部層。利用同步模組,可讓系統在每當有資料發生變更 (例如執行桶或使用者建立等中繼資料操作) 時即執行一組動作。當物件閘道多站台變更最終在遠端站台上保持一致時,變更將以非同步方式傳播。因而很多情況下都適合使用同步模組,例如,將物件儲存備份到外部雲端叢集、使用磁帶機的自訂備份解決方案,或在 ElasticSearch 中為中繼資料編制索引。

21.8.1 設定同步模組

所有同步模組的設定方式都是相似的。您需要建立一個新區域 (請參閱第 21.13 節 「多站台物件閘道」以瞭解更多詳細資料) 並為其設定 --tier_type 選項,例如針對雲端同步模組設定 --tier-type=cloud

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --endpoints=http://endpoint1.example.com,http://endpoint2.example.com, [...] \
 --tier-type=cloud

您可以使用以下指令來設定特定層:

cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=KEY1=VALUE1,KEY2=VALUE2

組態中的 KEY 指定您希望更新的組態變數,VALUE 指定該變數的新值。使用句點可存取巢狀的值。例如:

cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=connection.access_key=KEY,connection.secret=SECRET

您可以透過附加方括號「[]」及參考的項目來存取相應陣列項目。您可以使用方括號「[]」來新增新的陣列項目。索引值 -1 參考的是陣列中的最後一個項目。在同一個指令中無法建立新項目並再次參考該項目。例如,用於為以 PREFIX 開頭的桶建立新設定檔的指令如下所示:

cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=profiles[].source_bucket=PREFIX'*'
cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=profiles[-1].connection_id=CONNECTION_ID,profiles[-1].acls_id=ACLS_ID
提示
提示:新增和移除組態項目

您可以使用 --tier-config-add=KEY=VALUE 參數來新增新的層組態項目。

您可以使用 --tier-config-rm=KEY 移除現有的項目。

21.8.2 同步區域

同步模組組態對於區域而言位於本地。同步模組會確定區域是要輸出資料,還是只能使用已在另一區域中修改的資料。從 Luminous 版本開始,支援的同步外掛程式有 ElasticSearchrgwlog,其中 rgw 是在區域之間同步資料的預設同步外掛程式,log 是記錄遠端區域中發生的中繼資料操作的一般同步外掛程式。以下各節內容包含了使用 ElasticSearch 同步模組的區域範例。其程序與設定任何其他同步外掛程式的程序均相似。

注意
注意:預設同步外掛程式

rgw 是預設的同步外掛程式,不需要明確設定。

21.8.2.1 要求和假設

我們假設已依據第 21.13 節 「多站台物件閘道」中所述設定了一個簡單的多站台,它由 us-eastus-west 這兩個區域組成。現在,我們新增第三個區域 us-east-es,此區域只處理來自其他站台的中繼資料。此區域可與 us-east 位於同一 Ceph 叢集中,也可位於不同的叢集中。此區域只使用來自其他區域的中繼資料,並且此區域中的物件閘道不會直接處理任何最終使用者要求。

21.8.2.2 設定區域

  1. 建立類似於第 21.13 節 「多站台物件閘道」中所述區域的第三個區域,例如

    cephuser@adm > radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-es \
    --access-key=SYSTEM-KEY --secret=SECRET --endpoints=http://rgw-es:80
  2. 可透過以下指令為此區域設定同步模組:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --tier-type=TIER-TYPE \
    --tier-config={set of key=value pairs}
  3. 例如,在 ElasticSearch 同步模組中執行以下指令

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --tier-type=elasticsearch \
    --tier-config=endpoint=http://localhost:9200,num_shards=10,num_replicas=1

    如需支援的各個 tier-config 選項,請參閱第 21.8.3 節 「ElasticSearch 同步模組」

  4. 最後,更新期間

    cephuser@adm > radosgw-admin period update --commit
  5. 現在,在區域中啟動物件閘道

    cephuser@adm > ceph orch start rgw.REALM-NAME.ZONE-NAME

21.8.3 ElasticSearch 同步模組

此同步模組會將來自其他區域的中繼資料寫入 ElasticSearch。從 Luminous 版本開始,這些中繼資料就是我們目前儲存在 ElasticSearch 中的資料欄位的 JSON。

{
  "_index" : "rgw-gold-ee5863d6",
  "_type" : "object",
  "_id" : "34137443-8592-48d9-8ca7-160255d52ade.34137.1:object1:null",
  "_score" : 1.0,
  "_source" : {
    "bucket" : "testbucket123",
    "name" : "object1",
    "instance" : "null",
    "versioned_epoch" : 0,
    "owner" : {
      "id" : "user1",
      "display_name" : "user1"
    },
    "permissions" : [
      "user1"
    ],
    "meta" : {
      "size" : 712354,
      "mtime" : "2017-05-04T12:54:16.462Z",
      "etag" : "7ac66c0f148de9519b8bd264312c4d64"
    }
  }
}

21.8.3.1 ElasticSearch 層類型組態參數

endpoint

指定要存取的 ElasticSearch 伺服器端點。

num_shards

(整數) 資料同步啟始化時將為 ElasticSearch 設定的分區數量。請注意,啟始化之後將無法變更此數量。在此處進行任何變更都需要重建 ElasticSearch 索引,並需要重新啟始化資料同步程序。

num_replicas

(整數) 資料同步啟始化時將為 ElasticSearch 設定的複本數量。

explicit_custom_meta

(true | false) 指定是否將為所有使用者自訂中繼資料編製索引,或者使用者是否需要 (在桶層級) 設定應為哪些客戶中繼資料項目編製索引。此參數預設為 false

index_buckets_list

(逗號分隔的字串清單) 如果為空白,將會為所有桶編製索引。否則,將只為此處指定的桶編製索引。可以提供桶字首 (例如「foo*」) 或桶字尾 (例如「*bar」)。

approved_owners_list

(逗號分隔的字串清單) 如果為空白,將會為所有擁有者的桶編製索引 (需遵守其他限制);否則,將只為指定擁有者擁有的桶編製索引。也可以提供字尾和字首。

override_index_path

(字串) 如果非空白,則此字串將做為 ElasticSearch 索引路徑。否則,將在同步啟始化時確定並產生索引路徑。

username

指定 ElasticSearch 的使用者名稱 (如果需要驗證)。

password

指定 ElasticSearch 的密碼 (如果需要驗證)。

21.8.3.2 中繼資料查詢

由於 ElasticSearch 叢集現在儲存物件中繼資料,因此務必確定 ElasticSearch 端點不會向公眾公開,只有叢集管理員可存取它們。向最終使用者自己公開中繼資料查詢會造成問題,因為我們希望該使用者只查詢自己的中繼資料,而不能查詢任何其他使用者的中繼資料,這要求 ElasticSearch 叢集如同 RGW 所做的那樣來對使用者進行驗證,而這就導致了問題發生。

從 Luminous 版本開始,中繼資料主區域中的 RGW 可處理最終使用者要求。這樣就無需向公眾公開 ElasticSearch 端點,同時也解決了驗證和授權問題,因為 RGW 自身就能對最終使用者要求進行驗證。出於此目的,RGW 在桶 API 中引入了可處理 ElasticSearch 要求的新查詢。所有這些要求都必須傳送到中繼資料主區域。

獲取 ElasticSearch 查詢
GET /BUCKET?query=QUERY-EXPR

要求參數:

  • max-keys:要傳回的最大項目數

  • marker:分頁標記

expression := [(]<arg> <op> <value> [)][<and|or> ...]

運算子為下列其中一項:<、<=、==、>=、>

例如:

GET /?query=name==foo

將傳回使用者有權讀取且編製了索引、名為「foo」的所有鍵。輸出內容將是 XML 格式的鍵清單,與 S3 的「列出桶」要求的回應類似。

設定自訂中繼資料欄位

定義應該 (在指定的桶中) 為哪些自訂中繼資料項目編製索引,以及這些鍵的類型是什麼。如果設定了明確的自訂中繼資料索引,則需要此定義,以便 rgw 為指定的自訂中繼資料值編製索引。如果未設定,在已編製索引的中繼資料鍵類型不是字串的情況下,也需要此定義。

POST /BUCKET?mdsearch
x-amz-meta-search: <key [; type]> [, ...]

若中繼資料欄位有多個,則必須使用逗號加以分隔,可以使用分號「;」強制指定欄位的類型。目前允許的類型有字串 (預設)、整數和日期。例如,如果您想要將自訂物件中繼資料 x-amz-meta-year 以整數類型編入索引,將 x-amz-meta-date 以日期類型編入索引,並將 x-amz-meta-title 以字串類型編入索引,您需要執行以下指令:

POST /mybooks?mdsearch
x-amz-meta-search: x-amz-meta-year;int, x-amz-meta-release-date;date, x-amz-meta-title;string
刪除自訂中繼資料組態

刪除自訂中繼資料桶組態。

DELETE /BUCKET?mdsearch
獲取自訂中繼資料組態

擷取自訂中繼資料桶組態。

GET /BUCKET?mdsearch

21.8.4 雲端同步模組

本節介紹用於將區域資料同步到遠端雲端服務的模組。該同步是單向的,無法將資料從遠端區域同步回其本地區域。此模組的主要目的是實現面向多個雲端服務提供者的資料同步,目前僅支援與 AWS (S3) 相容的雲端提供者。

若要將資料同步到遠端雲端服務,您需要設定使用者身分證明。由於許多雲端服務都對每個使用者可建立的桶數量設定了限制,因此您可以設定來源物件與桶的對應,以使不同的目標對應至不同的桶和桶字首。請注意,系統不會保留來源存取清單 (ACL)。可以將特定來源使用者的許可權對應至特定目的地使用者。

由於 API 存在限制,因此無法保留原始物件修改時間和 HTTP 實體標記 (ETag)。雲端同步模組會將它們儲存為目的地物件的中繼資料屬性。

21.8.4.1 設定雲端同步模組

下面提供了一些一般和非一般雲端同步模組組態範例。請注意,一般組態可能會與非一般組態發生衝突。

範例 21.1︰ 一般組態
{
  "connection": {
    "access_key": ACCESS,
    "secret": SECRET,
    "endpoint": ENDPOINT,
    "host_style": path | virtual,
  },
  "acls": [ { "type": id | email | uri,
    "source_id": SOURCE_ID,
    "dest_id": DEST_ID } ... ],
  "target_path": TARGET_PATH,
}
範例 21.2︰ 非一般組態
{
  "default": {
    "connection": {
      "access_key": ACCESS,
      "secret": SECRET,
      "endpoint": ENDPOINT,
      "host_style" path | virtual,
    },
    "acls": [
    {
      "type": id | email | uri,   #  optional, default is id
      "source_id": ID,
      "dest_id": ID
    } ... ]
    "target_path": PATH # optional
  },
  "connections": [
  {
    "connection_id": ID,
    "access_key": ACCESS,
    "secret": SECRET,
    "endpoint": ENDPOINT,
    "host_style": path | virtual,  # optional
  } ... ],
  "acl_profiles": [
  {
    "acls_id": ID, # acl mappings
    "acls": [ {
      "type": id | email | uri,
      "source_id": ID,
      "dest_id": ID
    } ... ]
  }
  ],
  "profiles": [
  {
   "source_bucket": SOURCE,
   "connection_id": CONNECTION_ID,
   "acls_id": MAPPINGS_ID,
   "target_path": DEST,          # optional
  } ... ],
}

下面是對所用組態術語的解釋:

connection

表示與遠端雲端服務的連接。包含「connection_id」、「access_key」、「secret」、「endpoint」和「host_style」。

access_key

將用於特定連接的遠端雲端存取金鑰。

secret

遠端雲端服務的機密金鑰。

endpoint

遠端雲端服務端點的 URL。

host_style

存取遠端雲端端點時要使用的主機類型 (「path」或「virtual」)。預設值為「path」。

acls

存取清單對應陣列。

acl_mapping

每個「acl_mapping」結構都包含「type」、「source_id」和「dest_id」。它們將定義每個物件的 ACL 變動。ACL 變動允許將來源使用者 ID 轉換為目的地 ID。

type

ACL 類型:「id」定義使用者 ID,「email」依電子郵件定義使用者,「uri」依 uri (群組) 定義使用者。

source_id

來源區域中的使用者 ID。

dest_id

目的地中的使用者 ID。

target_path

用於定義目標路徑建立方式的字串。目標路徑指定附加至來源物件名稱的字首。可對目標路徑進行設定,以使其包含以下任何變數:

SID

表示同步例項 ID 的唯一字串。

ZONEGROUP

區域群組名稱。

ZONEGROUP_ID

區域群組 ID。

ZONE

區域名稱。

ZONE_ID

區域 ID。

BUCKET

來源桶名稱。

OWNER

來源桶擁有者 ID。

例如:target_path = rgwx-ZONE-SID/OWNER/BUCKET

acl_profiles

存取清單設定檔陣列。

acl_profile

每個設定檔均包含代表設定檔的「acls_id」和用於儲存「acl_mappings」清單的「acls」陣列。

profiles

設定檔清單。每個設定檔均包含以下變數:

source_bucket

用於定義此設定檔來源桶的桶名稱或桶字首 (如果以 * 結尾)。

target_path

請參閱上文的相關解釋。

connection_id

將用於此設定檔的連接 ID。

acls_id

將用於此設定檔的 ACL 設定檔 ID。

21.8.4.2 S3 特定的可設定項

雲端同步模組僅適用於與 AWS S3 相容的後端。該模組提供了一些可設定項,用來調整它在存取 S3 雲端服務時的行為:

{
  "multipart_sync_threshold": OBJECT_SIZE,
  "multipart_min_part_size": PART_SIZE
}
multipart_sync_threshold

針對大小大於或等於此值的物件,將使用多部分上傳來與雲端服務進行同步。

multipart_min_part_size

透過多部分上傳同步物件時所使用的部分大小下限。

21.8.5 歸檔同步模組

歸檔同步模組利用了物件閘道中 S3 物件的版本設定功能。您可以設定一個歸檔區域,用來擷取其他區域中一段時間內出現的 S3 物件的不同版本。只能透過與歸檔區域關聯的閘道來刪除歸檔區域保留的版本歷程。

借助這樣的架構,一些沒有建立版本的區域可以透過自身的區域閘道來鏡像它們的資料和中繼資料,以便向最終使用者提供高可用性,同時,歸檔區域會擷取所有資料更新,以便將它們合併為 S3 物件的版本。

透過在多區域組態中包含歸檔區域,您可以靈活地在一個區域中保留 S3 物件歷程,同時能夠節省其餘區域中已建立版本的 S3 物件的複本原本會需要的空間。

21.8.5.1 設定歸檔同步模組

提示
提示:詳細資訊

如需設定多站台閘道的詳細資料,請參閱第 21.13 節 「多站台物件閘道」

如需設定同步模組的詳細資料,請參閱第 21.8 節 「同步模組」

若要使用歸檔同步模組,您需要建立一個新區域,並將其層類型設定為 archive

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME \
 --rgw-zone=OGW_ZONE_NAME \
 --endpoints=http://OGW_ENDPOINT1_URL[,http://OGW_ENDPOINT2_URL,...]
 --tier-type=archive

21.9 LDAP authentication

除了預設的本地使用者驗證之外,物件閘道還能利用 LDAP 伺服器服務來對使用者進行驗證。

21.9.1 驗證機制

物件閘道從記號擷取使用者的 LDAP 身分證明。可以根據使用者名稱建構搜尋過濾器。物件閘道使用設定的服務帳戶在目錄中搜尋相符項。如果找到了某個項目,物件閘道會嘗試使用記號中的密碼結合到所找到的可辨識名稱。如果身分證明有效,結合將會成功,並且物件閘道會授予存取權。

您可以透過將搜尋範圍設定為特定的組織單位,或者指定自訂搜尋過濾器 (例如,要求特定的群組成員資格、自訂物件類別或屬性),來限制允許的使用者。

21.9.2 要求

  • LDAP 或 Active Directory:物件閘道可存取的執行中 LDAP 例項。

  • 服務帳戶:物件閘道要使用且擁有搜尋權限的 LDAP 身分證明。

  • 使用者帳戶:LDAP 目錄中的至少一個使用者帳戶。

重要
重要:LDAP 使用者和本地使用者不能重疊

不得對本地使用者以及要使用 LDAP 進行驗證的使用者使用相同的使用者名稱。物件閘道無法區分兩者,會將它們視為同一個使用者。

提示
提示:健康檢查

使用 ldapsearch 公用程式可驗證服務帳戶或 LDAP 連接。例如:

tux > ldapsearch -x -D "uid=ceph,ou=system,dc=example,dc=com" -W \
-H ldaps://example.com -b "ou=users,dc=example,dc=com" 'uid=*' dn

請務必在 Ceph 組態檔案中使用相同的 LDAP 參數,以杜絕可能的問題。

21.9.3 將物件閘道設定為使用 LDAP 驗證

以下參數與 LDAP 驗證相關:

rgw_ldap_uri

指定要使用的 LDAP 伺服器。請務必使用 ldaps://FQDN:PORT 參數,以免公開傳輸純文字身分證明。

rgw_ldap_binddn

物件閘道使用的服務帳戶的可辨識名稱 (DN)。

rgw_ldap_secret

服務帳戶的密碼。

rgw_ldap_searchdn

指定在目錄資訊樹狀結構中搜尋使用者的範圍,可以是使用者的組織單位,或某個更具體的組織單位 (OU)。

rgw_ldap_dnattr

在建構的搜尋過濾器中用來比對某個使用者名稱的屬性。根據所用的目錄資訊樹狀結構 (DIT),可能會是 uidcn

rgw_search_filter

如果未指定,則物件閘道會使用 rgw_ldap_dnattr 設定自動建構搜尋過濾器。使用此參數能非常靈活地縮小所允許使用者清單的範圍。如需詳細資料,請參閱第 21.9.4 節 「使用自訂搜尋過濾器來限制使用者存取權」

21.9.4 使用自訂搜尋過濾器來限制使用者存取權

可透過兩種方式使用 rgw_search_filter 參數。

21.9.4.1 用於進一步限制所建構搜尋過濾器的部分過濾器

部分過濾器的範例:

"objectclass=inetorgperson"

物件閘道將照常使用記號中的使用者名稱和 rgw_ldap_dnattr 的值產生搜尋過濾器。然後,建構的過濾器將與 rgw_search_filter 屬性中的部分過濾器合併。根據所用的使用者名稱和設定,最終的搜尋過濾器可能會變成:

"(&(uid=hari)(objectclass=inetorgperson))"

在這種情況下,僅當在 LDAP 目錄中找到了使用者「hari」,該使用者具有物件類別「inetorgperson」並且確實指定了有效密碼時,才向他授予存取權。

21.9.4.2 完整過濾器

完整過濾器必須包含 USERNAME 記號,在嘗試驗證期間,將以使用者名稱取代該記號。在這種情況下,不再使用 rgw_ldap_dnattr 參數。例如,若要將有效使用者限制為特定的群組,可使用以下過濾器:

"(&(uid=USERNAME)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"
注意
注意:memberOf 屬性

若要在 LDAP 搜尋中使用 memberOf 屬性,您的特定 LDAP 伺服器實作需要提供伺服器端支援。

21.9.5 產生用於 LDAP 驗證的存取記號

radosgw-token 公用程式根據 LDAP 使用者名稱和密碼產生存取記號。它會輸出 base-64 編碼字串,即實際的存取記號。請使用偏好的 S3 用戶端 (請參閱第 21.5.1 節 「存取物件閘道」),將該記號指定為存取金鑰,並使用空白機密金鑰。

tux > export RGW_ACCESS_KEY_ID="USERNAME"
tux > export RGW_SECRET_ACCESS_KEY="PASSWORD"
cephuser@adm > radosgw-token --encode --ttype=ldap
重要
重要:純文字身分證明

存取記號是一個 base-64 編碼的 JSON 結構,並包含純文字形式的 LDAP 身分證明。

注意
注意:Active Directory

對於 Active Directory,請使用 --ttype=ad 參數。

21.10 桶索引分區

物件閘道在索引池中儲存桶索引資料,該池預設為 .rgw.buckets.index。如果將太多 (數十萬個) 物件放入單個桶中,並且不設定每個桶的最大物件數量定額 (rgw bucket default quota max objects),索引池的效能可能會下降。桶索引分區可在允許每個桶中放入大量物件的同時,防止出現此類效能下降的情況。

21.10.1 桶索引重新分區

如果隨著桶的增大,其初始組態不再能符合需求,則需要對桶的索引池進行重新分區。您可以使用自動線上桶索引重新分區功能 (請參閱第 21.10.1.1 節 「動態重新分區」),也可以手動離線執行桶索引重新分區 (請參閱第 21.10.1.2 節 「手動重新分區」)。

21.10.1.1 動態重新分區

從 SUSE Enterprise Storage 5 開始,我們支援線上桶重新分區功能。此功能會偵測每個桶的物件數量是否達到某個閾值,如果達到該閾值,將會相應地自動增加桶索引使用的分區數量。此程序會減少每個桶索引分區中的項目數。

該偵測程序在以下情況和環境中執行:

  • 當有新的物件新增至桶中時。

  • 在定期掃描所有桶的背景程序中。掃描的目的是為了處理未在更新的現有桶。

需要重新分區的桶會新增至 reshard_log 佇列,且將排程於稍後進行重新分區。重新分區線串在背景中執行,並將逐個執行已排程的重新分區。

設定動態重新分區
rgw_dynamic_resharding

啟用或停用動態桶索引重新分區。可用的值為「true」或「false」。預設設為「true」。

rgw_reshard_num_logs

重新分區記錄的分區數。預設設為 16。

rgw_reshard_bucket_lock_duration

重新分區期間將桶物件鎖定的持續時間。預設設為 120 秒。

rgw_max_objs_per_shard

每個桶索引分區的最大物件數。預設設為 100000 個物件。

rgw_reshard_thread_interval

兩輪重新分區線串處理間隔的最長時間。預設設為 600 秒。

用於管理重新分區程序的指令
將桶新增至重新分區佇列:
cephuser@adm > radosgw-admin reshard add \
 --bucket BUCKET_NAME \
 --num-shards NEW_NUMBER_OF_SHARDS
列出重新分區佇列:
cephuser@adm > radosgw-admin reshard list
處理/排程桶重新分區:
cephuser@adm > radosgw-admin reshard process
顯示桶重新分區狀態:
cephuser@adm > radosgw-admin reshard status --bucket BUCKET_NAME
取消等待中的桶重新分區:
cephuser@adm > radosgw-admin reshard cancel --bucket BUCKET_NAME

21.10.1.2 手動重新分區

第 21.10.1.1 節 「動態重新分區」所述的動態重新分區僅適用於簡單物件閘道組態。對於多站台組態,請使用本節所述的手動重新分區。

若要手動對桶索引執行離線重新分區,請使用以下指令:

cephuser@adm > radosgw-admin bucket reshard

bucket reshard 指令執行以下操作:

  • 為指定物件建立一組新的桶索引物件。

  • 分散這些索引物件的所有項目。

  • 建立新的桶例項。

  • 列出新的桶例項以及桶,以便所有新的索引操作都能夠套用到新的桶索引。

  • 將舊的和新的桶 ID 列印到標準輸出。

提示
提示

選擇分區數量時,請注意以下幾點:確定每個分區不超過 100000 個項目。如果在各個分區中均勻分佈桶索引項目,使用質數數量的桶索引分區通常效果更佳。例如,使用 503 個桶索引分區會比使用 500 個的效果更佳,因為前者為質數。

程序 21.1︰ 對桶索引重新分區
  1. 確定對桶執行的所有操作都已停止。

  2. 備份原始桶索引:

    cephuser@adm > radosgw-admin bi list \
     --bucket=BUCKET_NAME \
     > BUCKET_NAME.list.backup
  3. 對桶索引重新分區:

     cephuser@adm > radosgw-admin bucket reshard \
     --bucket=BUCKET_NAME \
     --num-shards=NEW_SHARDS_NUMBER
    提示
    提示:舊桶 ID

    此指令還會將新的和舊的桶 ID 列印到其輸出中。

21.10.2 新桶的桶索引分區

有兩個選項會影響桶索引分區:

  • 對於簡單組態,請使用 rgw_override_bucket_index_max_shards 選項。

  • 對於多站台組態,請使用 bucket_index_max_shards 選項。

將選項設為 0 將停用桶索引分區。如果將其設為大於 0 的值,則會啟用桶索引分區,並設定最大分區數。

下面的公式可協助您計算建議的分區數:

number_of_objects_expected_in_a_bucket / 100000

注意,分區的最大數量為 7877。

21.10.2.1 多站台組態

多站台組態可能會使用另一個索引池來管理容錯移轉。若要為一個區域群組內的區域設定一致的分區數量,請在該區域群組的組態中設定 bucket_index_max_shards 選項:

  1. 將區域群組組態輸出至 zonegroup.json 檔案:

    cephuser@adm > radosgw-admin zonegroup get > zonegroup.json
  2. 編輯 zonegroup.json 檔案,為每個指定的區域設定 bucket_index_max_shards 選項。

  3. 重設區域群組:

    cephuser@adm > radosgw-admin zonegroup set < zonegroup.json
  4. 更新期間。請參閱第 21.13.2.6 節 「更新期間」

21.11 OpenStack Keystone 整合

OpenStack Keystone 是一項用於 OpenStack 產品的身分服務。您可以將物件閘道與 Keystone 相整合,以設定接受 Keystone 驗證記號的閘道。Ceph 物件閘道端將會對 Keystone 授權可存取閘道的使用者進行驗證,並視需要自動建立使用者。物件閘道會定期查詢 Keystone,以獲取已撤銷記號清單。

21.11.1 設定 OpenStack

設定 Ceph 物件閘道前,需要先設定 OpenStack Keystone 以啟用 Swift 服務,並將其指向 Ceph 物件閘道:

  1. 設定 Swift 服務。若要使用 OpenStack 來驗證 Swift 使用者,請先建立 Swift 服務:

    tux > openstack service create \
     --name=swift \
     --description="Swift Service" \
     object-store
  2. 設定端點。建立 Swift 服務後,指向 Ceph 物件閘道。以閘道的區域群組名稱或區域名稱取代 REGION_NAME

    tux > openstack endpoint create --region REGION_NAME \
     --publicurl   "http://radosgw.example.com:8080/swift/v1" \
     --adminurl    "http://radosgw.example.com:8080/swift/v1" \
     --internalurl "http://radosgw.example.com:8080/swift/v1" \
     swift
  3. 驗證設定。建立 Swift 服務並設定端點後,顯示端點以確認所有設定正確無誤。

    tux > openstack endpoint show object-store

21.11.2 設定 Ceph 物件閘道

21.11.2.1 設定 SSL 證書

Ceph 物件閘道會定期查詢 Keystone,以獲取已撤銷記號清單。系統會對這些要求加以編碼並簽署。還可設定 Keystone 以提供自行簽署的記號,這些記號同樣經過編碼和簽署。您需要設定閘道以便其可以解碼並驗證這些已簽署訊息。因此,需要將 Keystone 用於建立要求的 OpenSSL 證書轉換為「nss db」格式:

root # mkdir /var/ceph/nss
root # openssl x509 -in /etc/keystone/ssl/certs/ca.pem \
 -pubkey | certutil -d /var/ceph/nss -A -n ca -t "TCu,Cu,Tuw"
rootopenssl x509 -in /etc/keystone/ssl/certs/signing_cert.pem \
 -pubkey | certutil -A -d /var/ceph/nss -n signing_cert -t "P,P,P"

為允許 Ceph 物件閘道與 OpenStack Keystone 互動,OpenStack Keystone 可使用自行簽署的 SSL 證書。可在執行 Ceph 物件閘道的節點上安裝 Keystone 的 SSL 證書,也可以將選項 rgw keystone verify ssl 的值設為「false」。將 rgw keystone verify ssl 設為「false」表示閘道將不會嘗試驗證證書。

21.11.2.2 設定物件閘道的選項

您可以使用以下選項設定 Keystone 整合:

rgw keystone api version

Keystone API 的版本。有效選項為 2 或 3。預設設為 2。

rgw keystone url

Keystone 伺服器上管理 RESTful API 的 URL 和連接埠號碼。採用 SERVER_URL:PORT_NUMBER 模式。

rgw keystone admin token

在 Keystone 內部為管理要求設定的記號或共用機密。

rgw keystone accepted roles

處理要求需要具有的角色。預設設為「Member, admin」。

rgw keystone accepted admin roles

允許使用者獲取管理特權的角色清單。

rgw keystone token cache size

Keystone 記號快取中的最大項目數。

rgw keystone revocation interval

檢查已撤銷記號前間隔的秒數。預設設為 15 * 60。

rgw keystone implicit tenants

在各自的同名租用戶中建立新使用者。預設設為「false」。

rgw s3 auth use keystone

如果設為「true」,Ceph 物件閘道將使用 Keystone 對使用者進行驗證。預設設為「false」。

nss db path

NSS 資料庫的路徑。

還可以設定 Keystone 服務租用戶、Keystone 的使用者和密碼 (適用於 OpenStack Identity API 2.0 版本),設定方法與設定 OpenStack 服務的方法類似。使用此方法可避免在組態檔案中設定共用機密 rgw keystone admin token,生產環境中應停用該共用機密。服務租用戶身分證明應具有管理員權限。如需更多詳細資料,請參閱官方 OpenStack Keystone 文件。相關組態選項如下:

rgw keystone admin user

Keystone 管理員使用者名稱。

rgw keystone admin password

Keystone 管理員使用者密碼。

rgw keystone admin tenant

Keystone 2.0 版管理員使用者租用戶。

Ceph 物件閘道使用者與 Keystone 租用戶一一對應。系統會為一個 Keystone 使用者指定不同的角色,這些角色可能分佈在不止一個租用戶上。當 Ceph 物件閘道收到票證時,會查看為該票證指定的租用戶和使用者角色,並根據 rgw keystone accepted roles 選項的設定接受或拒絕要求。

提示
提示:對應到 OpenStack 租用戶

雖然 Swift 租用戶預設會對應到物件閘道使用者,但也可透過 rgw keystone implicit tenants 選項將其對應到 OpenStack 租用戶。如此會讓容器使用租用戶名稱空間,而不是物件閘道預設採用的 S3 之類全域名稱空間。建議在規劃階段就決定好對應方法,以免產生混淆。這是因為以後切換選項只會影響租用戶下所對應的較新要求,而先前建立的舊桶仍將繼續放在全域名稱空間中。

對於 OpenStack Identity API 3 版本,您應使用以下選項取代 rgw keystone admin tenant 選項:

rgw keystone admin domain

Keystone 管理員使用者網域。

rgw keystone admin project

Keystone 管理員使用者專案。

21.12 池放置和儲存類別

21.12.1 顯示放置目標

放置目標用於控制哪些池與特定桶相關聯。桶的放置目標是在建立桶時選取的,無法修改。您可透過執行以下指令來顯示桶的 placement_rule

cephuser@adm > radosgw-admin bucket stats

區域群組組態包含一個放置目標清單,其中初始目標名為「default-placement」。區域組態隨後會將每個區域群組放置目標名稱對應至其本地儲存。此區域放置資訊包括表示桶索引的「index_pool」名稱、表示不完整多部分上傳相關中繼資料的「data_extra_pool」名稱,以及表示每個儲存類別的「data_pool」名稱。

21.12.2 儲存類別

儲存類別有助於自訂物件資料的放置。S3 桶生命週期規則可自動轉換物件的儲存類別。

依據放置目標來定義儲存類別。每個區域群組放置目標會列出它的可用儲存類別,其中初始類別名為「STANDARD」。區域組態負責為每個區域群組的儲存類別提供「data_pool」池名稱。

21.12.3 設定區域群組和區域

您可以對區域群組和區域使用 radosgw-admin 指令來設定其放置。可以使用以下指令來查詢區域群組放置組態:

cephuser@adm > radosgw-admin zonegroup get
{
    "id": "ab01123f-e0df-4f29-9d71-b44888d67cd5",
    "name": "default",
    "api_name": "default",
    ...
    "placement_targets": [
        {
            "name": "default-placement",
            "tags": [],
            "storage_classes": [
                "STANDARD"
            ]
        }
    ],
    "default_placement": "default-placement",
    ...
}

若要查詢區域放置組態,請執行以下指令:

cephuser@adm > radosgw-admin zone get
{
    "id": "557cdcee-3aae-4e9e-85c7-2f86f5eddb1f",
    "name": "default",
    "domain_root": "default.rgw.meta:root",
    ...
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "default.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "default.rgw.buckets.data"
                    }
                },
                "data_extra_pool": "default.rgw.buckets.non-ec",
                "index_type": 0
            }
        }
    ],
    ...
}
注意
注意:之前未進行多站台設定

如果您之前未進行過任何多站台組態,系統將會為您建立「default」區域和區域群組,並且您必須重新啟動 Ceph 物件閘道,對該區域/區域群組所做的變更才會生效。如果您已建立過多站台領域,則當您使用 radosgw-admin period update --commit 指令提交對區域/區域群組的變更後,變更即會生效。

21.12.3.1 新增放置目標

若要建立一個名為「temporary」的新放置目標,首先請將該放置目標新增至區域群組:

cephuser@adm > radosgw-admin zonegroup placement add \
      --rgw-zonegroup default \
      --placement-id temporary

然後為該目標提供區域放置資訊:

cephuser@adm > radosgw-admin zone placement add \
      --rgw-zone default \
      --placement-id temporary \
      --data-pool default.rgw.temporary.data \
      --index-pool default.rgw.temporary.index \
      --data-extra-pool default.rgw.temporary.non-ec

21.12.3.2 新增儲存類別

若要新增一個名為「COLD」的新儲存類別至「default-placement」目標,首先請將該儲存類別新增至區域群組:

cephuser@adm > radosgw-admin zonegroup placement add \
      --rgw-zonegroup default \
      --placement-id default-placement \
      --storage-class COLD

然後為該儲存類別提供區域放置資訊:

cephuser@adm > radosgw-admin zone placement add \
      --rgw-zone default \
      --placement-id default-placement \
      --storage-class COLD \
      --data-pool default.rgw.cold.data \
      --compression lz4

21.12.4 放置自訂

21.12.4.1 編輯預設區域群組放置

新桶預設會使用區域群組的 default_placement 目標。您可以使用以下指令變更此區域群組設定:

cephuser@adm > radosgw-admin zonegroup placement default \
      --rgw-zonegroup default \
      --placement-id new-placement

21.12.4.2 編輯預設使用者放置

Ceph 物件閘道使用者可以透過在使用者資訊中設定非空白 default_placement 欄位,來覆寫區域群組的預設放置目標。同樣,default_storage_class 也可以覆寫預設套用於物件的 STANDARD 儲存類別。

cephuser@adm > radosgw-admin user info --uid testid
{
    ...
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    ...
}

如果區域群組的放置目標包含任何標記,則除非使用者資訊的「placement_tags」欄位中至少包含一個相符的標記,否則使用者將無法建立具有該放置目標的桶。這有助於限制對某些特定儲存類型的存取。

radosgw-admin 無法直接修改這些欄位,因此您需要手動編輯 JSON 格式:

cephuser@adm > radosgw-admin metadata get user:USER-ID > user.json
tux > vi user.json     # edit the file as required
cephuser@adm > radosgw-admin metadata put user:USER-ID < user.json

21.12.4.3 編輯 S3 預設桶放置

採用 S3 通訊協定建立桶時,可在 LocationConstraint 選項中提供放置目標,以覆寫使用者和區域群組的預設放置目標。

通常,LocationConstraint 需要與區域群組的 api_name 相符:

<LocationConstraint>default</LocationConstraint>

您可以新增自訂放置目標至 api_name (需在該自訂目標前加上一個冒號):

<LocationConstraint>default:new-placement</LocationConstraint>

21.12.4.4 編輯 Swift 桶放置

採用 Swift 通訊協定建立桶時,您可以在 HTTP 標題的 X-Storage-Policy 中提供放置目標:

X-Storage-Policy: NEW-PLACEMENT

21.12.5 使用儲存類別

所有放置目標均具有 STANDARD 儲存類別,這是系統預設為新物件套用的儲存類別。您可以使用物件的 default_storage_class 覆寫此預設值。

若要建立不屬於預設儲存類別的物件,請在要求的 HTTP 標題中提供所需的儲存類別名稱。S3 通訊協定使用 X-Amz-Storage-Class 標題,而 Swift 通訊協定則使用 X-Object-Storage-Class 標題。

憑藉 S3 物件生命週期管理,您可以使用轉換操作來切換物件資料的儲存類別。

21.13 多站台物件閘道

Ceph 支援為 Ceph 物件閘道選擇以下多種多站台組態選項:

多區域

由一個區域群組和多個區域組成的組態,每個區域有一或多個 ceph-radosgw 例項。每個區域由各自的 Ceph 儲存叢集提供支援。當區域群組中的其中一個區域出現嚴重故障時,該區域群組中的其他區域可為區域群組提供災難備援。每個區域都處於使用中狀態且可接收寫入操作。除了災難備援外,多個使用中區域還可做為內容傳遞網路的基礎。

多區域群組

Ceph 物件閘道支援多個區域群組,每個區域群組有一或多個區域。物件會儲存到一個區域群組中的多個區域,而同屬於一個領域的另一個區域群組會共用全域物件名稱空間,以確保物件 ID 在各個區域群組和區域間保持唯一。

注意
注意

請務必注意,區域群組會在各個區域群組之間同步中繼資料。區域群組內的各個區域之間會複製資料和中繼資料。但任何資料和中繼資料均不會在領域中共用。

多個領域

Ceph 物件閘道支援領域 (即全域唯一的名稱空間) 概念。支援使用多個領域,每個領域可包含一或多個區域群組。

您可以將每個物件閘道設定為以主動/主動區域組態執行,以便允許向非主區域寫入資料。多站台組態儲存在名為領域的容器內。領域中會儲存區域群組、區域和包含多個版本編號 (用於追蹤對組態的變更) 的期間。rgw 精靈負責處理同步,因而不需要另行提供同步代理程式。這種同步方法可讓 Ceph 物件閘道以主動/主動組態 (而非主動/被動組態) 執行。

21.13.1 要求和假設

多站台組態至少需要兩個 Ceph 儲存叢集以及兩個 Ceph 物件閘道例項,每個 Ceph 物件閘道例項對應一個 Ceph 儲存叢集。以下組態假設至少有兩個 Ceph 儲存叢集分佈在不同的地理位置。但該組態也可在同一站台執行。例如,有兩個名為 rgw1rgw2 的主機。

多站台組態需要有一個主區域群組和一個主區域。主區域是與多站台叢集中所有中繼資料操作相關的信任資料來源。此外,每個區域群組都需要有一個主區域。區域群組可以有一或多個次要區域或非主區域。在本指南中,rgw1 主機做為主區域群組的主區域,rgw2 主機做為主區域群組的次要區域。

21.13.2 設定主區域

多站台組態中的所有閘道都要從主區域群組和主區域內主機上的 ceph-radosgw 精靈擷取其組態。若要在多站台組態中設定您的閘道,請選取 ceph-radosgw 例項以設定主區域群組和主區域。

21.13.2.1 建立領域

領域表示全域唯一的名稱空間,由包含一或多個區域的一或多個區域群組組成。區域包含桶,而桶包含物件。憑藉領域,Ceph 物件閘道可以在相同硬體上支援多個名稱空間及其組態。領域包含期間概念。每個期間表示不同時間的區域群組和區域組態的狀態。每次您變更區域群組或區域時,請更新期間並提交更新。出於反向相容性考慮,Ceph 物件閘道預設不會建立領域。做為最佳實務,我們建議您為新叢集建立領域。

若要為多站台組態建立名為 gold 的新領域,請在識別為用於主區域群組和主區域中的主機上開啟指令行介面。然後執行以下指令:

cephuser@adm > radosgw-admin realm create --rgw-realm=gold --default

如果叢集只有一個領域,請指定 --default 旗標。如果指定了 --defaultradosgw-admin 會預設為使用此領域。如果未指定 --default,新增區域群組和區域時需要指定 --rgw-realm--realm-id 旗標以識別相應的領域。

建立領域後,使用 radosgw-admin 可傳回領域組態:

{
  "id": "4a367026-bd8f-40ee-b486-8212482ddcd7",
  "name": "gold",
  "current_period": "09559832-67a4-4101-8b3f-10dfcd6b2707",
  "epoch": 1
}
注意
注意

Ceph 會為領域產生唯一的 ID,因此允許使用者在需要時重新命名領域。

21.13.2.2 建立主區域群組

領域必須至少有一個區域群組做為該領域的主區域群組。若要為多站台組態建立新的主區域群組,請在識別為用於主區域群組和主區域中的主機上開啟指令行介面。透過執行以下指令建立名為 us 的主區域群組:

cephuser@adm > radosgw-admin zonegroup create --rgw-zonegroup=us \
--endpoints=http://rgw1:80 --master --default

如果領域只有一個區域群組,請指定 --default 旗標。如果指定了 --defaultradosgw-admin 在新增新區域時預設會使用此區域群組。如果未指定 --default,新增區域時需要指定 --rgw-zonegroup--zonegroup-id 旗標以識別新增或修改區域時的相應區域群組。

建立主區域群組後,使用 radosgw-admin 可傳回區域群組組態。例如:

{
 "id": "d4018b8d-8c0d-4072-8919-608726fa369e",
 "name": "us",
 "api_name": "us",
 "is_master": "true",
 "endpoints": [
     "http:\/\/rgw1:80"
 ],
 "hostnames": [],
 "hostnames_s3website": [],
 "master_zone": "",
 "zones": [],
 "placement_targets": [],
 "default_placement": "",
 "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"
}

21.13.2.3 建立主區域

重要
重要

需要在將要置於區域內的 Ceph 物件閘道節點上建立區域。

若要為多站台組態建立新的主區域,請在識別為用於主區域群組和主區域中的主機上開啟指令行介面。執行以下項目:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-1 \
--endpoints=http://rgw1:80 --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY
注意
注意

上面的範例中未指定 --access-key--secret 選項。在下一節中建立使用者時會將這些設定新增至區域中。

建立主區域後,使用 radosgw-admin 可傳回區域組態。例如:

  {
      "id": "56dfabbb-2f4e-4223-925e-de3c72de3866",
      "name": "us-east-1",
      "domain_root": "us-east-1.rgw.meta:root",
      "control_pool": "us-east-1.rgw.control",
      "gc_pool": "us-east-1.rgw.log:gc",
      "lc_pool": "us-east-1.rgw.log:lc",
      "log_pool": "us-east-1.rgw.log",
      "intent_log_pool": "us-east-1.rgw.log:intent",
      "usage_log_pool": "us-east-1.rgw.log:usage",
      "reshard_pool": "us-east-1.rgw.log:reshard",
      "user_keys_pool": "us-east-1.rgw.meta:users.keys",
      "user_email_pool": "us-east-1.rgw.meta:users.email",
      "user_swift_pool": "us-east-1.rgw.meta:users.swift",
      "user_uid_pool": "us-east-1.rgw.meta:users.uid",
      "otp_pool": "us-east-1.rgw.otp",
      "system_key": {
          "access_key": "1555b35654ad1656d804",
          "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
      },
      "placement_pools": [
          {
              "key": "us-east-1-placement",
              "val": {
                  "index_pool": "us-east-1.rgw.buckets.index",
                  "storage_classes": {
                      "STANDARD": {
                          "data_pool": "us-east-1.rgw.buckets.data"
                      }
                  },
                  "data_extra_pool": "us-east-1.rgw.buckets.non-ec",
                  "index_type": 0
              }
          }
      ],
      "metadata_heap": "",
      "realm_id": ""
  }

21.13.2.4 刪除預設區域和群組

重要
重要

下列步驟假設多站台組態使用的是新安裝的系統,即其中尚未儲存任何資料。如果您已在使用預設區域及其池儲存資料,請勿刪除該區域及其池,否則資料將被刪除且無法復原。

採用預設設定安裝物件閘道時會建立名為 default 的預設區域群組。刪除預設區域 (如果存在)。請務必先將其從預設區域群組中移除。

cephuser@adm > radosgw-admin zonegroup delete --rgw-zonegroup=default

刪除 Ceph 儲存叢集中的預設池 (如果存在):

重要
重要

下列步驟假設多站台組態使用的是新安裝的系統,即目前未儲存任何資料。如果您已在使用預設區域群組儲存資料,請勿刪除該區域群組。

cephuser@adm > ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.meta default.rgw.meta --yes-i-really-really-mean-it
警告
警告

如果您刪除預設區域群組,則將同時刪除系統使用者。如果未傳播您的管理員使用者金鑰,Ceph Dashboard 的物件閘道管理功能將會失效。如您執行此步驟,請遵循下一節的操作,以重新建立您的系統使用者。

21.13.2.5 建立系統使用者

ceph-radosgw 精靈在提取領域和期間資訊前必須進行驗證。在主區域中,建立系統使用者以簡化精靈之間的驗證:

cephuser@adm > radosgw-admin user create --uid=zone.user \
--display-name="Zone User" --access-key=SYSTEM_ACCESS_KEY \
--secret=SYSTEM_SECRET_KEY --system

記下 access_keysecret_key,因為次要區域需要使用它們向主區域進行驗證。

將系統使用者新增至主區域:

cephuser@adm > radosgw-admin zone modify --rgw-zone=us-east-1 \
--access-key=ACCESS-KEY --secret=SECRET

更新期間,以使變更生效:

cephuser@adm > radosgw-admin period update --commit

21.13.2.6 更新期間

更新主區域組態後,請更新期間:

cephuser@adm > radosgw-admin period update --commit

更新期間後,使用 radosgw-admin 可傳回期間組態。例如:

{
  "id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "epoch": 1, "predecessor_uuid": "", "sync_status": [], "period_map":
  {
    "id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "zonegroups": [], "short_zone_ids": []
  }, "master_zonegroup": "", "master_zone": "", "period_config":
  {
     "bucket_quota": {
     "enabled": false, "max_size_kb": -1, "max_objects": -1
     }, "user_quota": {
       "enabled": false, "max_size_kb": -1, "max_objects": -1
     }
  }, "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7", "realm_name": "gold", "realm_epoch": 1
}
注意
注意

更新期間會變更版本編號,並會確保其他區域可收到更新的組態。

21.13.2.7 啟動閘道

在物件閘道主機上,啟動並啟用 Ceph 物件閘道服務。若要識別叢集的唯一 FSID,請執行 ceph fsid。若要識別物件閘道精靈名稱,請執行 ceph orch ps --hostname HOSTNAME

cephuser@ogw > systemctl start ceph-FSID@DAEMON_NAME
cephuser@ogw > systemctl enable ceph-FSID@DAEMON_NAME

21.13.3 設定次要區域

區域群組內的區域會複製所有資料,以確保各區域都具有相同資料。建立次要區域時,請在指定為次要區域提供服務的主機上執行以下所有操作。

注意
注意

若要新增第三個區域,請執行與新增次要區域相同的程序。請使用不同的區域名稱。

重要
重要

您必須在主區域內的主機上執行中繼資料操作 (例如建立使用者)。主區域及次要區域均可接收桶操作,但次要區域會將桶操作重新導向至主區域。如果主區域處於停機狀態,桶操作將會失敗。

21.13.3.1 提取領域

使用主區域群組中的主區域的 URL 路徑、存取金鑰和機密金鑰將領域組態提取至主機。若要提取非預設領域,請使用 --rgw-realm--realm-id 組態選項指定該領域。

cephuser@adm > radosgw-admin realm pull --url=url-to-master-zone-gateway --access-key=access-key --secret=secret
注意
注意

提取領域會同時擷取遠端的目前期間組態,並將其設定為此主機上的目前期間。

如果此領域為預設領域或唯一的領域,請將其設定為預設領域。

cephuser@adm > radosgw-admin realm default --rgw-realm=REALM-NAME

21.13.3.2 建立次要區域

若要為多站台組態建立次要區域,請在識別為用於次要區域的主機上開啟指令行介面。為區域指定區域群組 ID、新區域名稱和端點。請勿使用 --master 旗標。所有區域預設均以主動/主動組態執行。如果次要區域不應接受寫入操作,請指定 --read-only 旗標以在主區域和次要區域之間建立主動/被動組態。此外,還需提供所產生系統使用者的 access_keysecret_key,這些資料儲存在主區域群組的主區域中。執行以下項目:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=ZONE-GROUP-NAME\
                            --rgw-zone=ZONE-NAME --endpoints=URL \
                            --access-key=SYSTEM-KEY --secret=SECRET\
                            --endpoints=http://FQDN:80 \
                            [--read-only]

例如:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=us --endpoints=http://rgw2:80 \
--rgw-zone=us-east-2 --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY
{
  "id": "950c1a43-6836-41a2-a161-64777e07e8b8",
  "name": "us-east-2",
  "domain_root": "us-east-2.rgw.data.root",
  "control_pool": "us-east-2.rgw.control",
  "gc_pool": "us-east-2.rgw.gc",
  "log_pool": "us-east-2.rgw.log",
  "intent_log_pool": "us-east-2.rgw.intent-log",
  "usage_log_pool": "us-east-2.rgw.usage",
  "user_keys_pool": "us-east-2.rgw.users.keys",
  "user_email_pool": "us-east-2.rgw.users.email",
  "user_swift_pool": "us-east-2.rgw.users.swift",
  "user_uid_pool": "us-east-2.rgw.users.uid",
  "system_key": {
      "access_key": "1555b35654ad1656d804",
      "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r\/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
  },
  "placement_pools": [
      {
          "key": "default-placement",
          "val": {
              "index_pool": "us-east-2.rgw.buckets.index",
              "data_pool": "us-east-2.rgw.buckets.data",
              "data_extra_pool": "us-east-2.rgw.buckets.non-ec",
              "index_type": 0
          }
      }
  ],
  "metadata_heap": "us-east-2.rgw.meta",
  "realm_id": "815d74c2-80d6-4e63-8cfc-232037f7ff5c"
}
重要
重要

下列步驟假設多站台組態使用的是新安裝的系統,即其中尚未儲存任何資料。如果您已在使用預設區域及其池儲存資料,請勿刪除該區域及其池,否則資料將會遺失且無法復原。

視需要刪除預設區域:

cephuser@adm > radosgw-admin zone rm --rgw-zone=default

視需要刪除 Ceph 儲存叢集中的預設池:

cephuser@adm > ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

21.13.3.3 更新 Ceph 組態檔案

透過在相應例項項目中新增 rgw_zone 組態選項和次要區域名稱,來更新次要區域主機上的 Ceph 組態檔案。

為此,請執行以下指令:

cephuser@adm > ceph config set SERVICE_NAME rgw_zone us-west

21.13.3.4 更新期間

更新主區域組態後,請更新期間:

cephuser@adm > radosgw-admin period update --commit
{
  "id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",
  "epoch": 2,
  "predecessor_uuid": "09559832-67a4-4101-8b3f-10dfcd6b2707",
  "sync_status": [ "[...]"
  ],
  "period_map": {
      "id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",
      "zonegroups": [
          {
              "id": "d4018b8d-8c0d-4072-8919-608726fa369e",
              "name": "us",
              "api_name": "us",
              "is_master": "true",
              "endpoints": [
                  "http:\/\/rgw1:80"
              ],
              "hostnames": [],
              "hostnames_s3website": [],
              "master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",
              "zones": [
                  {
                      "id": "83859a9a-9901-4f00-aa6d-285c777e10f0",
                      "name": "us-east-1",
                      "endpoints": [
                          "http:\/\/rgw1:80"
                      ],
                      "log_meta": "true",
                      "log_data": "false",
                      "bucket_index_max_shards": 0,
                      "read_only": "false"
                  },
                  {
                      "id": "950c1a43-6836-41a2-a161-64777e07e8b8",
                      "name": "us-east-2",
                      "endpoints": [
                          "http:\/\/rgw2:80"
                      ],
                      "log_meta": "false",
                      "log_data": "true",
                      "bucket_index_max_shards": 0,
                      "read_only": "false"
                  }

              ],
              "placement_targets": [
                  {
                      "name": "default-placement",
                      "tags": []
                  }
              ],
              "default_placement": "default-placement",
              "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"
          }
      ],
      "short_zone_ids": [
          {
              "key": "83859a9a-9901-4f00-aa6d-285c777e10f0",
              "val": 630926044
          },
          {
              "key": "950c1a43-6836-41a2-a161-64777e07e8b8",
              "val": 4276257543
          }

      ]
  },
  "master_zonegroup": "d4018b8d-8c0d-4072-8919-608726fa369e",
  "master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",
  "period_config": {
      "bucket_quota": {
          "enabled": false,
          "max_size_kb": -1,
          "max_objects": -1
      },
      "user_quota": {
          "enabled": false,
          "max_size_kb": -1,
          "max_objects": -1
      }
  },
  "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7",
  "realm_name": "gold",
  "realm_epoch": 2
}
注意
注意

更新期間會變更版本編號,並會確保其他區域可收到更新的組態。

21.13.3.5 啟動物件閘道

在物件閘道主機上,啟動並啟用 Ceph 物件閘道服務:

cephuser@adm > ceph orch start rgw.us-east-2

21.13.3.6 檢查同步狀態

在次要區域啟用並執行時,檢查同步狀態。同步操作會將主區域中建立的使用者和桶複製到次要區域。

cephuser@adm > radosgw-admin sync status

下面的輸出提供了同步操作的狀態。例如:

realm f3239bc5-e1a8-4206-a81d-e1576480804d (gold)
    zonegroup c50dbb7e-d9ce-47cc-a8bb-97d9b399d388 (us)
         zone 4c453b70-4a16-4ce8-8185-1893b05d346e (us-west)
metadata sync syncing
              full sync: 0/64 shards
              metadata is caught up with master
              incremental sync: 64/64 shards
    data sync source: 1ee9da3e-114d-4ae3-a8a4-056e8a17f532 (us-east)
                      syncing
                      full sync: 0/128 shards
                      incremental sync: 128/128 shards
                      data is caught up with source
注意
注意

次要區域會接受桶操作,但會將它們重新導向至主區域,然後會與主區域同步以接收桶操作的結果。如果主區域處於停機狀態,對次要區域執行的桶操作將會失敗,但物件操作應該會成功完成。

21.13.4 一般物件閘道維護

21.13.4.1 檢查同步狀態

您可以使用以下指令查詢區域複製狀態的相關資訊:

cephuser@adm > radosgw-admin sync status
        realm b3bc1c37-9c44-4b89-a03b-04c269bea5da (gold)
    zonegroup f54f9b22-b4b6-4a0e-9211-fa6ac1693f49 (us)
         zone adce11c9-b8ed-4a90-8bc5-3fc029ff0816 (us-west)
        metadata sync syncing
              full sync: 0/64 shards
              incremental sync: 64/64 shards
              metadata is behind on 1 shards
              oldest incremental change not applied: 2017-03-22 10:20:00.0.881361s
data sync source: 341c2d81-4574-4d08-ab0f-5a2a7b168028 (us-east)
                  syncing
                  full sync: 0/128 shards
                  incremental sync: 128/128 shards
                  data is caught up with source
          source: 3b5d1a3f-3f27-4e4a-8f34-6072d4bb1275 (us-3)
                  syncing
                  full sync: 0/128 shards
                  incremental sync: 128/128 shards
                  data is caught up with source

21.13.4.2 變更中繼資料主區域

重要
重要

變更中繼資料的主區域時請小心。如果某個區域未完成與目前主區域的中繼資料同步,將其升級為主區域時,它將無法處理剩餘的項目,這些變更將會遺失。因此,我們建議等到區域的 radosgw-admin 同步狀態跟上中繼資料同步後,再將該區域升級為主區域。同樣,如果目前主區域正在處理對中繼資料的變更,此時若將另一個區域升級為主區域,這些變更也可能會遺失。為避免此情況,我們建議關閉先前主區域上的所有物件閘道例項。升級另一個區域後,可以使用 radosgw-admin 期間提取指令擷取它的新期間,然後可以重新啟動閘道。

若要將一個區域 (例如,us 區域群組中的 us-west 區域) 升級為中繼資料的主區域,請在該區域執行以下指令:

cephuser@ogw > radosgw-admin zone modify --rgw-zone=us-west --master
cephuser@ogw > radosgw-admin zonegroup modify --rgw-zonegroup=us --master
cephuser@ogw > radosgw-admin period update --commit

這樣會產生一個新期間,並且 us-west 區域中的物件閘道例項會將此期間傳送到其他區域。

21.13.5 執行容錯移轉和災難備援

如果主區域發生故障,將容錯移轉至次要區域,以實現災難備援。

  1. 將次要區域設為主區域和預設區域。例如:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --default

    依預設,Ceph 物件閘道以主動/主動組態執行。如果已將叢集設定為以主動/被動組態執行,則次要區域是唯讀區域。移除 --read-only 狀態可允許區域接收寫入操作。例如:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --default \
                                                       --read-only=false
  2. 更新期間,以使變更生效:

    cephuser@adm > radosgw-admin period update --commit
  3. 重新啟動 Ceph 物件閘道:

    cephuser@adm > ceph orch restart rgw

如果之前的主區域已復原,請還原操作。

  1. 在已復原的區域中,從目前主區域提取最新的領域組態。

    cephuser@adm > radosgw-admin realm pull --url=URL-TO-MASTER-ZONE-GATEWAY \
                               --access-key=ACCESS-KEY --secret=SECRET
  2. 將已復原的區域設定為主區域和預設區域:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --default
  3. 更新期間,以使變更生效:

    cephuser@adm > radosgw-admin period update --commit
  4. 在已復原的區域中重新啟動 Ceph 物件閘道:

    cephuser@adm > ceph orch restart rgw@rgw
  5. 如果次要區域需要採用唯讀組態,請更新次要區域:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --read-only
  6. 更新期間,以使變更生效:

    cephuser@adm > radosgw-admin period update --commit
  7. 在次要區域中重新啟動 Ceph 物件閘道:

    cephuser@adm > ceph orch restart@rgw