Kiến trúc hệ thống của Cinder
Cinder thường được cài trên một hoặc nhiều node.
Cinder sử dụng một SQL database tập chung mà được chia sẻ cho tất cả các thành phần của Cinder.
Các thành phần của Cinder
Sơ đồ dưới đây mô tả qua về các thành phần của Cinder và giao tiếp giữa chúng:
- DB: SQL database tập chung để lưu dữ liệu được sử dụng bởi tất cả các thành phần.
- Web Dashnboard: thành phần bên ngoài giao tiếp với API.
- API: thành phần nhận yêu cầu http, chuyển đổi các lệnh và giao tiếp với các thành phần khác qua queue và http.
- Auth Manager: thành phần chịu trách nhiệm xử lý các vấn đền liên quan đến user/role/project,…
- scheduler: đưa ra quyết định host nào sẽ được dùng để tạo volume.
- volume: quản lý các volume trên các backend storage, thông qua các storage backend driver.
- backup: quản lý sao lưu cho các volume.
Instance và disk
Boot source
- Trong Openstack có nhiều các để khởi tạo ổ đĩa cho máy ảo
- Image : Khởi chạy instance sử dụng image chạy trên
ephemeral disk
hoặcvolume disk
- Instance Shapshoot : khởi chạy instance từ một bản snapshot trên một ephermeral disk hoặc volume disk
- Volume : Khởi chạy instance từ một bootable volume đã tồn tại
- Volume Snapshot : Khởi tạo một volume mới từ volume snapshot và chạy instance mới sử dụng bootable volume mới
- Image : Khởi chạy instance sử dụng image chạy trên
Ephemeral disk
- Là disk được tạo ra với mục đích để boot và lưu trữ tạm thời cho máy ảo.
- Được sử dụng trong trường hợp không quan tâm đến dữ liệu bên trong máy ảo khi máy ảo bị xóa.
- Vòng đời của nó phụ thuộc vào máy ảo, được tạo ra khi máy ảo tạo và nếu máy ảo bị xóa thì ephemeral disk này cũng bị xóa.
- Có thể thêm một volume vào máy ảo boot từ ephemaral disk để lưu trữ dữ liệu lâu dài vào volume này.
- Có thể tạo snapshot.
Volume disk
- Là dạng lưu trữ bên vững hơn so với ephemeral disk và có thể dùng như một block device cho máy ảo, có thể phân vùng, định dạng, và mount để boot hoặc lưu dữ liệu
- Vòng đời của volume không bị ảnh hưởng bởi máy ảo. Có thể giữ lại volume và dữ liệu trên nó khi máy ảo xóa. Volume chỉ bị xóa bởi người dùng.
Luồng hoạt động của các thành phần trong Cinder khi tạo Volume
Các bước khi tạo máy ảo:
- Client gửi yêu cầu tạo volume thông qua REST API hoặc CLI openstack-client
cinder-api
xử lý việc xác nhận yêu câu, khi được xác nhận, nó gửi tin nhắn vào hàng đợi AMQP.cinder-volume
lấy tin nhắn từ hàng đợi, gửi tin nhắn cho cinder-scheduler để quyết định backend storage driver nào sẽ được sử dụng để tạo volume.cinder-scheduler
lấy tin nhắn từ hàng đợi, tạo ra danh mục các backend theo các tiêu chí phù hợp như dung lượng còn lại, kích thước volume, loại volume,….cinder-volume
nhận tin nhắn phản hồi từcinder-scheduler
trong hàng đợi; tạo lần lượt volume trên các backend trong danh sách vừa nhận cho đến khi tạo volume thành công.- Cinder backend driver giao tiếp với backend để tạo volume.
cinder-volume
thu thập metadata và thông tin về kết nối của volume và gửi đến hàng đợicinder-api
nhận phản hồi từ hàng đợi và trả về thông tin về volume được tạo- Client nhận thông tin bao gồm trạng thái của yêu cầu tạo, volume UUID(nếu thành công), và nhiều thông tin khác.
Luồng hoạt động các thành phần trong Cinder khi gán volume cho máy ảo.
- CLient gửi yêu cầu gán máy ảo thông qua Nova REST API.
nova-api
xác thực yêu cầu, người dùng, khi xác thực xong, thực hiện yêu cầu đến cinder-api để lấy thông tin kết nối cho volume được chỉ định.cinder-api
xác thực yêu cầu và người dùng, khi xác thực xong, gửi một tin nhắn đến hàng đợi.cinder-volume
đọc tin nhắn từ hàng đợi và gửi đến driver phụ trách volume đó.- Driver chuẩn bị volume cho quá trình gán cho máy ảo.
cinder-volume
gửi thông tin phản hồi đếncinder-api
thông qua hàng đợi.cinder-api
đọc thông tin phản hồi từcinder-volume
, gửi thông tin kết nối đến Nova.- Nova tạo kết nối đến lưu trữ với thông tin mà cinder trả về.
- Nova chuyển volume đến hypervisor, để gán vào máy ảo như một block device ảo hoặc thật.
Nguồn tài liệu:
- https://docs.openstack.org/project-deploy-guide/openstack-ansible/newton/overview-storage-arch.html
- https://netapp-openstack-dev.github.io/openstack-docs/draft/cinder/process_structure/section_cinder-processes.html