Prerequisites
Trước khi bạn cài đặt và cấu hình dịch vụ Block Storage trên nút lưu trữ, bạn phải chuẩn bị thiết bị lưu trữ. Lưu ý hãy thực hiện các phần này trên thiết bị lưu trữ.
apt install lvm2 thin-provisioning-tools -y
Khởi tạo LVM physical volume /dev/sdb
:
# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
Khởi tạo LVM volume group cinder-volumes
:
# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created
Khi ta cấu hình Cinder trên một node, nó sẽ tạo ra các logical volume (khối lượng logic) trên nhóm volume đã được chỉ định để lưu trữ dữ liệu. Các logical volume này sẽ được sử dụng bởi các ứng dụng OpenStack khác để lưu trữ dữ liệu của họ.
Block Storage volumes chỉ có thể được truy cập bởi các instance. Tuy nhiên, hệ điều hành cơ bản quản lý các thiết bị liên quan đến các volumes này. Theo mặc định, công cụ quét khối LVM quét thư mục /dev để tìm kiếm các thiết bị lưu trữ khối chứa volumes. Nếu các dự án sử dụng LVM trên các volumes của họ, công cụ quét sẽ phát hiện các volumes này và cố gắng lưu trữ chúng trong bộ nhớ cache, điều này có thể gây ra nhiều vấn đề với cả hệ điều hành cơ bản và các volumes của dự án. Bạn phải cấu hình lại LVM để chỉ quét các thiết bị chứa volume group cinder-volumes. Chỉnh sửa file /etc/lvm/lvm.conf và thực hiện các hành động sau đây:
- Trong phần thiết bị, thêm một bộ lọc chấp nhận thiết bị /dev/sdb và từ chối tất cả các thiết bị khác, ở đây, “a/sdb/” là một mục chấp nhận, có nghĩa là LVM chỉ quét các thiết bị /dev/sdb. Trong khi đó, “r/.*/” là một mục từ chối, có nghĩa là LVM sẽ không quét bất kỳ thiết bị nào khác. Bằng cách này, LVM chỉ quét và quản lý các thiết bị chứa nhóm khối cinder-volumes để tránh các vấn đề với các thiết bị khác có thể xảy ra.
devices {
...
filter = [ "a/sdb/", "r/.*/"]
Cảnh báo:
- Nếu trên các storage node của bạn sử dụng LVM trên đĩa hệ thống, bạn cần phải thêm thiết bị liên quan vào bộ lọc (filter) để tránh các vấn đề liên quan đến xác định các thiết bị được quản lý bởi LVM. Ví dụ, nếu /dev/sda chứa hệ điều hành, bạn cần thêm thiết bị này vào filter để đảm bảo hệ thống xác định đúng thiết bị.
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
- Tương tự, nếu các compute node của bạn sử dụng LVM trên đĩa hệ thống, bạn cũng cần sửa đổi filter trong file /etc/lvm/lvm.conf trên các node đó để chỉ bao gồm đĩa hệ thống.
filter = [ "a/sda/", "r/.*/"]
Cài đặt và cấu hình các thành phần của hệ thống
Trong kiến trúc Block Storage của OpenStack, cinder-volume
là một phần mềm chính thức của OpenStack dùng để quản lý các khối dữ liệu (block storage). cinder-volume
sử dụng một driver để quản lý các thiết bị lưu trữ khối. Một trong những driver được hỗ trợ là tgt
(iSCSI Target). tgt
là một hệ thống tạo mục tiêu iSCSI (iSCSI Target) mã nguồn mở, cho phép máy khách iSCSI kết nối và truy cập vào các khối dữ liệu được cấp phép. Vì vậy, khi sử dụng cinder-volume
với driver tgt
, các khối dữ liệu được cấp phép có thể được truy cập thông qua giao thức iSCSI. Vì vậy bạn hãy cài đặt 2 gói trên như sau:
apt install cinder-volume tgt -y
Mởi file /etc/cinder/cinder.conf, đây là cấu hình trong OpenStack Cinder, nơi chứa các thông tin cần thiết để cấu hình dịch vụ Block Storage trên một node lưu trữ. Một số thông tin quan trọng bao gồm:
- [database]: Đây là phần cấu hình cho cơ sở dữ liệu mà Cinder sử dụng. Trong đoạn này, Cinder được cấu hình để sử dụng MySQL với tên người dùng “cinder” và mật khẩu “CINDER_DBPASS” trên máy chủ “controller”.
[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
- [DEFAULT]: Đây là phần cấu hình chung cho Cinder. Trong đoạn này, Cinder được cấu hình để sử dụng RabbitMQ làm broker thông điệp để giao tiếp với các dịch vụ khác của OpenStack. Nó cũng được cấu hình để sử dụng Keystone làm trình xác thực. Ngoài ra, cấu hình này chỉ định địa chỉ IP của interface quản lý và backend lưu trữ được kích hoạt là “lvm”. Glance API server được chỉ định là http://controller:9292.
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
enabled_backends = lvm
glance_api_servers = http://controller:9292
- [keystone_authtoken]: Đây là phần cấu hình xác thực với Keystone, dịch vụ xác thực và ủy quyền trong hệ thống OpenStack. Trong đoạn này, Cinder được cấu hình để sử dụng Keystone API endpoint trên máy chủ “controller”. Tên dự án, tên người dùng và mật khẩu được cung cấp để xác thực.
[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
- [lvm]: Đây là phần cấu hình cho backend lưu trữ “lvm”. Cinder sử dụng LVM (Logical Volume Manager) để quản lý các thể hiện khối. Trong đoạn này, Cinder được cấu hình để sử dụng “cinder-volumes” như volume group và giao thức mục tiêu iSCSI với tgtadm làm trình trợ giúp.
[lvm]
# ...
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = tgtadm
- [oslo_concurrency]: Đây là phần cấu hình cho quản lý đồng thời của Cinder. Trong đoạn này, Cinder được cấu hình để sử dụng đường dẫn “/var/lib/cinder/tmp” làm đường dẫn khóa.
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp
Sau khi cấu hình xong, ta cần khởi động lại dịch vụ tgt và dịch vụ cinder-volume để áp dụng các thay đổi cấu hình mới.
service tgt restart
service cinder-volume restart