Ceph物件閘道器,多區域閘道器

FuShudi發表於2024-06-01

目錄
  • Ceph物件閘道器,多區域閘道器
    • 1. 檔案系統與物件儲存的區別
      • 1.1 物件儲存使用場景
      • 1.2 物件儲存的介面標準
      • 1.3 桶(bucket)
    • 2. rgw
      • 2.1 物件儲存認證
      • 2.2 物件閘道器所涉概念
      • 2.3 可用區和ceph叢集的關係
    • 3. 部署物件閘道器
      • 3.1 建立realm
        • 3.1.1 列出所有的realm
        • 3.1.2 列出某個realm的詳細資訊
        • 3.1.3 刪除某個realm
      • 3.2 建立zonegroup
        • 3.2.1 修改zonegroup為主
        • 檢視zonegroup
      • 3.3 建立zone
        • 3.3.1 檢視儲存池
        • 3.3.2 更新配置
        • 3.3.3 驗證id是否變更
      • 3.4 建立rgw
        • 3.4.1 訪問埠
    • 4. 使用物件儲存
      • 4.1 使用者管理
        • 4.1.1 建立使用者
        • 4.1.2 給使用者生成key
        • 4.1.3 檢視使用者列表
        • 4.1.3 建立子使用者
        • 4.1.4 子使用者許可權
      • 4.2 bucket管理
      • 4.2.1 測試子使用者許可權
        • 4.2.2 列出桶
      • 4.3 資料操作
        • 4.3.1 上傳物件
        • 4.3.2 檢視容器內容
        • 4.3.3 使用s3協議
    • 5. 物件儲存多區域閘道器
    • 5.1 配置多區域閘道器 (原叢集操作)
      • 5.1.1 建立系統賬戶
        • 5.1.2 繫結使用者與zone
        • 5.1.3 宣告 realm,zonegroup,zone
        • 5.1.4 更新叢集period
        • 5.1.5 重啟rgw
      • 5.2 secondary 配置
      • 5.2.1 拉取realm
      • 5.2.2 同步period
      • 5.2.3 建立zone
      • 5.2.4 建立rgw閘道器
      • 5.2.5 將閘道器加入zone
      • 5.2.6 更新period
      • 5.2.7 重啟服務
      • 5.2.8 驗證同步

Ceph物件閘道器,多區域閘道器

ceph最基礎的元件是mon,mgr,osd,有了這3個元件之後ceph就可以提供塊儲存的能力,但是僅僅只有這一個能力,如果需要提供檔案系統儲存,那麼就需要部署mds

如果還需要提供物件儲存的話,那麼就需要部署rgw (rados gateway)對外提供物件儲存

1. 檔案系統與物件儲存的區別

檔案系統是允許使用者進行增刪改查這4個操作的,但是物件儲存只允許增,刪,查,並不允許修改,在ceph叢集中,物件儲存預設會將檔案切分成4M的大小,不足4M的按原大小

物件儲存的概念最早是由AWS提出,並且也搞了一個標準叫做s3(Simple Storage Service )

1.1 物件儲存使用場景

  • 圖片
  • 影片
  • 映象檔案
  • 大檔案,修改少(基本不修改)

1.2 物件儲存的介面標準

    1. s3(來源於AWS)
    1. swift(來源於OpenStack)

1.3 桶(bucket)

桶是物件儲存裡的一個邏輯概念,所有的物件都是存放在桶裡的,但是之前說過,ceph上所有的資料都屬存放在pg上,那他到底是存在桶裡還是存在pg裡?那pg是在桶上呢還是桶在pg上呢?

要搞清楚這個問題還得回到ceph,因為pg這個概念是存在於ceph上的,而如果我們底層的儲存系統不是用的ceph呢?是minio呢,他是不是也有pg呢?很顯然,答案是不對的,所以物件儲存不管你底層儲存是把資料往哪放,反正我,就只往桶裡放,至於你把我的桶放在哪,那是你的事,你自己安排就好

2. rgw

  • 負責接收http請求(s3,swift)
  • 實現桶的邏輯
  • 物件
    • 資料
    • 後設資料
    • 物件ID

