一个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. Elasticsearch集群状态健康值处于red状态问题分析与解决(图文详解)

      问题详情 我的es集群,开启后,都好久了,一直报red状态??? 问题分析 有两个分片数据好像丢了.   不知道你这数据怎么丢的. 确认下本地到底还有没有,本地要是确认没了,那数据就丢了,删除索引 ...

  2. 学习c语言的感想

    其实个人认为无论学习什么语言,最重要的是掌握习编程思想,然而C语言一种学习编程思想的基础语言.所以,C语言的重要性不言而喻. 一.课本 无论用的是什么书,要学好C语言,把书上的每一个例题.习题的代码读 ...

  3. MVC系列学习(十四)-路由规则及路由调试工具

    1.本次学习的代码,比较简单,就是在路由配置文件中,添加一个路由信息:同时添加一个相应的控制器及视图 控制器中代码如下 即有两条路由匹配规则,一个Kim控制器,该控制器下有个Index的方法,和一个对 ...

  4. Laravel5.1学习笔记16 数据库2 查询构造器(这个不用看,不如用EloquentORM)

    Introduction Retrieving Results Aggregates Selects Joins Unions Where Clauses Advanced Where Clauses ...

  5. (转)44 道 JavaScript 难题

    JavaScript Puzzlers原文 1. ["1", "2", "3"].map(parseInt)   答案:[1, NaN, N ...

  6. ionic2\ionic3 自定义弹窗

    ionic2及ionic3没有了popup及 其templateUrl属性 那我们如何对弹窗里加入自定义元素 从而达到自定义弹窗样式 那么就可以通过写h5页面来实现 自定义弹窗效果: 写个H5的弹窗及 ...

  7. java攻城师之路--复习java web之request_respone

    Servlet技术 两条主线1.HTTP协议 2.Servlet生命周期 init() 方法中参数 ServletConfig 对象使用通过ServletConfig 获得 ServletContex ...

  8. 仿iphone动态萤火虫锁屏应用安卓源码

    该源码是仿iphone动态萤火虫锁屏应用源码,源码SkyLock,这也是最近弄了一款锁屏,苦于市场百般阻拦与锁屏应用数量实在太多,于是将它拿出来开源:废话不多说,希望大家能够希望,更多说明请看下面的吧 ...

  9. 从CSDN转到cnblogs了

    之前一直用的CSDN的博客,网站卡慢经常出问题,发布文章要审核,连修改几个标点符号也要审核,这些我都忍了,毕竟之前发的文章舍不得弃掉. 现在竟然无故封禁我的博客?请问我写的都是技术文章,有哪点违反规定 ...

  10. c#仿照qq登录界面编辑框内容操作

    using System; using System.Drawing; using System.Windows.Forms; namespace 案例演示 { public partial clas ...