Triển khai và quản lý Ceph Rados Gateway (RGW)

Giới thiệu về Ceph Rados Gateway (RGW)

Ceph Rados Gateway (RGW) cung cấp khả năng truy cập dữ liệu dưới dạng đối tượng thông qua các giao thức tương thích với S3 và Swift. Nó hoạt động như một lớp dịch vụ HTTP, cho phép các ứng dụng tương tác với Ceph cluster mà không cần cài đặt các client Ceph chuyên dụng.

Phân biệt Hệ thống tệp và Lưu trữ đối tượng

  • Hệ thống tệp: Cấu trúc phân cấp, yêu cầu máy chủ metadata (MDS) để quản lý siêu dữ liệu và cho phép các thao tác như sửa đổi dữ liệu trực tiếp. Hiệu suất và khả năng mở rộng có thể bị giới hạn bởi MDS.
  • Lưu trữ đối tượng: Cấu trúc phẳng, lưu trữ dữ liệu dưới dạng các đối tượng độc lập với siêu dữ liệu và một định danh duy nhất. Không hỗ trợ sửa đổi trực tiếp đối tượng (yêu cầu tải lên phiên bản mới). Có khả năng mở rộng cao bằng cách phân tán dữ liệu trên nhiều máy chủ và sử dụng chỉ mục khóa-giá trị phân tán.

Trường hợp sử dụng và Giao diện chuẩn của Lưu trữ đối tượng

  • Lưu trữ hình ảnh, video, tệp ISO, các tệp lớn ít thay đổi.
  • Các tiêu chuẩn giao diện phổ biến bao gồm:
    • S3: Tiêu chuẩn công nghiệp do AWS đề xuất.
    • Swift: Tiêu chuẩn do OpenStack đề xuất.

Khái niệm về Bucket

Bucket là một khái niệm logic trong lưu trữ đối tượng, đóng vai trò là nơi chứa các đối tượng. Dữ liệu thực tế trên Ceph được lưu trữ trong các Placement Groups (PGs), trong khi Bucket là một abstraction ở tầng RGW.

Ceph Rados Gateway (RGW)

RGW chịu trách nhiệm:

  • Tiếp nhận các yêu cầu HTTP.
  • Triển khai logic cho các hoạt động của Bucket (tạo, xóa, v.v.).
  • Xác thực người dùng và Bucket bằng Access Key (AK) và Secret Key (SK).

RGW thường được triển khai như một thành phần client, vì nó cung cấp giao diện HTTP mà không yêu cầu người dùng cài đặt client Ceph đầy đủ.

Xác thực Lưu trữ Đối tượng

Quá trình xác thực dựa trên AK/SK, khác với xác thực CephX. Người dùng cần xác thực với RGW bằng cặp AK/SK của họ. Sau đó, RGW thực hiện xác thực với Ceph cluster bằng CephX.

Các khái niệm liên quan đến RGW

  • Realm: Một đơn vị quản lý cấp cao, có thể chứa nhiều Zone Group.
  • Zonegroup: Một nhóm các Zone. Chỉ có một Zone chính (master zone) trong một Zonegroup. Các Zone trong cùng một Zonegroup có thể đồng bộ dữ liệu tự động.
  • Zone: Đơn vị dữ liệu nhỏ nhất, có các pool lưu trữ riêng cho dữ liệu và siêu dữ liệu. Một Zone có thể có nhiều RGW instance để cung cấp các điểm truy cập.
  • RGW: Cửa sổ cung cấp dịch vụ ra bên ngoài.

Mối quan hệ giữa Zone và Ceph Cluster

  • Một Zone luôn thuộc về một Ceph cluster duy nhất.
  • Một Ceph cluster có thể chứa nhiều Zone.

Triển khai Rados Gateway

Quy trình triển khai bao gồm các bước sau:

  1. Tạo Realm, Zonegroup, và Zone trên Ceph cluster. Các thao tác này sẽ tạo ra các Ceph pool cần thiết.
  2. Cập nhật cấu hình Realm.
  3. Triển khai RGW instance.
  4. Kiểm tra truy cập và sử dụng dịch vụ lưu trữ đối tượng.
  5. Tạo người dùng (loại S3 hoặc Swift).
  6. Tạo Bucket sử dụng client RGW (ví dụ: swift client hoặc các công cụ S3).