rgw不屬於ceph的服務端元件,是屬於ceph的客戶端元件,這樣做是因為物件儲存是提供的http地址,然而ceph服務端是沒有提供http地址的,所以將rgw放在客戶端,當使用者請求http地址時,使用者此時並不需要安裝ceph客戶端,只需要發起http請求,客戶端此時再去請求服務端。

2.1 物件儲存認證

物件儲存認證是基於桶的認證,這個與cephx的認證是不一樣的

他需要使用者提供AK,SK。

也就是說現在某個使用者需要存放一個檔案到ceph的物件儲存裡面,他需要請求ceph客戶端,並於ceph客戶端rgw完成認證,此時ceph客戶端再去與ceph服務端完成cephx的認證

2.2 物件閘道器所涉概念

  • Realm 領域
    • 一個realm中可以有一個或多個區域,但是有且僅有一個 master zonegroup,同一個Realm下的同一個zonegroup下的多個zone之間的資料是自動同步的
  • Zonegroup 區域組
    • 一個zonegroup中有一個或多個zone,但是有且僅有一個master zone,同一個zonegroup下的多個zone會同步資料
  • zone 區域
    • 一個zone中有一個或多個rgw
  • rgw

2.3 可用區和ceph叢集的關係

  • 一個zone一定只屬於一個ceph叢集
  • 一個ceph叢集當中可以有多個zone

3. 部署物件閘道器

3.1 建立realm

[root@ceph01 ~]# radosgw-admin realm create --rgw-realm=for_swift
{
    "id": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "name": "for_swift",
    "current_period": "89a157fc-baf4-4f5f-a4c7-884dc87c0be0",
    "epoch": 1
}

現在建立了realm,有realm他後面肯定會有他的zonegroup,那麼這些資訊記錄在哪呢?肯定是配置檔案裡面啊,每一個realm會有自己的配置檔案來記錄他這裡面的zonegroup,zone,rgw。他的配置檔案就叫peri,而peri會有一個ID,而現在這個配置檔案裡面是沒有東西的,當後面建立了zonegroup之後這個配置檔案就需要更新,那麼這個ID也是會隨著更新的,那麼會更新就會有一個東西來記錄他的版本,也就是更新了多少次

這裡顯示的current_period 就是他配置檔案的ID

epoch就是配置檔案的版本

3.1.1 列出所有的realm

[root@ceph01 ~]# radosgw-admin realm list
{
    "default_info": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "realms": [
        "for_swift"
    ]
}

3.1.2 列出某個realm的詳細資訊

[root@ceph01 ~]# radosgw-admin realm get --rgw-realm for_swift
{
    "id": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "name": "for_swift",
    "current_period": "89a157fc-baf4-4f5f-a4c7-884dc87c0be0",
    "epoch": 1
}

3.1.3 刪除某個realm

# 先建立一個
[root@ceph01 ~]# radosgw-admin realm create --rgw-realm test
{
    "id": "3d366d9c-b948-4d4d-8e15-d19a72579d77",
    "name": "test",
    "current_period": "d38a8be8-0d85-4244-8879-9e222761defb",
    "epoch": 1
}
# 刪掉他
[root@ceph01 ~]# radosgw-admin realm delete --rgw-realm test

3.2 建立zonegroup

[root@ceph01 ~]# radosgw-admin zonegroup create --rgw-realm for_swift --rgw-zonegroup for_swift 
{
    "id": "2b382a98-0c66-4ec3-b7d5-8cdbf1f6b93c",
    "name": "for_swift",
    "api_name": "for_swift",
    "is_master": "false",
    "endpoints": [],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "sync_policy": {
        "groups": []
    }
}

3.2.1 修改zonegroup為主

[root@ceph01 ~]# radosgw-admin zonegroup modify --rgw-realm for_swift --rgw-zonegroup for_swift --default --master
{
    "id": "2b382a98-0c66-4ec3-b7d5-8cdbf1f6b93c",
    "name": "for_swift",
    "api_name": "for_swift",
    "is_master": "true",
    "endpoints": [],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "sync_policy": {
        "groups": []
    }
}

現在他的is-master就是true

檢視zonegroup

[root@ceph01 ~]# radosgw-admin zonegroup get --rgw-realm for_swift --rgw-zonegroup for_swift
{
    "id": "2b382a98-0c66-4ec3-b7d5-8cdbf1f6b93c",
    "name": "for_swift",
    "api_name": "for_swift",
    "is_master": "true",
    "endpoints": [],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "sync_policy": {
        "groups": []
    }
}

