OpenStack Object Storage là một hệ thống lưu trữ đối tượng đa người dùng. Nó có khả năng mở rộng cao và có thể quản lý lượng lớn dữ liệu phi cấu trúc với chi phí thấp thông qua API RESTful HTTP.
Nó bao gồm các thành phần sau:
- Proxy servers (swift-proxy-server): Chấp nhận các yêu cầu API OpenStack Object Storage và các yêu cầu HTTP để tải lên file, sửa đổi siêu dữ liệu và tạo các thùng chứa. Nó cũng cung cấp danh sách các file hoặc thùng chứa cho trình duyệt web. Để cải thiện hiệu suất, máy chủ proxy có thể sử dụng bộ đệm tùy chọn thường được triển khai với memcache.
- Account servers (swift-account-server): Quản lý các tài khoản được xác định với Object Storage.
- Container servers (swift-container-server): Quản lý ánh xạ các thùng chứa hoặc thư mục trong Object Storage.
- Object servers (swift-object-server): Quản lý các đối tượng thực sự, chẳng hạn như các file, trên các nút lưu trữ.
- Các quá trình định kỳ khác: Thực hiện các nhiệm vụ dọn dẹp dữ liệu trên kho dữ liệu lớn. Các dịch vụ sao chép đảm bảo tính nhất quán và sẵn sàng thông qua cụm. Các quá trình định kỳ khác bao gồm các bộ kiểm tra, bộ cập nhật và bộ gặt hái.
- WSGI middleware: Xử lý xác thực và thường là OpenStack Identity.
- swift client: Cho phép người dùng gửi các lệnh đến API REST thông qua một client dòng lệnh được ủy quyền là một người dùng quản trị, người dùng bán lẻ hoặc người dùng swift.
- swift-init: Tập lệnh khởi tạo quá trình xây dựng file vòng, lấy tên daemon làm tham số và cung cấp các lệnh. Tài liệu chi tiết bạn có thể xem https://docs.openstack.org/swift/latest/admin_guide.html#managing-services.
- swift-recon: Một công cụ CLI được sử dụng để lấy các số liệu và thông tin telemetric về một cụm đã được thu thập bởi middleware swift-recon.
- swift-ring-builder: Tiện ích xây dựng và cân bằng vòng lưu trữ. Được mô tả trong https://docs.openstack.org/swift/latest/admin_guide.html#managing-the-rings.
Cài đặt và cấu hình dịch vụ proxy để xử lý các yêu cầu cho các dịch vụ tài khoản, container và đối tượng hoạt động trên các nút lưu trữ. Để đơn giản, hướng dẫn này cài đặt và cấu hình dịch vụ proxy trên nút điều khiển. Tuy nhiên, bạn có thể chạy dịch vụ proxy trên bất kỳ nút nào có kết nối mạng đến các nút lưu trữ. Bạn cũng có thể cài đặt và cấu hình dịch vụ proxy trên nhiều nút để tăng hiệu suất và độ tin cậy. Để biết thêm thông tin, xem Hướng dẫn triển khai.
Phần này áp dụng cho Ubuntu 14.04 (LTS).
Dịch vụ Object Storage không sử dụng cơ sở dữ liệu SQL trên Controller node. Thay vào đó, nó sử dụng cơ sở dữ liệu SQLite phân tán trên mỗi storage node.
Yêu cầu tiên quyết
Dịch vụ proxy phụ thuộc vào cơ chế xác thực và phân quyền như dịch vụ Identity. Tuy nhiên, khác với các dịch vụ khác, nó cũng cung cấp cơ chế nội bộ cho phép nó hoạt động mà không cần bất kỳ dịch vụ OpenStack nào khác. Trước khi cấu hình dịch vụ Object Storage, bạn phải tạo thông tin xác thực dịch vụ và một điểm cuối API.
Đầu tiên, sử dụng lệnh “. admin-openrc” để kích hoạt môi trường của OpenStack admin.
. admin-openrc
Tạo user swift với lệnh: openstack user create --domain default --password-prompt swift
:
--domain default
: chỉ định domain mặc định cho user swift--password-prompt
: yêu cầu nhập password cho user swift
$ openstack user create --domain default --password-prompt swift
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | d535e5cbd2b74ac7bfb97db9cced3ed6 |
| name | swift |
+-----------+----------------------------------+
Gán vai trò admin cho user swift với lệnh: openstack role add --project service --user swift admin
--project service
: chỉ định project “service”--user swift
: chỉ định user “swift”admin
: gán vai trò “admin” cho user swift
openstack role add --project service --user swift admin
Tạo service object-store với lệnh: openstack service create --name swift --description "OpenStack Object Storage" object-store
--name swift
: chỉ định tên service là “swift”--description "OpenStack Object Storage"
: mô tả về service “swift”object-store
: chỉ định type của service là “object-store”
$ openstack service create --name swift \
--description "OpenStack Object Storage" object-store
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Object Storage |
| enabled | True |
| id | 75ef509da2c340499d454ae96a2c5c34 |
| name | swift |
| type | object-store |
+-------------+----------------------------------+
Tạo các endpoint cho service “object-store” với lệnh:
– Endpoint public: openstack endpoint create --region RegionOne object-store public http://controller:8080/v1/AUTH_%\(project_id\)s
--region RegionOne
: chỉ định tên region cho endpointobject-store
: chỉ định type của service là “object-store”public
: chỉ định loại endpoint là publichttp://controller:8080/v1/AUTH_%\(project_id\)s
: URL cho endpoint public
– Endpoint internal: openstack endpoint create --region RegionOne object-store internal http://controller:8080/v1/AUTH_%\(project_id\)s
--region RegionOne
: chỉ định tên region cho endpointobject-store
: chỉ định type của service là “object-store”internal
: chỉ định loại endpoint là internalhttp://controller:8080/v1/AUTH_%\(project_id\)s
: URL cho endpoint internal
– Endpoint admin: openstack endpoint create --region RegionOne object-store admin http://controller:8080/v1
--region RegionOne
: chỉ định tên region cho endpointobject-store
: chỉ định type của service là “object-store”admin
: chỉ định loại endpoint là adminhttp://controller:8080/v1
: URL cho endpoint admin
$ openstack endpoint create --region RegionOne \
object-store public http://controller:8080/v1/AUTH_%\(project_id\)s
+--------------+----------------------------------------------+
| Field | Value |
+--------------+----------------------------------------------+
| enabled | True |
| id | 12bfd36f26694c97813f665707114e0d |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 75ef509da2c340499d454ae96a2c5c34 |
| service_name | swift |
| service_type | object-store |
| url | http://controller:8080/v1/AUTH_%(project_id)s |
+--------------+----------------------------------------------+
$ openstack endpoint create --region RegionOne \
object-store internal http://controller:8080/v1/AUTH_%\(project_id\)s
+--------------+----------------------------------------------+
| Field | Value |
+--------------+----------------------------------------------+
| enabled | True |
| id | 7a36bee6733a4b5590d74d3080ee6789 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 75ef509da2c340499d454ae96a2c5c34 |
| service_name | swift |
| service_type | object-store |
| url | http://controller:8080/v1/AUTH_%(project_id)s |
+--------------+----------------------------------------------+
$ openstack endpoint create --region RegionOne \
object-store admin http://controller:8080/v1
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | ebb72cd6851d4defabc0b9d71cdca69b |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 75ef509da2c340499d454ae96a2c5c34 |
| service_name | swift |
| service_type | object-store |
| url | http://controller:8080/v1 |
+--------------+----------------------------------+
Cài đặt và cấu hình các thành phần hệ thống
Cài đặt các gói liên quan đến OpenStack Object Storage với lệnh: apt-get install swift swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached
swift
: gói cài đặt cho OpenStack Object Storageswift-proxy
: gói cài đặt cho OpenStack Object Storage proxy serverpython-swiftclient
: gói cài đặt cho Python client để truy cập vào OpenStack Object Storagepython-keystoneclient
: gói cài đặt cho Python client của OpenStack Identity servicepython-keystonemiddleware
: gói cài đặt cho Python middleware của OpenStack Identity servicememcached
: là hệ thống lưu trữ dữ liệu cache phổ biến được sử dụng trong các ứng dụng web để tăng tốc độ truy vấn dữ liệu. Trong hệ thống OpenStack Object Storage, memcached được sử dụng để lưu trữ các trạng thái xác thực của người dùng và các phiên làm việc của họ, nhằm tối ưu hóa hiệu suất hoạt động của hệ thống.
# apt-get install swift swift-proxy python-swiftclient \
python-keystoneclient python-keystonemiddleware \
memcached -y
Bước đầu tiên là tạo thư mục /etc/swift.
mkdir /etc/swift
Tiếp theo là tải file cấu hình proxy-server.conf mẫu từ kho lưu trữ nguồn của Object Storage và lưu trữ file này trong thư mục /etc/swift.
curl -o /etc/swift/proxy-server.conf https://opendev.org/openstack/swift/raw/branch/master/etc/proxy-server.conf-sample
Sau đó, chỉnh sửa file cấu hình proxy-server.conf với các thông số cần thiết như sau:
- Trong phần [DEFAULT], thiết lập cổng bind_port, user và thư mục cấu hình swift_dir.
[DEFAULT]
...
bind_port = 8080
user = swift
swift_dir = /etc/swift
- Trong phần [pipeline:main], xoá các modules tempurl và tempauth và thêm các modules authtoken và keystoneauth. Đừng thay đổi thứ tự các module.
[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server
- Trong phần [app:proxy-server], bật tính năng tạo tài khoản tự động với account_autocreate = True.
[app:proxy-server]
use = egg:swift#proxy
...
account_autocreate = True
- Trong phần [filter:keystoneauth], thiết lập các vai trò operator_roles.
[filter:keystoneauth]
use = egg:swift#keystoneauth
...
operator_roles = admin,user
Trong phần [filter:authtoken], cấu hình truy cập Identity service và memcached_servers.
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = SWIFT_PASS
delay_auth_decision = True
- Trong phần [filter:cache], cấu hình vị trí của memcached.
[filter:cache]
use = egg:swift#memcache
...
memcache_servers = controller:11211
Lưu ý: Không thay đổi thứ tự các modules.