一个Openstack 系统中通常包括多个计算节点

root@controller:/etc/nova# nova hypervisor-list
+----+---------------------+
| ID | Hypervisor hostname |
+----+---------------------+
| 1 | compute |
| 2 | network |
| 3 | compute2 |
+----+---------------------+

这就产生了一个问题,当发出创建虚拟机请求时,应该把虚拟机创建到哪个计算节点上呢? nova-scheduler 服务即是实现这个调度工作的,调度算法通过filter 和weight 来实现。filter 用于选择可用的计算节点。weight 用于在可用的计算节点中选择一个最佳的节点。

filter

filter 在nova.conf 中配置,改动须要重新启动nova-scheduler 服务

默认的filter 为(截取icehouse版)

scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter,ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter

以下列出各个filter 的功能

RetryFilter: 剔除上传已经被尝试调度过的计算节点

AvailabilityZoneFilter:剔除那些AvailabilityZone 不满足要求的计算节点

ComputeFilter 剔除那些非活动的计算节点

ComputeCapabilitiesFilter 检查计算节点的其它属性

ImagePropertiesFilter 剔除那些硬件架构,Hypervisor,虚拟机模式等属性不满足磁盘镜像要求的节点

filter 类存放在nova/scheduler/filter  文件夹下全部的

root@controller:/usr/lib/python2.7/dist-packages/nova/scheduler/filters# ll *.pyc
-rw-r--r-- 1 root root 7207 Jul 15 09:33 affinity_filter.pyc
-rw-r--r-- 1 root root 2400 Jul 15 09:33 aggregate_image_properties_isolation.pyc
-rw-r--r-- 1 root root 2399 Jul 15 09:33 aggregate_instance_extra_specs.pyc
-rw-r--r-- 1 root root 1896 Jul 15 09:33 aggregate_multitenancy_isolation.pyc
-rw-r--r-- 1 root root 807 Jul 15 09:33 all_hosts_filter.pyc
-rw-r--r-- 1 root root 1588 Jul 15 09:33 availability_zone_filter.pyc
-rw-r--r-- 1 root root 2514 Jul 15 09:33 compute_capabilities_filter.pyc
-rw-r--r-- 1 root root 1763 Jul 15 09:33 compute_filter.pyc
-rw-r--r-- 1 root root 3671 Jul 15 09:33 core_filter.pyc
-rw-r--r-- 1 root root 1900 Jul 15 09:33 disk_filter.pyc
-rw-r--r-- 1 root root 2107 Jul 15 09:33 extra_specs_ops.pyc
-rw-r--r-- 1 root root 4003 Jul 15 09:33 image_props_filter.pyc
-rw-r--r-- 1 root root 2007 Jul 15 09:33 __init__.pyc
-rw-r--r-- 1 root root 1641 Jul 15 09:33 io_ops_filter.pyc
-rw-r--r-- 1 root root 2300 Jul 15 09:33 isolated_hosts_filter.pyc
-rw-r--r-- 1 root root 5435 Jul 15 09:33 json_filter.pyc
-rw-r--r-- 1 root root 2021 Jul 15 09:33 metrics_filter.pyc
-rw-r--r-- 1 root root 1521 Jul 15 09:33 num_instances_filter.pyc
-rw-r--r-- 1 root root 1497 Jul 15 09:33 pci_passthrough_filter.pyc
-rw-r--r-- 1 root root 3824 Jul 15 09:33 ram_filter.pyc
-rw-r--r-- 1 root root 1448 Jul 15 09:33 retry_filter.pyc
-rw-r--r-- 1 root root 9769 Jul 15 09:33 trusted_filter.pyc
-rw-r--r-- 1 root root 2237 Jul 15 09:33 type_filter.pyc

affinity_filter.py

这里文件中事实上有四个可用filter,都是关于亲和性的调度策略。分别例如以下:

DifferentHostFilter

创建虚拟机的同一时候能够指定一些虚拟机,要求新的虚拟机不能在这些虚拟机所在主机上创建。