3.3 建立zone

[root@ceph01 ~]# radosgw-admin zone create --rgw-realm for_swift --rgw-zonegroup for_swift --rgw-zone for_swift --master --default
{
    "id": "5ee18ff4-9b1d-41fd-83bb-3f363634fb1f",
    "name": "for_swift",
    "domain_root": "for_swift.rgw.meta:root",
    "control_pool": "for_swift.rgw.control",
    "gc_pool": "for_swift.rgw.log:gc",
    "lc_pool": "for_swift.rgw.log:lc",
    "log_pool": "for_swift.rgw.log",
    "intent_log_pool": "for_swift.rgw.log:intent",
    "usage_log_pool": "for_swift.rgw.log:usage",
    "roles_pool": "for_swift.rgw.meta:roles",
    "reshard_pool": "for_swift.rgw.log:reshard",
    "user_keys_pool": "for_swift.rgw.meta:users.keys",
    "user_email_pool": "for_swift.rgw.meta:users.email",
    "user_swift_pool": "for_swift.rgw.meta:users.swift",
    "user_uid_pool": "for_swift.rgw.meta:users.uid",
    "otp_pool": "for_swift.rgw.otp",
    "system_key": {
        "access_key": "",
        "secret_key": ""
    },
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "for_swift.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "for_swift.rgw.buckets.data"
                    }
                },
                "data_extra_pool": "for_swift.rgw.buckets.non-ec",
                "index_type": 0
            }
        }
    ],
    "realm_id": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "notif_pool": "for_swift.rgw.log:notif"
}

可以看到他自己建立了很多儲存池

3.3.1 檢視儲存池

[root@ceph01 ~]# ceph osd pool ls
device_health_metrics
test_pool
test02
rbd
mv_rbd
cephfs_data
cephfs_metadata
.rgw.root
default.rgw.log
default.rgw.control
default.rgw.meta

3.3.2 更新配置

[root@ceph01 ~]# radosgw-admin period update --commit --rgw-realm for_swift

如果你的realm是預設的那麼就可以不加上 --rgw-realm,不是預設的就需要指定

3.3.3 驗證id是否變更

[root@ceph01 ~]# radosgw-admin realm get 
{
    "id": "286f9296-569d-45e0-b690-4069e3f0d6bc",
    "name": "for_swift",
    "current_period": "ace39846-04f4-46ba-8601-52f98aafeb1a",
    "epoch": 2
}

3.4 建立rgw

[root@ceph01 ~]# ceph orch apply rgw for_swift --placement="1"
Scheduled rgw.for_swift update...

--placement="1" 指的是部署幾個rgw

預設監聽在80埠,如果想修改埠在建立的時候加上 --port

3.4.1 訪問埠

[root@ceph01 ~]# curl 10.104.45.241
<?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>

可以有正常的返回值

4. 使用物件儲存

4.1 使用者管理

4.1.1 建立使用者

[root@ceph01 ~]# radosgw-admin user create --uid=testuser  --display-name=testuser
省略其他輸出
    "keys": [
        {
            "user": "testuser",
            "access_key": "ZAKFA4A9WRJYI4J059NK",
            "secret_key": "6TIZZpCMJVd5fcJcblBwgD7RepMk0gkglLONIBLj"
        }
    ],

建立使用者的時候會返回AK SK,但是AK SK 是s3標準的,如果使用swift的話這個是用不了的,因為這個使用者就是s3使用者

如果想要使用swift則還需要建立子使用者

4.1.2 給使用者生成key

[root@ceph01 ~]# radosgw-admin key create --uid=testuser --key-type s3 --gen-access-key --gen-secret 
{
    "user_id": "testuser",
    "display_name": "testuser",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "testuser",
            "access_key": "2EQ7K1XY4GU19C6IK694",
            "secret_key": "nWoV1B4DZ40bh5CI6BxqkzgAbH3WhFDCHGLEHq6G"
        },
        {
            "user": "testuser",
            "access_key": "ZAKFA4A9WRJYI4J059NK",
            "secret_key": "6TIZZpCMJVd5fcJcblBwgD7RepMk0gkglLONIBLj"
        }
    ],

這個時候這個使用者就有2個key了

