1. Tổng quan.
Object Gateway trong Ceph là một phần mềm dùng để triển khai dịch vụ lưu trữ đối tượng (object storage) dựa trên giao thức S3 và Swift. Nó cung cấp khả năng lưu trữ và truy xuất các đối tượng lớn, như hình ảnh, video, tệp tin, dữ liệu không cấu trúc và dữ liệu trực tuyến.
Khi sử dụng Object Gateway trong Ceph, bạn có thể:
- Lưu trữ đối tượng lớn: Object Gateway cho phép lưu trữ các đối tượng có kích thước lớn, vượt qua giới hạn kích thước tệp của hệ thống tập tin truyền thống.
- Mở rộng linh hoạt: Object Gateway được thiết kế để có thể mở rộng ngang (scale horizontally), cho phép bạn mở rộng khả năng lưu trữ và xử lý bằng cách thêm nhiều nút (node) vào hệ thống.
- Đảm bảo tính toàn vẹn và độ tin cậy: Object Gateway sử dụng Ceph RADOS để lưu trữ dữ liệu, đảm bảo tính toàn vẹn và độ tin cậy cao thông qua việc sao lưu và phân tán dữ liệu trên nhiều OSD.
- Hỗ trợ giao thức S3 và Swift: Object Gateway hỗ trợ cả giao thức S3 (Amazon Simple Storage Service) và giao thức Swift (OpenStack Swift). Điều này cho phép bạn sử dụng các công cụ và ứng dụng hiện có tương thích với giao thức này để tương tác với Object Gateway.
Khi nào sử dụng Object Gateway:
- Khi bạn cần triển khai một dịch vụ lưu trữ đối tượng linh hoạt, mở rộng và có khả năng chịu lỗi.
- Khi bạn cần lưu trữ các đối tượng lớn, như dữ liệu đa phương tiện (hình ảnh, video) hoặc dữ liệu không cấu trúc.
- Khi bạn muốn sử dụng giao thức S3 hoặc Swift để tương tác với dịch vụ lưu trữ đối tượng.
- Khi bạn muốn tích hợp dịch vụ lưu trữ đối tượng vào hệ thống Ceph hiện có, để tận dụng khả năng phân tán và tính toàn vẹn dữ liệu của Ceph.
2. Thực hành.
Dưới đây là quy trình triển khai Object Gateway trong Ceph.
Cài đặt gói radosgw
để cài đặt Ceph rados gateway.
apt -y install radosgw
Kiếm tra lại version của radosgw.
$ radosgw-admin --version
ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)
Copy file cấu hình ceph.conf và file keyring sang radosgw.
scp /etc/ceph/ceph.conf radosgw.hoanghd.com:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring radosgw.hoanghd.com:/etc/ceph/
Phần này hêm cấu hình cho RGW (Ceph rados gateway) vào tệp /etc/ceph/ceph.conf
. Cấu hình bao gồm thông tin về máy chủ (host
), cổng (port
), frontend (rgw_frontends
) và tên DNS (rgw_dns_name
).
Trong cấu hình RADOS Gateway của Ceph, rgw_frontends
là một tùy chọn để xác định giao diện mạng mà RADOS Gateway sử dụng để lắng nghe các yêu cầu HTTP. Trong trường hợp này, giá trị civetweb
được cung cấp cho rgw_frontends
để chỉ định sử dụng giao diện civetweb. Civetweb là một máy chủ HTTP nhỏ gọn và dễ dùng, nó được tích hợp sẵn trong RADOS Gateway của Ceph. Khi rgw_frontends
được đặt thành civetweb
, RADOS Gateway sẽ sử dụng civetweb làm giao diện mạng để lắng nghe các yêu cầu HTTP từ client. Civetweb hỗ trợ nhiều tính năng HTTP như xử lý các phương thức HTTP (GET, POST, PUT, DELETE), xử lý SSL/TLS, xác thực, và nhiều tính năng khác. Vì vậy, khi bạn đặt rgw_frontends
thành civetweb
, RADOS Gateway sẽ sử dụng civetweb làm giao diện mạng để lắng nghe các yêu cầu HTTP từ client.
[client.rgw.radosgw]
host = 192.168.13.201
rgw_frontends = civetweb port=8080
rgw_dns_name = radosgw.hoanghd.com
Phần thứ 2 cần chỉnh sửa trong file ceph.conf là keyring = /etc/pve/priv/$cluster.$name.keyring
, lý do là tôi chạy Ceph của Proxmox nên đường dẫn tới keyring
nó trỏ tới thư mục/etc/pve/priv/
mà bên máy client không có thư mục này. Vì vậy tôi sẽ trỏ keyring
theo đường dẫn tuyệt đối là keyring = /etc/ceph/ceph.client.admin.keyring.
Như vậy sau khi thay đổi thì ceph.conf sẽ có nội dung kiểu như vậy.
[global]
auth_client_required = cephx
auth_cluster_required = cephx
auth_service_required = cephx
cluster_network = 10.0.0.225/24
fsid = 1d447334-e065-4745-b494-99bc76c7dff8
mon_allow_pool_delete = true
mon_host = 192.168.13.226 192.168.13.225 192.168.13.227
ms_bind_ipv4 = true
ms_bind_ipv6 = false
osd_pool_default_min_size = 2
osd_pool_default_size = 3
public_network = 192.168.13.225/23
[client]
keyring = /etc/ceph/ceph.client.admin.keyring
[mon.pve-node1]
public_addr = 192.168.13.225
[mon.pve-node2]
public_addr = 192.168.13.226
[mon.pve-node3]
public_addr = 192.168.13.227
[client.rgw.radosgw]
host = 192.168.13.201
rgw_frontends = civetweb port=8080
rgw_dns_name = radosgw.hoanghd.com
Tạo thư mục /var/lib/ceph/radosgw/client.rgw.radosgw
để lưu trữ các tệp khóa cho khách hàng RGW.
mkdir -p /var/lib/ceph/radosgw/client.rgw.radosgw
Tạo khóa xác thực cho khách hàng RGW và lưu trữ trong tệp /var/lib/ceph/radosgw/client.rgw.radosgw/keyring
.
Trường client.rgw.radosgw
trong câu lệnh ceph auth get-or-create
tương ứng với phần cấu hình [client.rgw.radosgw]
trong file ceph.conf
. Khi bạn chạy lệnh ceph auth get-or-create client.rgw.radosgw
, nó sẽ tạo một khóa xác thực mới cho khách hàng RADOS Gateway với tên là client.rgw.radosgw
.
Sau khi khóa xác thực được tạo, nó sẽ được lưu trong file keyring tại đường dẫn /var/lib/ceph/radosgw/client.rgw.radosgw/keyring
. Trường client.rgw.radosgw
trong lệnh ceph auth get-or-create
và đường dẫn /var/lib/ceph/radosgw/client.rgw.radosgw/keyring
cần được điều chỉnh để phù hợp với cấu hình chính xác trong file ceph.conf
.
ceph auth get-or-create client.rgw.radosgw osd 'allow rwx' mon 'allow rw' -o /var/lib/ceph/radosgw/client.rgw.radosgw/keyring
Hiển thị nội dung của tệp /var/lib/ceph/radosgw/pve-radosgw/keyring
, chứa khóa xác thực cho khách hàng RGW.
$ cat /var/lib/ceph/radosgw/client.rgw.radosgw/keyring
[client.rgw.radosgw]
key = AQDyX39kUD/uHRAAkmpM1Rvtf9ZEXjhiBTBl0g==
Thay đổi chủ sở hữu của các tệp trong /etc/ceph/
và /var/lib/ceph/radosgw/
thành người dùng ceph
.
sudo chown -R ceph. /etc/ceph/ceph.*
sudo chown -R ceph. /var/lib/ceph/radosgw/*
Bật và khởi động lại dịch vụ Ceph rados gateway (ceph-radosgw
) với tên rgw.radosgw
. Lệnh cuối cùng sẽ hiển thị trạng thái hiện tại của dịch vụ.
systemctl enable --now ceph-radosgw@rgw.radosgw
systemctl start --now ceph-radosgw@rgw.radosgw
systemctl status --now ceph-radosgw@rgw.radosgw
Xác nhận lại radosgw đã chạy.
$ systemctl status --now ceph-radosgw@rgw.radosgw
● ceph-radosgw@rgw.radosgw.service - Ceph rados gateway
Loaded: loaded (/lib/systemd/system/ceph-radosgw@.service; indirect; vendor preset: enabled)
Active: active (running) since Thu 2023-06-08 06:06:29 UTC; 2ms ago
Main PID: 380 ((radosgw))
Tasks: 1
CGroup: /system.slice/system-ceph\x2dradosgw.slice/ceph-radosgw@rgw.radosgw.service
└─380 (radosgw)
Jun 08 06:06:29 localhost.localdomain systemd[1]: Started Ceph rados gateway.
Lưu ý: Tên dịch vụ ceph-radosgw
được xác định dựa trên cấu hình trong file /etc/ceph/ceph.conf
.
Trong file cấu hình Ceph (ceph.conf
), bạn cần chỉ định tên dịch vụ RADOS Gateway bên trong phần [client.<tên_dịch_vụ>]
. Ví dụ, nếu bạn đặt tên dịch vụ là rgw.radosgw
trong file cấu hình, thì tên dịch vụ trong lệnh systemctl restart --now ceph-radosgw@rgw.radosgw
sẽ là ceph-radosgw@rgw.radosgw
.
Lưu ý rằng tên dịch vụ trong file cấu hình và trong lệnh systemctl restart
phải khớp nhau để systemd có thể tìm thấy và quản lý dịch vụ.
Vì vậy, hãy đảm bảo rằng tên dịch vụ bạn đặt trong file cấu hình ceph.conf
khớp với tên dịch vụ được sử dụng trong lệnh systemctl restart
để khởi động lại RADOS Gateway thành công.