说的简单一点,在host1上执行着vm1,要创建vm2。创建时指定了scheduler_hints->different_host=[vm1]。那么vm2就不会在host1上创建。

SameHostFilter

与上面的filter功能相反,假设创建时指定了scheduler_hints-> same_host=[vm1],那么vm2就能够创建在host1上。

SimpleCIDRAffinityFilter

假设指定了scheduler_hints-> build_near_host_ip,那么仅仅能在host1的管理IP网段内选择主机。

GroupAntiAffinityFilter

功能:指定scheduler_hints-> group_hosts=[host1, host2],那么虚拟机不能创建在这些host上。

core_filter.py

CoreFilter

功能:看host上的vcpu个数是否能满足创建虚拟机的instance_type中的vcpu个数。

依据CONF.cpu_allocation_ratio(默认是16)确定host上当前的vcpus_total。

disk_filter.py

DiskFilter

功能:看host上的disk大小是否能满足创建虚拟机的instance_type中的(root_gb + ephemeral_gb)。

计算disk总量时,会依据CONF.disk_allocation_ratio计算

ram_filter.py

RamFilter

AggregateRamFilter

同CoreFilter同样。

CONF.ram_allocation_ratio=1.5

image_props_filter.py

ImagePropertiesFilter

功能:看虚拟机image->properties中某些属性是否在host的capabilities->supported_instances内。

属性包含:architecture、hypervisor_type、vm_mode。假设image->properties中没有这些属性,则通过过滤;假设有这些属性,而host->capabilities->supported_instances没有,返回False。

io_ops_filter.py

IoOpsFilter

功能:依据主机的IO负载过滤。

IO负载由host->num_io_ops表示,与CONF.max_io_ops_per_host(默认是8)比較。

isolated_hosts_filter.py

IsolatedHostsFilter

功能:假设没有配置CONF.isolated_images,当前host不在CONF.isolated_hosts中,返回True。假设虚拟机image_ref在CONF.isolated_images中,且host在CONF.isolated_hosts中,返回True。其它情况返回False。

測试filter

我的环境眼下启动两个计算节点,horizon中的虚拟机管理器能够看到,compue 上可用资源最多。理论应该创建到compue 上

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

虚拟机在同样计算节点

改动scheduler_default_filters=SameHostFilter

root@controller:/etc/nova# cat nova.conf
[DEFAULT]
scheduler_default_filters=SameHostFilter

或者在原有filter 前面加入 (规则从前到后优先)

scheduler_default_filters = SameHostFilter,RetryFilter, AvailabilityZoneFilter, RamFilter,ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter

运行创建虚拟机,加入參数same_host=想要指定的虚拟机,6c16999c-e94a-4947-8489-1333d28862f8  为

在network 节点。

root@controller:/etc/nova# nova show 6c16999c-e94a-4947-8489-1333d28862f8
+--------------------------------------+------------------------------------------------------------+
| Property | Value |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-SRV-ATTR:host | network |
| OS-EXT-SRV-ATTR:hypervisor_hostname | network |
| OS-EXT-SRV-ATTR:instance_name | instance-00000135 |
| OS-EXT-STS:power_state | 1 |
| OS-EXT-STS:task_state | - |
| OS-EXT-STS:vm_state | active |
| OS-SRV-USG:launched_at | 2015-12-25T03:30:35.000000 |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| config_drive | |
| created | 2015-12-25T03:30:29Z |
| flavor | m1 (bbf0b691-2f6a-4781-885c-26511f3f9318) |
| hostId | 98b5cba71c2e72f61d0acb210bf7cc01a6ed8a3facabd5b6f4560f2a |
| id | 6c16999c-e94a-4947-8489-1333d28862f8 |
| image | cirros-0.3.2-x86_64 (d5aab3ac-74b5-4d53-91ee-92a22b48bb61) |
| key_name | admin-key |
| metadata | {} |
| name | vm2 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| sharednet1 network | 192.168.12.116 |
| status | ACTIVE |
| tenant_id | 2996e46c2519415d8de2b141d6c607ba |
| updated | 2015-12-25T03:30:35Z |
| user_id | 84ad09b97a7f41d08afdf20afee08daf |
+--------------------------------------+------------------------------------------------------------+