Cấu trúc phân cấp quản lý RGW:

Realm (Miền)
    Zonegroup (Nhóm Khu vực)
        Zone (Khu vực)
            RGW (Instance)
    

1. Tạo Realm


[root@ceph01 ~]# radosgw-admin realm create --rgw-realm=myrealm
{
    "id": "a651323c-4c81-4dc3-bd9d-d4ef9e4e29c4",
    "name": "myrealm",
    "current_period": "e96be4aa-b502-4407-a0a5-c6e9bb737d38",
    "epoch": 1
}

    

Lệnh radosgw-admin realm create tạo một Realm mới. Các thông tin cấu hình được lưu trữ trong các tệp cấu hình của Ceph.

Liệt kê tất cả Realms


[root@ceph01 ~]# radosgw-admin realm list
{
    "default_info": "a651323c-4c81-4dc3-bd9d-d4ef9e4e29c4",
    "realms": [
        "myrealm"
    ]
}

    

Lấy thông tin chi tiết Realm


[root@ceph01 ~]# radosgw-admin realm get --rgw-realm myrealm
{
    "id": "a651323c-4c81-4dc3-bd9d-d4ef9e4e29c4",
    "name": "myrealm",
    "current_period": "e96be4aa-b502-4407-a0a5-c6e9bb737d38",
    "epoch": 1
}

    

Xóa Realm


# Tạo một realm tạm thời
[root@ceph01 ~]# radosgw-admin realm create --rgw-realm testrealm
# Xóa realm
[root@ceph01 ~]# radosgw-admin realm delete --rgw-realm testrealm

    

2. Tạo Zonegroup


[root@ceph01 ~]# radosgw-admin zonegroup create --rgw-realm myrealm --rgw-zonegroup myzonegroup
{
    "id": "67001b3c-cc81-4051-a449-f4bea5238226",
    "name": "myzonegroup",
    "api_name": "myzonegroup",
    "is_master": "false",
    "realm_id": "a651323c-4c81-4dc3-bd9d-d4ef9e4e29c4",
    ...
}

    

Thiết lập Zonegroup thành Master


[root@ceph01 ~]# radosgw-admin zonegroup modify --rgw-realm myrealm --rgw-zonegroup myzonegroup --master --default
{
    "is_master": "true",
    ...
}

    

Liệt kê tất cả Zonegroups


[root@ceph01 ~]# radosgw-admin zonegroup list
{
    "default_info": "67001b3c-cc81-4051-a449-f4bea5238226",
    "zonegroups": [
        "myzonegroup"
    ]
}

    

3. Tạo Zone

Việc tạo Zone sẽ tạo ra nhiều Ceph pool cần thiết cho RGW.


[root@ceph01 ~]# radosgw-admin zone create --rgw-realm myrealm --rgw-zonegroup myzonegroup --rgw-zone myzone --master --default
{
    "id": "e5e86566-9261-4b07-b830-9cb622a8a8de",
    "name": "myzone",
    "domain_root": "myzone.rgw.meta:root",
    "control_pool": "myzone.rgw.control",
    "log_pool": "myzone.rgw.log",
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "myzone.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "myzone.rgw.buckets.data"
                    }
                },
                ...
            }
        }
    ],
    "realm_id": "a651323c-4c81-4dc3-bd9d-d4ef9e4e29c4",
    ...
}

    

Kiểm tra Ceph Pools


[root@ceph01 ~]# ceph osd pool ls
device_health_metrics
.rgw.root
myzone.rgw.log
myzone.rgw.control
myzone.rgw.meta
...

    

Cập nhật cấu hình Period

Sau khi thay đổi cấu hình Realm, Zonegroup, hoặc Zone, cần cập nhật Period.


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

    

Kiểm tra Epoch và Current Period ID để xác nhận cập nhật.

4. Tạo RGW Instance

Sử dụng Ceph orchestrator để triển khai RGW.


