Ceph物件儲存多站點複製:第二部分

新鈦雲服已累計為您分享833篇技術乾貨
系列回顧與目標
在本系列的第一部分中,我們介紹了Ceph物件儲存的多站點特性,並準備好了用於部署和配置Ceph物件多站點非同步複製的實驗環境。
第二部分將詳細講解如何在兩個Ceph叢集之間建立初始的多站點複製配置,如下圖所示:
Ceph 物件儲存多站點初始配置概述
自Quincy版本起,Ceph引入了一個名為rgw的新管理器模組,整合在cephadm編排器中。該模組簡化了多站點複製的配置流程。本節將指導您如何使用rgw管理器模組,透過CLI在兩個獨立Ceph叢集(每個叢集作為一個區域)之間配置物件儲存多站點複製。
建立RGW模組配置檔案
我們首先為cluster1建立一個RGW模組配置檔案。透過主機標籤來定義哪些節點可以託管每個服務。對於複製RGW服務,我們設定rgwsync標籤。任何配置了此標籤的主機都將啟動一個RGW服務,並使用檔案中定義的規格。
[root@ceph-node-00~]# cat << EOF >> /root/rgw.specplacement:label: rgwsynccount_per_host: 1rgw_realm: multisitergw_zone: zone1rgw_zonegroup: multizgspec:rgw_frontend_port: 8000EOF
標記主機
在我們的第一個叢集中,我們希望在節點ceph-node-00ceph-node-01上執行rgwsync服務,因此我們需要標記相應的節點:
[root@ceph-node-00 ~]# cephorchhostlabeladdceph-node-00.cephlab.comrgwsyncAddedlabelrgwsynctohostceph-node-00.cephlab.com[root@ceph-node-00 ~]# cephorchhostlabeladdceph-node-01.cephlab.comrgwsyncAddedlabelrgwsynctohostceph-node-01.cephlab.com
啟用RGW管理器模組並引導配置
標記節點後,我們啟用RGW管理器模組並引導RGW多站點配置。引導多站點配置時,rgw管理器模組將執行以下步驟:
  • 建立領域、區域組和區域,並應用週期
  • 建立特定於區域名稱的RGW RADOS池
  • 建立RGW多站點複製同步使用者
  • 為每個RGW服務配置領域、區域組和區域
  • 使用cephadm Orchestrator建立RGW服務
