
新鈦雲服已累計為您分享833篇技術乾貨


在本系列的第一部分中,我們介紹了Ceph物件儲存的多站點特性,並準備好了用於部署和配置Ceph物件多站點非同步複製的實驗環境。
第二部分將詳細講解如何在兩個Ceph叢集之間建立初始的多站點複製配置,如下圖所示:


自Quincy版本起,Ceph引入了一個名為rgw的新管理器模組,整合在cephadm編排器中。該模組簡化了多站點複製的配置流程。本節將指導您如何使用rgw管理器模組,透過CLI在兩個獨立Ceph叢集(每個叢集作為一個區域)之間配置物件儲存多站點複製。
我們首先為cluster1建立一個RGW模組配置檔案。透過主機標籤來定義哪些節點可以託管每個服務。對於複製RGW服務,我們設定rgwsync標籤。任何配置了此標籤的主機都將啟動一個RGW服務,並使用檔案中定義的規格。
~]# cat << EOF >> /root/rgw.spec
placement:
label: rgwsync
count_per_host: 1
rgw_realm: multisite
rgw_zone: zone1
rgw_zonegroup: multizg
spec:
rgw_frontend_port: 8000
EOF
在我們的第一個叢集中,我們希望在節點
ceph-node-00
和ceph-node-01
上執行rgwsync
服務,因此我們需要標記相應的節點:[root@ceph-node-00 ~]# cephorchhostlabeladdceph-node-00.cephlab.comrgwsync
Addedlabelrgwsynctohostceph-node-00.cephlab.com
[root@ceph-node-00 ~]# cephorchhostlabeladdceph-node-01.cephlab.comrgwsync
Addedlabelrgwsynctohostceph-node-01.cephlab.com
標記節點後,我們啟用RGW管理器模組並引導RGW多站點配置。引導多站點配置時,rgw管理器模組將執行以下步驟:
-
建立領域、區域組和區域,並應用週期
-
建立特定於區域名稱的RGW RADOS池
-
建立RGW多站點複製同步使用者
-
為每個RGW服務配置領域、區域組和區域
-
使用cephadm Orchestrator建立RGW服務
[ ]
[ ]
Realm(s) created correctly. Please use 'ceph rgw realm tokens' to get the token.
我們可以透過以下命令檢查領域、同步使用者和RADOS池的建立情況:
[root@ceph-node-00 ~]# radosgw-admin realm list
{
"default_info": "d85b6eef-2285-4072-8407-35e2ea7a17a2",
"realms": [
"multisite"
]
}
多站點同步使用者:
[root@ceph01 ~]# radosgw-admin user list | grep sysuser
"Sysuser-multisite"
Zone1 RGW RADOS 池:
~]# ceph osd lspools | grep rgw
24.rgw.root
25zone1.rgw.log
26zone1.rgw.control
27zone1.rgw.meta
一旦我們建立了第一個桶,桶索引池就會自動建立。此外,一旦我們將第一個物件/資料上傳到
zone1
中的儲存桶,就會為我們建立資料池。預設情況下,副本為 3 的池是使用叢集的預定義 CRUSH 規則replicated_rule
建立的。如果我們想在資料池中使用糾刪碼 (EC) 或自定義故障域等,則需要在開始將資料上傳到第一個儲存桶之前,使用自定義內容手動預先建立池。[!CAUTION]請務必仔細檢查RGW池的Placement Groups(PG)數量是否正確,以確保所需的效能。我們可以選擇為每個池啟用帶有批次標誌(bulk flag)的PG自動擴充套件管理器模組,或者藉助PG計算器(https://docs.ceph.com/en/squid/rados/operations/pgcalc/)預先靜態計算池所需的PG數量。我們建議每個OSD的PG副本目標值為200,即"PG比例"。
[!CAUTION]只有RGW資料池可以配置為使用糾刪碼(erasure coding)。RGW其他池必須配置為副本,預設複製因子為3(size=3)。
RGW 服務已啟動並正在埠 8000 上為 S3 端點提供服務:
[root@ceph-node-00 ~]# curl http://ceph-node-00:8000
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
RGW 管理器模組建立一個帶有我們部署的編碼資訊的令牌。想要作為複製區域新增到我們的多站點配置的其他 Ceph 叢集可以將此令牌匯入到 RGW 管理器模組中,並使用單個命令配置和運行復制。
我們可以使用
ceph rgw realm tokens
命令檢查令牌的內容,並使用base64
命令對其進行解碼。正如您所看到的,它提供了輔助區域連線到主區域組並提取領域和區域組配置所需的資訊。[ ]
[ ]
{
"realm_name": "multisite",
"realm_id": "d85b6eef-2285-4072-8407-35e2ea7a17a2",
"endpoint": "http://ceph-node-00.cephlab.com:8000",
"access_key": "RUB7U4C6CCOMG3EM9QGF",
"secret": "vg8XFPehb21Y8oUMB9RS0XXXXH2E1qIDIhZzpC"
}
從提示中可以看到,我們已經切換到第二個 Ceph 叢集,從第一個叢集複製了令牌,並與第一個叢集類似地定義了其餘引數。
~]# cat rgw2.spec
placement:
label: rgwsync
count_per_host: 1
rgw_zone: zone2
rgw_realm_token: ewogICAgInJlYWxtX25hbWUiOiAibXVsdGlzaXRlIiwKICAgICJyZWFsbV9pZCI6ICIxNmM3OGJkMS0xOTIwLTRlMjMtOGM3Yi1lYmYxNWQ5ODI0NTgiLAogICAgImVuZHBvaW50IjogImh0dHA6Ly9jZXBoLW5vZGUtMDEuY2VwaGxhYi5jb206ODAwMCIsCiAgICAiYWNjZXNzX2tleSI6ICIwOFlXQ0NTNzEzUU9LN0pQQzFRUSIsCiAgICAic2VjcmV0IjogImZUZGlmTXpDUldaSXgwajI0ZEw4VGppRUFtOHpRdE01ZGNScXEyTjYiCn0=
spec:
rgw_frontend_port: 8000
我們標記將執行 Ceph RGW 同步服務的主機:
[root@ceph-node-04 ~]# cephorchhostlabeladdceph-node-04.cephlab.comrgwsync
Addedlabelrgwsynctohostceph-node-04.cephlab.com
[root@ceph-node-04 ~]# cephorchhostlabeladdceph-node-05.cephlab.comrgwsync
Addedlabelrgwsynctohostceph-node-05.cephlab.com
啟用該模組,並使用我們剛才建立的規範檔案執行
ceph rgw zone create
命令:[ ]
[ ]
Zones zone2 created successfully
rgw
管理器模組將負責使用多站點同步使用者的訪問金鑰和金鑰來拉取領域和區域組週期。最後,它將建立zone2
並進行最後一次更新,以便所有區域都具有最新的配置更改,並將zone2
新增到 zonegroup multizg
中。在radosgw-admin
zonegroup get
命令的以下輸出中,我們可以看到區域組端點。我們還可以看到zone1
是我們的 zonegroup 的主區域以及zone1
和zone2
的相應端點。[ ]
{
"id": "2761ad42-fd71-4170-87c6-74c20dd1e334",
"name": "multizg",
"api_name": "multizg",
"is_master": true,
"endpoints": [
"http://ceph-node-04.cephlab.com:8000",
"http://ceph-node-05.cephlab.com:8000"
],
"hostnames": [],
"hostnames_s3website": [],
"master_zone": "66df8c0a-c67d-4bd7-9975-bc02a549f13e",
"zones": [
{
"id": "66df8c0a-c67d-4bd7-9975-bc02a549f13e",
"name": "zone1",
"endpoints": [
"http://ceph-node-00.cephlab.com:8000",
"http://ceph-node-01.cephlab.com:8000"
],
"log_meta": false,
"log_data": true,
"bucket_index_max_shards": 11,
"read_only": false,
"tier_type": "",
"sync_from_all": true,
"sync_from": [],
"redirect_zone": "",
"supported_features": [
"compress-encrypted",
"resharding"
]
},
{
"id": "7b9273a9-eb59-413d-a465-3029664c73d7",
"name": "zone2",
"endpoints": [
"http://ceph-node-04.cephlab.com:8000",
"http://ceph-node-05.cephlab.com:8000"
],
"log_meta": false,
"log_data": true,
"bucket_index_max_shards": 11,
"read_only": false,
"tier_type": "",
"sync_from_all": true,
"sync_from": [],
"redirect_zone": "",
"supported_features": [
"compress-encrypted",
"resharding"
]
}
],
"placement_targets": [
{
"name": "default-placement",
"tags": [],
"storage_classes": [
"STANDARD"
]
}
],
"default_placement": "default-placement",
"realm_id": "beeea955-8341-41cc-a046-46de2d5ddeb9",
"sync_policy": {
"groups": []
},
"enabled_features": [
"resharding"
]
}
為了驗證複製是否正常工作,我們建立一個使用者和一個儲存桶:
[root-00 ~]# radosgw-admin user create --uid='user1' --display-name='First User' --access-key='S3user1' --secret-key='S3user1key' -node
[root-00 ~]# aws configure -node
AWS Access Key ID [None]: S3user1
AWS Secret Access Key [None]: S3user1key
Default region name [None]: multizg
Default output format [None]: json
[root-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 ls -node
[root-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 mb s3://firstbucket -node
make_bucket: firstbucket
[root-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 cp /etc/hosts s3://firstbucket -node
upload: ../etc/hosts to s3://firstbucket/hosts
如果我們從第二個 Ceph 叢集
zone2
進行檢查,我們可以看到所有元資料都已複製,並且我們在zone1
中建立的所有使用者和儲存桶現在都存在於zone2
中。[!CAUTION]注意:在此示例中,我們將使用radosgw-admin
命令進行檢查,但我們也可以使用 S3 API 命令將 AWS 客戶端指向第二個區域內 RGW 的 IP/主機名。
[ ]
[
,
,
]
[ ]
"testbucket"
要檢查複製狀態,我們可以使用
radosgw-admin sync status
命令。例如:~]# radosgw-admin sync status
realmbeeea955-8341-41cc-a046-46de2d5ddeb9 (multisite)
zonegroup2761ad42-fd71-4170-87c6-74c20dd1e334 (multizg)
zone66df8c0a-c67d-4bd7-9975-bc02a549f13e (zone1)
currenttime 2024-01-05T22:51:17Z
zonegroupfeatures enabled: resharding
disabled: compress-encrypted
metadatasync no sync (zone is master)
datasync source: 7b9273a9-eb59-413d-a465-3029664c73d7 (zone2)
syncing
fullsync: 0/128 shards
incrementalsync: 128/128 shards
datais caught up with source

回顧一下,在本系列的第二部分中,我們詳細講解了如何使用rgw管理器模組在兩個站點/區域之間部署Ceph物件儲存多站點複製。這只是一個開始,我們的目標是構建一個完整的部署,包括必要的負載均衡。

如有相關問題,請在文章後面給小編留言,小編安排作者第一時間和您聯絡,為您答疑解惑。
推薦閱讀


推薦影片