# Triển khai một RGW instance cho zone 'myzone'
[root@ceph01 ~]# ceph orch apply rgw myzone --placement="1" --port=8080

    

Lệnh này sẽ triển khai RGW trên một node và lắng nghe trên cổng 8080. Các RGW instance mặc định sẽ lắng nghe trên cổng 80 nếu không chỉ định.

Kiểm tra RGW Service


[root@ceph01 ~]# ceph orch ps | grep rgw
rgw.myzone.ceph02.abcdef  ceph02  *:8080         running (3m)      3m ago   3m    46.0M        -  16.2.13  e08a45948779  d44f256e2b5c

    

Truy cập RGW thông qua địa chỉ IP của node triển khai RGW.


[root@ceph01 ~]# curl http://ceph02_ip:8080
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>

    

Sử dụng Lưu trữ Đối tượng

1. Quản lý Người dùng

Tạo người dùng S3

Tạo người dùng với AK/SK để truy cập bằng giao thức S3.


[root@ceph01 ~]# radosgw-admin user create --uid=testuser --display-name="Test User"
{
    "user_id": "testuser",
    "display_name": "Test User",
    "keys": [
        {
            "user": "testuser",
            "access_key": "AKIAIOSF4QH0XM48Z85A",
            "secret_key": "wuDTrMubY1jU510z732FwL2yZ4lP2U2z8f9fTfJb"
        }
    ],
    ...
}

    

Tạo thêm Key cho Người dùng


[root@ceph01 ~]# radosgw-admin key create --uid=testuser --key-type s3 --gen-access-key --gen-secret

    

Liệt kê Danh sách Người dùng


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

    

Tạo Subuser cho Swift

Để sử dụng giao thức Swift, cần tạo một subuser.


# Tạo subuser 'swift' cho người dùng 'testuser'
[root@ceph01 ~]# radosgw-admin subuser create --uid=testuser --subuser testuser:swift --access full
{
    "user_id": "testuser",
    "display_name": "Test User",
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "full-control"
        }
    ],
    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "SWTKEY12345..."
        }
    ],
    ...
}

    

Cấp quyền cho Subuser

Có thể sửa đổi quyền của subuser.


[root@ceph01 ~]# radosgw-admin subuser modify --uid=testuser --subuser testuser:swift --access read

    

2. Quản lý Bucket

Việc tạo Bucket yêu cầu sử dụng các client tương thích S3 hoặc Swift.

Cài đặt Swift Client


[root@ceph01 ~]# yum -y install python3-pip
[root@ceph01 ~]# pip install python-swiftclient

    

Kiểm tra kết nối và trạng thái tài khoản Swift


[root@ceph01 ~]# swift -A http://rgw_ip:8080/auth/1.0 -U 'testuser:swift' -K 'SWTKEY12345...' stat -v --insecure
                                 StorageURL: http://rgw_ip:8080/swift/v1
                                    Account: v1
                                 Containers: 0
                                    Objects: 0
                                      Bytes: 0
...

    

Liệt kê Bucket


[root@ceph01 ~]# swift -A http://rgw_ip:8080/auth/1.0 -U 'testuser:swift' -K 'SWTKEY12345...' list

    

Tạo Bucket


# Tạo một bucket tên là 'mybucket'
[root@ceph01 ~]# swift -A http://rgw_ip:8080/auth/1.0 -U 'testuser:swift' -K 'SWTKEY12345...' post mybucket

    

3. Thao tác Dữ liệu

Tải lên Đối tượng


# Tải tệp 'myfile.txt' vào bucket 'mybucket'
[root@ceph01 ~]# swift -A http://rgw_ip:8080/auth/1.0 -U 'testuser:swift' -K 'SWTKEY12345...' upload mybucket /path/to/myfile.txt

    

Xem nội dung Bucket


[root@ceph01 ~]# swift -A http://rgw_ip:8080/auth/1.0 -U 'testuser:swift' -K 'SWTKEY12345...' list mybucket
myfile.txt

    

Sử dụng Giao thức S3

Sử dụng các client S3 như S3 Browser để kết nối và quản lý đối tượng.

Cấu hình Multi-Zone Gateway