[root@ceph-node-00 ~]# ceph mgr module enable rgw[root@ceph-node-00 ~]# ceph rgw realm bootstrap -i rgw.specRealm(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 池:
[root@ceph01~]# ceph osd lspools | grep rgw24.rgw.root25zone1.rgw.log26zone1.rgw.control27zone1.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命令對其進行解碼。正如您所看到的,它提供了輔助區域連線到主區域組並提取領域和區域組配置所需的資訊。
[root@ceph-node-00 ~]# TOKEN=$(ceph rgw realm tokens | jq .[0].token | sed 's/"//g')[root@ceph-node-00 ~]# echo $TOKEN | base64 -d{"realm_name": "multisite","realm_id": "d85b6eef-2285-4072-8407-35e2ea7a17a2","endpoint": "http://ceph-node-00.cephlab.com:8000","access_key": "RUB7U4C6CCOMG3EM9QGF","secret": "vg8XFPehb21Y8oUMB9RS0XXXXH2E1qIDIhZzpC"}
從提示中可以看到,我們已經切換到第二個 Ceph 叢集,從第一個叢集複製了令牌,並與第一個叢集類似地定義了其餘引數。
[root@ceph-node-04~]# cat rgw2.specplacement:label: rgwsynccount_per_host: 1rgw_zone: zone2rgw_realm_token: ewogICAgInJlYWxtX25hbWUiOiAibXVsdGlzaXRlIiwKICAgICJyZWFsbV9pZCI6ICIxNmM3OGJkMS0xOTIwLTRlMjMtOGM3Yi1lYmYxNWQ5ODI0NTgiLAogICAgImVuZHBvaW50IjogImh0dHA6Ly9jZXBoLW5vZGUtMDEuY2VwaGxhYi5jb206ODAwMCIsCiAgICAiYWNjZXNzX2tleSI6ICIwOFlXQ0NTNzEzUU9LN0pQQzFRUSIsCiAgICAic2VjcmV0IjogImZUZGlmTXpDUldaSXgwajI0ZEw4VGppRUFtOHpRdE01ZGNScXEyTjYiCn0=spec:rgw_frontend_port: 8000
我們標記將執行 Ceph RGW 同步服務的主機:
[root@ceph-node-04 ~]# cephorchhostlabeladdceph-node-04.cephlab.comrgwsyncAddedlabelrgwsynctohostceph-node-04.cephlab.com[root@ceph-node-04 ~]# cephorchhostlabeladdceph-node-05.cephlab.comrgwsyncAddedlabelrgwsynctohostceph-node-05.cephlab.com
啟用該模組,並使用我們剛才建立的規範檔案執行ceph rgw zone create命令:
[root@ceph02 ~]# ceph mgr module enable rgw[root@ceph02 ~]# ceph rgw zone create -i rgw2.spec --start-radosgwZones zone2 created successfully
rgw管理器模組將負責使用多站點同步使用者的訪問金鑰和金鑰來拉取領域和區域組週期。最後,它將建立zone2並進行最後一次更新,以便所有區域都具有最新的配置更改,並將zone2新增到 zonegroup multizg中。在radosgw-adminzonegroup get命令的以下輸出中,我們可以看到區域組端點。我們還可以看到zone1是我們的 zonegroup 的主區域以及zone1zone2的相應端點。
[root@ceph-node-00 ~]# radosgw-admin zonegroup get{"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@ceph-node-00 ~]# radosgw-admin user create --uid='user1' --display-name='First User' --access-key='S3user1' --secret-key='S3user1key'[root@ceph-node-00 ~]# aws configureAWS Access Key ID [None]: S3user1AWS Secret Access Key [None]: S3user1keyDefault region name [None]: multizgDefault output format [None]: json[root@ceph-node-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 ls[root@ceph-node-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 mb s3://firstbucketmake_bucket: firstbucket[root@ceph-node-00 ~]# aws --endpoint http://s3.cephlab.com:80 s3 cp /etc/hosts s3://firstbucketupload: ../etc/hosts to s3://firstbucket/hosts
如果我們從第二個 Ceph 叢集zone2進行檢查,我們可以看到所有元資料都已複製,並且我們在zone1中建立的所有使用者和儲存桶現在都存在於zone2中。
[!CAUTION]
注意:在此示例中,我們將使用radosgw-admin命令進行檢查,但我們也可以使用 S3 API 命令將 AWS 客戶端指向第二個區域內 RGW 的 IP/主機名。
[root@ceph-node-04 ~]# radosgw-admin user list["dashboard","user1","sysuser-multisite"][root@ceph-node-04 ~]# radosgw-admin bucket stats --bucket testbucket | jq .bucket"testbucket"
要檢查複製狀態,我們可以使用radosgw-admin sync status命令。例如:
[root@ceph-node-00~]# radosgw-admin sync statusrealmbeeea955-8341-41cc-a046-46de2d5ddeb9 (multisite)zonegroup2761ad42-fd71-4170-87c6-74c20dd1e334 (multizg)zone66df8c0a-c67d-4bd7-9975-bc02a549f13e (zone1)currenttime 2024-01-05T22:51:17Zzonegroupfeatures enabled: reshardingdisabled: compress-encryptedmetadatasync no sync (zone is master)datasync source: 7b9273a9-eb59-413d-a465-3029664c73d7 (zone2)syncingfullsync: 0/128 shardsincrementalsync: 128/128 shardsdatais caught up with source
總  結
回顧一下,在本系列的第二部分中,我們詳細講解了如何使用rgw管理器模組在兩個站點/區域之間部署Ceph物件儲存多站點複製。這只是一個開始,我們的目標是構建一個完整的部署,包括必要的負載均衡。
如有相關問題,請在文章後面給小編留言,小編安排作者第一時間和您聯絡,為您答疑解惑。
    推薦閱讀   

    推薦影片    

相關文章