nova boot --flavor m1 --image cirros-0.3.2-x86_64  --nic net-id=d691ca44-6ec4-4118-b8dd-76f363a2b53f   --security-group default --key-name admin-key vm5 --hint same_host=6c16999c-e94a-4947-8489-1333d28862f8

root@controller:~# source admin-openrc.sh
root@controller:~# nova boot --flavor m1 --image cirros-0.3.2-x86_64 --nic net-id=d691ca44-6ec4-4118-b8dd-76f363a2b53f --security-group default --key-name admin-key vm5 --hint same_host=6c16999c-e94a-4947-8489-1333d28862f8
+--------------------------------------+------------------------------------------------------------+
| Property | Value |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-SRV-ATTR:host | - |
| OS-EXT-SRV-ATTR:hypervisor_hostname | - |
| OS-EXT-SRV-ATTR:instance_name | instance-0000013c |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | - |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| adminPass | LHdQ245ZKktd |
| config_drive | |
| created | 2015-12-25T07:27:38Z |
| flavor | m1 (bbf0b691-2f6a-4781-885c-26511f3f9318) |
| hostId | |
| id | e9863fe9-effc-475a-b1c1-5925080c8399 |
| image | cirros-0.3.2-x86_64 (d5aab3ac-74b5-4d53-91ee-92a22b48bb61) |
| key_name | admin-key |
| metadata | {} |
| name | vm5 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| status | BUILD |
| tenant_id | 2996e46c2519415d8de2b141d6c607ba |
| updated | 2015-12-25T07:27:39Z |
| user_id | 84ad09b97a7f41d08afdf20afee08daf |
+--------------------------------------+------------------------------------------------------------+
root@controller:~# nova show e9863fe9-effc-475a-b1c1-5925080c8399
+--------------------------------------+------------------------------------------------------------+
| Property | Value |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-SRV-ATTR:host | network |
| OS-EXT-SRV-ATTR:hypervisor_hostname | network |
| OS-EXT-SRV-ATTR:instance_name | instance-0000013c |
| OS-EXT-STS:power_state | 1 |
| OS-EXT-STS:task_state | - |
| OS-EXT-STS:vm_state | active |
| OS-SRV-USG:launched_at | 2015-12-25T07:27:46.000000 |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| config_drive | |
| created | 2015-12-25T07:27:38Z |
| flavor | m1 (bbf0b691-2f6a-4781-885c-26511f3f9318) |
| hostId | 98b5cba71c2e72f61d0acb210bf7cc01a6ed8a3facabd5b6f4560f2a |
| id | e9863fe9-effc-475a-b1c1-5925080c8399 |
| image | cirros-0.3.2-x86_64 (d5aab3ac-74b5-4d53-91ee-92a22b48bb61) |
| key_name | admin-key |
| metadata | {} |
| name | vm5 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| sharednet1 network | 192.168.12.122 |
| status | ACTIVE |
| tenant_id | 2996e46c2519415d8de2b141d6c607ba |
| updated | 2015-12-25T07:27:46Z |
| user_id | 84ad09b97a7f41d08afdf20afee08daf |
+--------------------------------------+------------------------------------------------------------+
root@controller:~#

查看,新虚拟机又创建到了network 上面