4.1.3 檢視使用者列表

[root@ceph01 ~]# radosgw-admin user list
[
    "dashboard",
    "testuser"
]

使用user list也是可以檢視到使用者的

4.1.3 建立子使用者

[root@ceph01 ~]# radosgw-admin subuser create --uid=testuser --subuser testuser:swift
{
    "user_id": "testuser",
    "display_name": "testuser",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "<none>"
        }
    ],
    "keys": [
        {
            "user": "testuser",
            "access_key": "2EQ7K1XY4GU19C6IK694",
            "secret_key": "nWoV1B4DZ40bh5CI6BxqkzgAbH3WhFDCHGLEHq6G"
        },
        {
            "user": "testuser",
            "access_key": "ZAKFA4A9WRJYI4J059NK",
            "secret_key": "6TIZZpCMJVd5fcJcblBwgD7RepMk0gkglLONIBLj"
        }
    ],
    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "gkstooSlkc7Ylf5Czrvzo8TxrgUY3egOW1lKBvSg"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

因為建立的是子使用者,所以需要指定主使用者 --uid

再去指定子使用者的型別 --subuser 主使用者:子使用者名稱

現在他的swift—key裡面就有資料了

4.1.4 子使用者許可權

[root@ceph01 ~]# radosgw-admin subuser modify --uid testuser --subuser testuser:swift --access full
{
    "user_id": "testuser",
    "display_name": "testuser",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "testuser",
            "access_key": "2EQ7K1XY4GU19C6IK694",
            "secret_key": "nWoV1B4DZ40bh5CI6BxqkzgAbH3WhFDCHGLEHq6G"
        },
        {
            "user": "testuser",
            "access_key": "ZAKFA4A9WRJYI4J059NK",
            "secret_key": "6TIZZpCMJVd5fcJcblBwgD7RepMk0gkglLONIBLj"
        }
    ],
    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "gkstooSlkc7Ylf5Czrvzo8TxrgUY3egOW1lKBvSg"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

預設建立出來時候是沒有許可權的,所以需要給他對bucket的許可權

4.2 bucket管理

buket建立必須使用rgw客戶端來建立,所以必須建立客戶端

[root@ceph01 ~]# yum install python3-pip -y
[root@ceph01 ~]# pip install python-swiftclient -i https://pypi.tuna.tsinghua.edu.cn/simple

4.2.1 測試子使用者許可權

[root@ceph01 ~]# swift -A http://10.104.45.241/auth/1.0 -U 'testuser:swift' -K gkstooSlkc7Ylf5Czrvzo8TxrgUY3egOW1lKBvSg  stat -v --insecure
                                 StorageURL: http://10.104.45.241/swift/v1
                                 Auth Token: AUTH_rgwtk0e00000074657374757365723a73776966746f562e87af90cca359615566a440ca284b82d38246a602414f5ea2aae59df914a4751ba2
                                    Account: v1
                                 Containers: 0
                                    Objects: 0
                                      Bytes: 0
Objects in policy "default-placement-bytes": 0
  Bytes in policy "default-placement-bytes": 0
   Containers in policy "default-placement": 0
      Objects in policy "default-placement": 0
        Bytes in policy "default-placement": 0
                                X-Timestamp: 1716785113.68986
                X-Account-Bytes-Used-Actual: 0
                                 X-Trans-Id: tx00000fd31d0a72e2fdcc4-0066540fd9-1005d-for_swift
                     X-Openstack-Request-Id: tx00000fd31d0a72e2fdcc4-0066540fd9-1005d-for_swift
                              Accept-Ranges: bytes
                               Content-Type: text/plain; charset=utf-8
                                 Connection: Keep-Alive

4.2.2 列出桶

# 在客戶端
[root@ceph01 ~]# swift -A http://10.104.45.241/auth/1.0 -U 'testuser:swift' -K gkstooSlkc7Ylf5Czrvzo8TxrgUY3egOW1lKBvSg  list
hosts
# 在服務端
[root@ceph01 ~]# radosgw-admin bucket list
[
    "hosts"
]

4.3 資料操作

4.3.1 上傳物件

將/etc/hosts 上傳到桶,其實在swift裡面是叫做容器,不過只是名字不同

