Cấu hình Scheduler Filter multiple backend trong Openstack Cinder
1. Giới thiệu.
Openstack block storage cho phép bạn chọn backend cho volume dựa trên các tính chất cụ thể của backend bằng cách sử dụng DriverFilter và GoodnessWeighter để lập lịch. Việc lập lịch với driver filter và weighter giúp scheduler chọn backend tốt nhận dựa theo tính chất của volume được yêu cầu.
Các filter(bộ lọc) của Cinder Scheduler
- AvailabilityZoneFilter : Lọc theo availability zone
- CapabilitiesFilter: lọc backend dựa theo các bản ghi loại tài nguyên(máy ảo, volume)
- DifferentBackendFilter: Đặt volume ở backend nào đó mà khác với một nhóm backend được thiết lập trong bộ lọc này.
- DriverFilter: lọc backend dựa trên một
filter function
và các metrics. - InstanceLocalityFilter: Đặt volume cùng host với máy ảo sử dụng nó. Nó yêu cầu storage backend đặt trên cùng một host vật lý với host mà hypervisor của máy ảo.
- Json filter: Lọc backend dựa theo ngữ pháp Json cơ bản.
- RetryFilter: Lọc và lập lịch lên các máy chủ chưa được lập lịch.
- SameBackendFilter: Lập lịch tạo volume trên cùng host với một volume khác.
Cinder Scheduler Weights
- AllocatedCapacityWeigher: tính toán trọng số của host theo sức chứa đã được sử dụng của host. mặc định nó sẽ đặt volume mới vào host có sức chứa đã được sử dụng ít nhất, có thể cấu hình để nó đặt lên host có sức chứa đã được sử dụng nhiều nhât.
- CapacityWeigher: tính toán trọng số các host theo sức chứa ảo hoặc thực tế còn lại(chưa sử dụng) của host.
- ChanceWeigher: gán trọng số ngẫu nhiên cho host. Được đùng để đặt volume ngẫu nhiên trên một danh sách các host phù hợp như nhau.
- GoodnessWeigher: tính toán trọng số dựa theo hàm goodness của mỗi host.(chỉ số goodness từ tệ nhất đến tốt nhất là từ 0 đến 100).
- VolumeNumberWeighner: tính toán trọng số cho host theo số lượng volume ở trên backend của host đó.
2. Cấu hình và sử dụng driver filler và weighing để lập lịch(scheduler).
- Để cấu hình Block Storage scheduler multi back end cần sử dụng option filter_scheduler. Trong filter scheduler:
- Cinder Scheduler Filters : mặc định các filter
AvailabilityZoneFilter
,CapacityFilter
andCapabilitiesFilter
được sử dụng - Cinder Scheduler Weights : mặc định option
CapacityWeigher
được sử dụng.
- Cinder Scheduler Filters : mặc định các filter
Enable driver filter and weighing
- Để bật
Driver filter
sử dụng tùy chọnscheduler_default_filters = DriverFilter
trong file cinder.conf. để sử dụngGoodnessWeigher
sử dụng optionscheduler_default_weighers = GoodnessWeigher
[DEFAULT] .... scheduler_driver = cinder.scheduler.filter_scheduler.FilterScheduler scheduler_default_filters = DriverFilter
Định nghĩa Filter function và Goodness function.
- Có thể tự định nghĩa các filter và weigher . Các thuộc tính tự định nghĩa này sẽ được gửi kèm về request , sau đó sẽ làm việc với scheduler:
- Filter function là một chuỗi định nghĩa một phương trình mà quyết định xem backend nào được coi là backend tiềm năng trong scheduler.
- Goodness function là một chuỗi định nghĩa một phương trình mà sẽ đánh giá những backend tiềm năng (từ 0 là thấp nhất đến 100 là cao nhất, tốt nhất)
- Lưu ý: Driver filter và weighter sẽ sử dụng các giá trị mặc định cho filter và goodness function cho từng backend nếu như bạn không tự định nghĩa chúng. Do đó, nếu muốn kiểm soát hoàn toàn thì mỗi backend nên có một filter và goodness function trong file cinder.conf.
Các toán tử hỗ trợ trong filter và goodness funtion.
Operations | Type | |
---|---|---|
+, -, *, /, ^ | standard math | |
not, and, or, &, | , ! | logic |
>, >=, <, <=, ==, <>, != | equality | |
+, - | sign | |
x ? a : b | ternary | |
abs(x), max(x, y), min(x, y) | math helper functions |
- Nếu có lỗi trong cú pháp của filter và goodness function thì lỗi sẽ được hiển thị khi có yêu cầu tạo volume.
Tài liệu nguồn:
-
https://docs.openstack.org/cinder/train/admin/blockstorage-driver-filter-weighing.html
-
https://docs.openstack.org/cinder/train/configuration/block-storage/scheduler-filters.html