Cho phép đồng bộ dữ liệu giữa các RGW instance trên các Ceph cluster khác nhau, phục vụ cho mục đích khắc phục thảm họa hoặc phân tán địa lý.

1. Cấu hình Cluster Chính (Master)

Tạo User Hệ thống

User hệ thống được sử dụng để xác thực giữa các cluster khi đồng bộ dữ liệu.


[root@ceph01 ~]# radosgw-admin user create --uid=system-user --display-name system-user --system

    

Liên kết User và Zone

Cấu hình Zone chính để sử dụng user hệ thống cho các hoạt động đồng bộ.


[root@ceph01 ~]# radosgw-admin zone modify --rgw-realm myrealm --rgw-zonegroup myzonegroup --rgw-zone myzone --master --default --access-key "SYSTEM_AK" --secret "SYSTEM_SK" --endpoints "http://master_rgw_ip:8080"

    

Cập nhật Period và Khởi động lại RGW


[root@ceph01 ~]# radosgw-admin period update --commit
[root@ceph01 ~]# ceph orch restart rgw.myzone

    

2. Cấu hình Cluster Phụ (Secondary)

Kéo Realm và Period

Lấy thông tin cấu hình Realm và Period từ cluster chính.


[root@ceph02 ~]# radosgw-admin realm pull --url http://master_rgw_ip:8080 --access-key SYSTEM_AK --secret SYSTEM_SK
[root@ceph02 ~]# radosgw-admin period pull --url http://master_rgw_ip:8080 --access-key SYSTEM_AK --secret SYSTEM_SK

    

Tạo Zone Mới

Tạo một Zone mới trên cluster phụ.


[root@ceph02 ~]# radosgw-admin zone create --rgw-realm myrealm --rgw-zonegroup myzonegroup --rgw-zone myzone_backup --access-key SYSTEM_AK --secret SYSTEM_SK --endpoints "http://secondary_rgw_ip:8080"

    

Triển khai RGW và Liên kết Zone


# Triển khai RGW trên cluster phụ
[root@ceph02 ~]# ceph orch apply rgw myzone_backup --placement="1" --realm=myrealm --zonegroup=myzonegroup --zone=myzone_backup

# Cấu hình RGW để sử dụng Zone mới
[root@ceph02 ~]# ceph config set client.rgw.myzone_backup rgw_realm myrealm
[root@ceph02 ~]# ceph config set client.rgw.myzone_backup rgw_zonegroup myzonegroup
[root@ceph02 ~]# ceph config set client.rgw.myzone_backup rgw_zone myzone_backup

# Cập nhật Period và Khởi động lại RGW
[root@ceph02 ~]# radosgw-admin period update --commit
[root@ceph02 ~]# ceph orch restart rgw.myzone_backup

    

Kiểm tra Đồng bộ

Kiểm tra xem người dùng, bucket và dữ liệu có được đồng bộ giữa hai cluster hay không.


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

[root@ceph02 ~]# radosgw-admin bucket list
[
    "mybucket"
]

[root@ceph02 ~]# radosgw-admin sync status
          realm ... (myrealm)
      zonegroup ... (myzonegroup)
           zone ... (myzone_backup)
  metadata sync syncing
  data sync source: ... (myzone)
                    syncing
```
    

Xem và Quản lý Cấu hình RGW

1. Xem Cấu hình RGW

Kiểm tra cấu hình RGW trên các node Ceph.


# Trên cluster chính
[root@ceph01 ~]# ceph config dump | grep rgw.myzone

# Trên cluster phụ
[root@ceph02 ~]# ceph config dump | grep rgw.myzone_backup

    

2. Liên kết RGW vào Zone

Khi triển khai RGW, có thể chỉ định trực tiếp Realm, Zonegroup và Zone.


ceph orch apply rgw myzone_backup \
    --realm=myrealm \
    --zonegroup=myzonegroup \
    --zone=myzone_backup \
    --placement="1"

    

Hoặc cấu hình sau khi triển khai bằng lệnh ceph config set.

Thẻ: ceph rgw rados gateway object storage s3

Đăng vào ngày 1 tháng 8 lúc 11:32