[root@ceph01 ~]# swift -A http://10.104.45.241/auth/1.0 -U 'testuser:swift' -K gkstooSlkc7Ylf5Czrvzo8TxrgUY3egOW1lKBvSg  upload hosts /etc/hosts
etc/hosts

4.3.2 檢視容器內容

[root@ceph01 ~]# swift -A http://10.104.45.241/auth/1.0 -U 'testuser:swift' -K gkstooSlkc7Ylf5Czrvzo8TxrgUY3egOW1lKBvSg  list hosts -v
etc/hosts

4.3.3 使用s3協議

這個非常的簡單,下載一個s3客戶端,s3 browser 直接連線

5. 物件儲存多區域閘道器

多區域就是如果還有另一個ceph叢集,想要跟目前的ceph叢集裡的zone資料保持同步,那麼另一個ceph叢集也需要有realm、onegroup,需要2個ceph叢集內名稱保持一致,zone裡面又會有rgw,你有你的rgw,我有我的rgw,資料就是透過這兩個rgw來同步的,無論是從ceph1叢集還是從ceph2叢集來運算元據,這2個叢集內的資料都會發生對應的改變,這就是多區域閘道器。

應用場景:異地容災

大致流程

ceph02叢集需要與ceph01叢集同步資訊,那麼ceph02需要先同步ceph01的realm和zonegroup,然後自行建立zone就可以了,建立完zone之後還需要在zone裡面建立閘道器(rgw),當這兩個建立完成之後,2個叢集的資料會開始同步,第一次是完全同步,後續則是增量同步

5.1 配置多區域閘道器 (原叢集操作)

主zone端的配置:

  1. 新增一個系統使用者
  2. 修改主zone,將系統使用者和zone繫結
  3. 修改rgw的配置,明確其realm,zonegroup,zone
  4. 更新period
  5. 重啟rgw服務/程序

5.1.1 建立系統賬戶

需要建立使用者的原因是為了安全,不然的話別人只要知道叢集的IP就能夠同步的話資料就會洩露,所以需要認證,並且使用者還必須是系統使用者

[root@ceph01 ~]# radosgw-admin user create --uid=system-user --display-name=system-user --system
   會顯示AK SK

5.1.2 繫結使用者與zone

[root@ceph01 ~]# radosgw-admin zone modify --rgw-realm s3_realm --rgw-zonegroup s3_zonegroup --rgw-zone s3_zone --master --default --access-key GR135X3HXX6PQQRXI8QW --secret 7Z9SMnsaL92j7HDyEcihtTsPBPVzqYglek4m6Qk3 --endpoints "http://10.104.45.240,http://10.104.45.241,http://10.104.45.243"

只看這部分資訊
    "system_key": {
        "access_key": "GR135X3HXX6PQQRXI8QW",
        "secret_key": "7Z9SMnsaL92j7HDyEcihtTsPBPVzqYglek4m6Qk3"
    },
  • endpoints:指定rgw的地址,有幾個寫幾個,逗號分隔
  • access-key:輸入剛剛建立系統使用者的AK
  • secret:輸入剛剛建立系統使用者的SK

5.1.3 宣告 realm,zonegroup,zone

有幾個rgw就需要操作幾次,我這裡是3個

