Cinder là một dịch vụ lưu trữ dành cho OpenStack. Nó cho phép tạo và quản lý các khối lưu trữ (block storage) để cung cấp cho các máy ảo trên hạ tầng Cloud OpenStack. Các tài nguyên lưu trữ có thể được tạo ra bằng cách sử dụng các ổ đĩa cục bộ hoặc các hệ thống lưu trữ bên ngoài được liên kết với nó thông qua giao thức iSCSI hoặc NFS. Cinder hỗ trợ tính năng như snapshot, backup và restore, tạo volume từ snapshot, mã hóa dữ liệu, tạo bootable volume, quản lý volume quota và policy.
Có nhiều giải pháp có thể được sử dụng để triển khai Cinder trong OpenStack, bao gồm:
- Ceph: Cinder có thể được triển khai với Ceph như một storage backend. Ceph là một giải pháp storage phân tán mã nguồn mở, cung cấp khả năng lưu trữ linh hoạt và mở rộng.
- NetApp: NetApp là một hãng cung cấp giải pháp storage thương mại, có thể được sử dụng để cung cấp backend storage cho Cinder.
- SolidFire: SolidFire là một giải pháp storage flash-based, có thể được sử dụng để cung cấp backend storage cho Cinder.
- NFS: Cinder có thể được triển khai với NFS như một storage backend. NFS là một giải pháp storage được sử dụng rộng rãi và hỗ trợ nhiều hệ thống file khác nhau.
- GlusterFS: GlusterFS là một giải pháp storage phân tán, có thể được sử dụng để cung cấp backend storage cho Cinder.
- LVM: LVM (Logical Volume Manager) là một công cụ quản lý logical volume trên Linux, có thể được sử dụng để cung cấp backend storage cho Cinder.
Các giải pháp này đều có ưu nhược điểm riêng, bạn cần cân nhắc kỹ trước khi lựa chọn để triển khai Cinder trong OpenStack.
Cinder mặc định của OpenStack là driver LVM (Logical Volume Manager), cho phép tạo và quản lý các logical volume trên các physical volume. Driver này cho phép lưu trữ các dữ liệu của các máy ảo trong các logical volume được cấp phát từ Cinder. Tuy nhiên, OpenStack cũng hỗ trợ nhiều driver khác nhau để cung cấp khả năng lưu trữ cho các máy ảo của bạn. Một số driver được hỗ trợ bao gồm: Ceph RBD, NetApp, EMC, IBM, GlusterFS, NFS, v.v. Bài viết này sẽ hướng dẫn cài đặt và cấu hình Cinder mặc định của Openstack.
Prerequisites
Đầu tiên hãy tạo database lưu trữ thông tin Cinder.
sudo mysql -u root -pHoanghd164 -e "CREATE DATABASE cinder;"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "FLUSH PRIVILEGES;"
Tiếp theo, sử dụng lệnh “. admin-openrc” để kích hoạt môi trường của OpenStack admin.
. admin-openrc
openstack user create --domain default --password-prompt cinder
: Tạo một user mới tên là “cinder” trong domain mặc định của OpenStack, và yêu cầu nhập mật khẩu cho user này.
$ openstack user create --domain default --password-prompt cinder
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 9d7e33de3e1a498390353819bc7d245d |
| name | cinder |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
openstack role add --project service --user cinder admin
: Cấp quyền “admin” cho user “cinder” trong project “service” của OpenStack. Quyền này cho phép user “cinder” thực hiện các thao tác quản lý với dịch vụ Cinder.
openstack role add --project service --user cinder admin
Lệnh dưới được sử dụng để tạo một dịch vụ OpenStack Block Storage. Trong đó, các tham số được truyền vào bao gồm:
--name cinderv3
: Tên của dịch vụ là “cinderv3”.--description "OpenStack Block Storage"
: Mô tả của dịch vụ là “OpenStack Block Storage”.volumev3
: Tên kiểu dịch vụ (service type) được sử dụng là “volumev3”.
$ openstack service create --name cinderv3 \
--description "OpenStack Block Storage" volumev3
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Block Storage |
| enabled | True |
| id | ab3bbbef780845a1a283490d281e7fda |
| name | cinderv3 |
| type | volumev3 |
+-------------+----------------------------------+
Lưu ý: Từ phiên bản Xena của OpenStack trở đi, dịch vụ lưu trữ khối (Block Storage) chỉ cần một thực thể dịch vụ duy nhất để hoạt động. Trước đó, các phiên bản OpenStack khác cần thực hiện cài đặt và cấu hình các thực thể dịch vụ khác nhau để sử dụng dịch vụ lưu trữ khối. Nếu muốn tìm hiểu về các phiên bản OpenStack trước đó, người dùng nên tham khảo tài liệu hướng dẫn cụ thể cho từng phiên bản đó.
Các câu lệnh tiếp theo được sử dụng để tạo các đầu cuối (endpoints) cho dịch vụ Cinder trên OpenStack. Mỗi endpoint được tạo cho phép các yêu cầu truy cập vào dịch vụ Cinder thông qua giao thức HTTP. Cụ thể:
openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
: tạo endpoint public, cho phép truy cập từ bên ngoài mạng. Endpoint này sẽ sử dụng giao thức HTTP để truy cập dịch vụ Cinder, địa chỉ IP và cổng được chỉ định làhttp://controller:8776
. Bạn cũng có thể thấy định dạng đường dẫn cho endpoint có chứa%\(project_id\)s
, điều này cho phép mỗi project truy cập vào dịch vụ với project ID của chính nó.openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
: tạo endpoint internal, cho phép truy cập từ bên trong mạng OpenStack. Endpoint này cũng sử dụng giao thức HTTP để truy cập dịch vụ Cinder và có địa chỉ IP và cổng làhttp://controller:8776
.openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
: tạo endpoint admin, cho phép quản trị viên quản lý và cấu hình dịch vụ Cinder. Endpoint này cũng sử dụng giao thức HTTP và có địa chỉ IP và cổng làhttp://controller:8776
.
$ openstack endpoint create --region RegionOne \
volumev3 public http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 03fa2c90153546c295bf30ca86b1344b |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | ab3bbbef780845a1a283490d281e7fda |
| service_name | cinderv3 |
| service_type | volumev3 |
| url | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
$ openstack endpoint create --region RegionOne \
volumev3 internal http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 94f684395d1b41068c70e4ecb11364b2 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | ab3bbbef780845a1a283490d281e7fda |
| service_name | cinderv3 |
| service_type | volumev3 |
| url | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
$ openstack endpoint create --region RegionOne \
volumev3 admin http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 4511c28a0f9840c78bacb25f10f62c98 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | ab3bbbef780845a1a283490d281e7fda |
| service_name | cinderv3 |
| service_type | volumev3 |
| url | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
Cài đặt và cấu hình các thành phần của hệ thống trên controller node
Lệnh tiếp theo cài đặt package “cinder-api” và “cinder-scheduler” trên hệ thống Ubuntu bằng phần mềm quản lý gói APT. “cinder-api” và “cinder-scheduler” là các thành phần của dịch vụ Block Storage của OpenStack, được sử dụng để quản lý và cung cấp dịch vụ lưu trữ đám mây cho các máy ảo của OpenStack. Thông qua cinder-api, các yêu cầu lưu trữ được chuyển đến các máy chủ lưu trữ Cinder. Trong khi đó, cinder-scheduler quản lý việc phân phối tài nguyên lưu trữ giữa các máy chủ lưu trữ Cinder khác nhau.
apt install cinder-api cinder-scheduler -y
Tiếp theo chúng ta cấu hình file /etc/cinder/cinder.conf
trên máy chủ Cinder. Đây là tập tin cấu hình của dịch vụ Block Storage trong OpenStack.
Tại section [DEFAULT]:
transport_url
: địa chỉ máy chủ RabbitMQ sử dụng để giao tiếp với các dịch vụ khác trong hệ thống.auth_strategy
: xác định cách thức xác thực người dùng, trong trường hợp này là keystone (dịch vụ quản lý xác thực trong OpenStack).my_ip
: địa chỉ IP của máy chủ Cinder.
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = 192.168.13.201
Tại section [database] chỉnh sửa trường connection
: địa chỉ của cơ sở dữ liệu MySQL sử dụng để lưu trữ các thông tin liên quan đến Block Storage.
[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
Tại section [keystone_authtoken] khai báo www_authenticate_uri
, auth_url
, memcached_servers
, auth_type
, project_domain_name
, user_domain_name
, project_name
, username
và password
, đây là các thông tin xác thực để Cinder có thể truy cập tới dịch vụ Keystone.
[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS
Tại section [oslo_concurrency] khai báo lock_path
:, đây là đường dẫn lưu trữ file lock, sử dụng để đảm bảo tính toàn vẹn của dữ liệu trong quá trình thực hiện các hoạt động cập nhật.
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp
Cuối cùng chúng ta chạy lệnh su -s /bin/sh -c "cinder-manage db sync" cinder
được sử dụng để đồng bộ hóa cơ sở dữ liệu của Cinder với schema được định nghĩa trong code, đảm bảo rằng Cinder sử dụng được đầy đủ các bảng và trường trong quá trình thực hiện các hoạt động lưu trữ.
# su -s /bin/sh -c "cinder-manage db sync" cinder
Cấu hình Compute node sử dụng Block Storage
Ta vào file cấu hình /etc/nova/nova.conf
trên compute node của OpenStack. Nó xác định tên khu vực mà các dịch vụ Cinder sẽ hoạt động trong đó, được gọi là “os_region_name”, và được đặt là “RegionOne”.
[cinder]
os_region_name = RegionOne
Hoàn tất cài đặt.
Sau đó khởi động lại dịch vụ Compute API.
service nova-api restart
Và Block Storage services.
service cinder-scheduler restart
service apache2 restart
Phần tiếp theo chúng ta học cách cài đặt và cấu hình storage node.