创建虚拟机中的nova-scheduler 调度配置的更多相关文章

  1. linux虚拟机中FTP本地用户模式配置流程

    1.首先在自己虚拟机中安装vsftpd服务,可以先去yum中下载(当然你要有本地yum仓库) 输入命令: yum  install  vsftpd 下载完成之后打开vsftpd服务 输入命令:syst ...

  2. nova scheduler filters 配置

    scheduler_driver = nova.scheduler.filter_scheduler.FilterScheduler scheduler_default_filters = Avail ...

  3. (4) Spring中定时任务Quartz集群配置学习

    原 来配置的Quartz是通过spring配置文件生效的,发现在非集群式的服务器上运行良好,但是将工程部署到水平集群服务器上去后改定时功能不能正常运 行,没有任何错误日志,于是从jar包.JDK版本. ...

  4. 创建虚拟机流程nova

    这篇博文借鉴于http://www.cnblogs.com/yjbjingcha/p/6977741.html,感谢博友提供. 本文试图具体地描写叙述openstack创建虚拟机的完整过程.从用户发起 ...

  5. 虚拟机创建流程中neutron代码分析(一)

    前言: 在openstack的学习当中有一说法就是网络占学习时间的百分之七十.这个说法或许有夸大的成分,但不可否认的是openstack中的 网络是及其重要的部分,并且难度也是相当大.试图通过nova ...

  6. nova创建虚拟机源码分析系列之三 PasteDeploy

    上一篇博文介绍WSGI在nova创建虚拟机过程的作用是解析URL,是以一个最简单的例子去给读者有一个印象.在openstack中URL复杂程度也大大超过上一个例子.所以openstack使用了Past ...

  7. OpenStack虚拟机创建过程中镜像格式的的变化过程

    Glance用来作为独立的大规模镜像查找服务,当它与Nova和Swift配合使用时,就为OpenStack提供了虚拟机镜像的查找服务,像所有的OpenStack项目一样,遵循以下设计思想: 基于组件的 ...

  8. nova创建虚拟机的详细过程

    Nova 创建虚拟机详细过程    

  9. 虚拟机中CentOS 7下PHP环境配置

    为了简单起见,虚拟机网卡设置为桥接模式 1.yum install  httpd php 2.yum install mariadb 3.启动mariadb systemctl start maria ...

随机推荐

  1. day02_12/12/2016_bean的实例化之普通工厂方式

  2. JS——sort

    1.a-b升序 <script> var arr = [2, 3, 1, 5, 0]; function compare(a, b) { return a - b; } console.l ...

  3. CSS——ul(demo)

    1.ul本身是块级元素,在实际运用中,我们不设定宽高的话,它的宽就是父元素的宽,它的高就是内容撑起来的高度. 2.在局部布局的时候,我们可以不用设定ul的宽度和高度,直接使用margin来巧妙布局. ...

  4. 3星|《腾讯产业森林:AI时代的创业密码》:后半部分是较详细的创业指南,前面泛泛介绍腾讯、AI

    腾讯产业森林:AI时代的创业密码 前半部分泛泛介绍腾讯对创业者的支持,腾讯支持的创业项目的案例.AI的一些基本介绍,后半部分是比较详细的写给创业者的各阶段行动与选择的指南. 总体评价3星,有一些参考价 ...

  5. Centos 安装配置iscsi

    在测试oracle rac的时候用iscsi来模拟磁阵的(真的磁阵需要多路径软件),简单的记录下 #scsi server yum install scsi-target-utils service ...

  6. Haproxy 【转载】

    一.HAProxy简介 (1)HAProxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProx ...

  7. B.2 列表

    从很多方面来说,列表是最简单也最自然的集合类型.框架中包含很多实现,具有各种功能 和性能特征.一些常用的实现在哪里都可以使用,而一些较有难度的实现则有其专门的使用场景. B.2.1  List< ...

  8. [LUOGU] 4933 大师

    \(Orz\) \(ljt12138!\) 设状态\(f[i][j]\)表示以\(i\)为结尾,公差为\(j\)的长度大于\(1\)的数列有几个. 然后转移方程就很好想了. \(k=H[i]-H[j] ...

  9. 7.2.1 代码测试 doctest

    Python标准库 doctest 可以搜索程序中类似于交互式Python代码的文本片段,并运行这些交互式代码来验证是否符合预期结果和功能,常用于Python程序的模块测试. 使用doctest模块测 ...

  10. 为什么有些图像在显示前要除以255?(zhuan)

    imshow是用来显示图片的,如 >> I = imread('moon.tif'); >> figure,imshow(I); 而有时为了数据处理,要把读取的图片信息转化为更 ...