[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph01.msvmsr  rgw_realm s3_realm
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph01.msvmsr  rgw_zonegroup s3_zonegroup
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph01.msvmsr  rgw_zone s3_zone
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph02.vqvztu rgw_realm s3_realm
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph02.vqvztu rgw_zonegroup s3_zonegroup
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph02.vqvztu rgw_zone s3_zone
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph03.cexvyj rgw_realm s3_realm
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph03.cexvyj rgw_zonegroup s3_zonegroup
[root@ceph01 ~]# ceph config set client.rgw.s3_realm.ceph03.cexvyj rgw_zone s3_zone

5.1.4 更新叢集period

[root@ceph01 ~]# radosgw-admin period update --commit

5.1.5 重啟rgw

# 重啟之前檢視一下 ceph orch ls
[root@ceph01 ~]# ceph orch restart rgw.s3_realm
Scheduled to restart rgw.s3_realm.ceph01.msvmsr on host 'ceph01'
Scheduled to restart rgw.s3_realm.ceph02.vqvztu on host 'ceph02'
Scheduled to restart rgw.s3_realm.ceph03.cexvyj on host 'ceph03'

5.2 secondary 配置

secondary zone的配置

  1. 拉取realm資訊
  2. 拉取最新的period資訊建立自己的zone
  3. 建立rgw
  4. 將rgw加入secondary zone
  5. 更新period
  6. 重啟rgw服務/程序
  7. 檢測是否有資料同步

5.2.1 拉取realm

[root@m-rgw ~]# radosgw-admin realm pull --url http://10.104.45.240 --access-key GR135X3HXX6PQQRXI8QW --secret 7Z9SMnsaL92j7HDyEcihtTsPBPVzqYglek4m6Qk3
2024-06-01T14:51:02.345+0800 7f449d3fa2c0  1 error read_lastest_epoch .rgw.root:periods.699f662a-c436-4179-8f7e-8a6d40b188f3.latest_epoch
2024-06-01T14:51:02.359+0800 7f449d3fa2c0  1 Set the period's master zonegroup 09b8465b-a516-4464-b01d-9d8f8b6a1629 as the default
{
    "id": "09c4ff84-8900-48a5-99ea-5a403754ca4f",
    "name": "s3_realm",
    "current_period": "699f662a-c436-4179-8f7e-8a6d40b188f3",
    "epoch": 2
}
# 拉取完成之後在本地可以使用 radosgw-admin realm list 去檢視

5.2.2 同步period

[root@m-rgw ~]# radosgw-admin period pull --url http://10.104.45.240 --access-key GR135X3HXX6PQQRXI8QW --secret 7Z9SMnsaL92j7HDyEcihtTsPBPVzqYglek4m6Qk3

5.2.3 建立zone

[root@m-rgw ~]# radosgw-admin zone create --rgw-realm s3_realm --rgw-zonegroup s3_zonegroup --rgw-zone s3_zone_backup --access-key GR135X3HXX6PQQRXI8QW --secret 7Z9SMnsaL92j7HDyEcihtTsPBPVzqYglek4m6Qk3  --endpoints "http://10.104.45.244"
  1. zone的名稱就不能再與之前的一致了
  2. endpoints是指定本地的閘道器地址

5.2.4 建立rgw閘道器

[root@m-rgw ~]# ceph orch apply rgw s3_backup --placement=1
Scheduled rgw.s3_backup update...

5.2.5 將閘道器加入zone

[root@m-rgw ~]# ceph config set client.rgw.s3_backup.m-rgw.ftwpgm rgw_realm s3_realm
[root@m-rgw ~]# ceph config set client.rgw.s3_backup.m-rgw.ftwpgm rgw_zonegroup s3_zonegroup
[root@m-rgw ~]# ceph config set client.rgw.s3_backup.m-rgw.ftwpgm rgw_zone s3_zone_bakcup
  1. 這裡的zone是本地的zone

5.2.6 更新period

[root@m-rgw ~]# radosgw-admin period update --commit 
  1. 這一步操作得等一會

5.2.7 重啟服務

[root@m-rgw ~]# ceph orch restart rgw.s3_backup

5.2.8 驗證同步

# 直接檢視使用者,bucket是否同步
[root@m-rgw ~]# radosgw-admin user list
[
    "system-user",
    "dashboard",
    "s3"
]
[root@m-rgw ~]# radosgw-admin bucket list
[
    "media"
]

可以看到s3使用者已經同步過來了,bucket也有了

也可以直接使用命令檢視同步狀態

[root@m-rgw ~]# radosgw-admin sync status
[root@m-rgw ~]# radosgw-admin sync status
          realm 09c4ff84-8900-48a5-99ea-5a403754ca4f (s3_realm)
      zonegroup 09b8465b-a516-4464-b01d-9d8f8b6a1629 (s3_zonegroup)
           zone abee3a3c-4789-4669-82e5-7219785cd76a (s3_zone_backup)
  metadata sync syncing
                full sync: 0/64 shards
                incremental sync: 64/64 shards
                metadata is caught up with master
      data sync source: ab90bfa5-4dec-4136-b804-939c80e15d5b (s3_zone)
                        syncing
                        full sync: 8/128 shards
                        full sync: 8 buckets to sync
                        incremental sync: 120/128 shards
                        data is behind on 8 shards
                        behind shards: [82,83,84,85,87,88,90,92]

相關文章