与Nova中的调度服务nova-scheduler类似,Cinder的调度服务cinder-scheduler也用于选择一个合适的节点,不过不同的是nova-scheduler选择的是计算节点来响应用户有关虚拟机生命周期的请求,而cinder-scheduler选择的是cinder-volume节点来处理用户有关Volume周期的请求。
同样,cinder-scheduler选择的方式也可以有很多种,为了便于之后的扩展,Cinder将一个调度器必须实现的接口提取出来成为cinder.scheduler.driver.Scheduler,只要继承类SchedulerDriver并实现其中的接口,就可以实现一个自己的调度器。
# cinder / scheduler / driver.py
class Scheduler(object):
"""The base class that all Scheduler classes should inherit from."""
目前,Cinder中只实现了一个调度器FilterScheduler,但是历史上曾经存在SimpleScheduler(选择剩余空间最多的Host)和ChanceFilter(随机挑选满足条件的Host)两个调度器,但是它们现在已经被利用FilterScheduler的框架重新实现。
# cinder / scheduler / filter_scheduler.py
class FilterScheduler(driver.Scheduler):
&