Nova(二):Nova组件详解+日志解析:nova-api、nova-conductor

nova-api

复制代码
nova-api 是整个 Nova 组件的门户,所有对 Nova 的请求都首先由 nova-api 处理。nova-api 向外界暴露若干 HTTP REST API 接口 在 keystone 中我们可以查询 nova-api 的 endponits。

Nova-api 对接收到的 HTTP API 请求会做如下处理:
    1. 检查客户端传入的参数是否合法有效
    2. 调用 Nova 其他子服务的处理客户端 HTTP 请求
    3. 格式化 Nova 其他子服务返回的结果并返回给客户端

只要是跟虚拟机生命周期相关的操作,nova-api 都可以响应。
nova-api
复制代码
复制代码
nova-api.log
[root@controller nova]# cat nova-api.log | grep "req-bd8574b8-4331-4434-9d57-ca675bb74ce6"
2021-11-21 21:19:27.690 106092 DEBUG nova.api.openstack.wsgi [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] Action: 'action', calling method: <bound method ServersController._stop_server of <nova.api.openstack.compute.servers.ServersController object at 0x7fe6428ec710>>, body: {"os-stop": null} _process_stack /usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py:520
#接收到api请求
2021-11-21 21:19:27.697 106092 DEBUG oslo_concurrency.lockutils [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] Lock "4809eaf7-095b-41d7-a897-4a885c87aca9" acquired by "nova.context.get_or_set_cached_cell_and_set_connections" :: waited 0.000s inner /usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py:327
2021-11-21 21:19:27.697 106092 DEBUG oslo_concurrency.lockutils [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] Lock "4809eaf7-095b-41d7-a897-4a885c87aca9" released by "nova.context.get_or_set_cached_cell_and_set_connections" :: held 0.000s inner /usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py:339
2021-11-21 21:19:27.723 106092 DEBUG nova.compute.api [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] [instance: b78ce7ba-268d-40dd-88c8-4b516e14e4a3] Going to try to stop instance force_stop /usr/lib/python2.7/site-packages/nova/compute/api.py:2442
#/usr/lib/python2.7/site-packages/nova/compute/api.py中force_stop()方法日志,该方法中将会调用self.compute_rpcapi.stop_instance()方法,本质是将发送stop_instance操作到compute队列中。
#详见日志与源码: https://www.cnblogs.com/AllenWoo/p/15558532.html
2021-11-21 21:19:27.994 106092 DEBUG nova.objects.instance [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] Lazy-loading 'flavor' on Instance uuid b78ce7ba-268d-40dd-88c8-4b516e14e4a3 obj_load_attr /usr/lib/python2.7/site-packages/nova/objects/instance.py:1091
2021-11-21 21:19:28.018 106092 DEBUG nova.objects.instance [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] Lazy-loading 'info_cache' on Instance uuid b78ce7ba-268d-40dd-88c8-4b516e14e4a3 obj_load_attr /usr/lib/python2.7/site-packages/nova/objects/instance.py:1091
2021-11-21 21:19:28.098 106092 ERROR oslo.messaging._drivers.impl_rabbit [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] [52d3862d-7806-4f44-9fdd-61c67199d82f] AMQP server on 192.168.1.21:5672 is unreachable: [Errno 32] Broken pipe. Trying again in 1 seconds.: error: [Errno 32] Broken pipe
2021-11-21 21:19:29.110 106092 INFO oslo.messaging._drivers.impl_rabbit [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] [52d3862d-7806-4f44-9fdd-61c67199d82f] Reconnected to AMQP server on 192.168.1.21:5672 via [amqp] client with port 57214.
2021-11-21 21:19:29.120 106092 ERROR oslo.messaging._drivers.impl_rabbit [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] [c19249b4-31ca-4e23-bbc6-66b191a8549a] AMQP server on 192.168.1.21:5672 is unreachable: [Errno 32] Broken pipe. Trying again in 1 seconds.: error: [Errno 32] Broken pipe
2021-11-21 21:19:30.131 106092 INFO oslo.messaging._drivers.impl_rabbit [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] [c19249b4-31ca-4e23-bbc6-66b191a8549a] Reconnected to AMQP server on 192.168.1.21:5672 via [amqp] client with port 57216.
2021-11-21 21:19:30.133 106092 INFO nova.api.openstack.requestlog [req-bd8574b8-4331-4434-9d57-ca675bb74ce6 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] 192.168.1.21 "POST /v2.1/f911df6b22d54d34b716efd7a97edf92/servers/b78ce7ba-268d-40dd-88c8-4b516e14e4a3/action" status: 202 len: 0 microversion: 2.1 time: 2.771891
nova-api.log
复制代码

 更多的api解析详见“Nova(三):Nova组件详解+日志解析:nova-compute”中,实现 instance 生命周期的管理

nova-conductor

复制代码
nova-conductor(用于访问数据库)
nova-compute 需要获取和更新数据库中 instance 的信息。但 nova-compute 并不会直接访问数据库,而是通过 nova-conductor 实现数据的访问。
这样做有两个显著好处:
    1.更高的系统安全性:在 OpenStack 的早期版本中,nova-compute 可以直接访问数据库,但这样存在非常大的安全隐患。 因为 nova-compute 这个服务是部署在计算节点上的,为了能够访问控制节点上的数据库,就必须在计算节点的 /etc/nova/nova.conf 中配置访问数据库的连接信息
    2.更好的系统伸缩性:nova-conductor 将 nova-compute 与数据库解耦,这种松散的架构允许配置多个 nova-conductor 实例。 在一个大规模的 OpenStack 部署环境里,管理员可以通过增加 nova-conductor 的数量来应对日益增长的计算节点对数据库的访问。
nova-conductor(用于访问数据库)
复制代码

 nova-scheduler

复制代码
nova-scheduler;nova-scheduler的调度原理;配置nova-scheduler;filter过滤器介绍;Weight权重
=================================================================================================================
nova-scheduler
OpenStack在创建Instance时,不能直接指定CPU、内存、磁盘的空间与数量,而是指定flavor(实例类型)
    Flavor 主要定义了 VCPU,RAM,DISK 和 Metadata 这四类
    编辑flavors实例类型:admin---compute---flavors
---------------------------------------------------------------------------------------
nova-scheduler的调度原理:(调度过程分为两步)
    1.通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)
    2.通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。
---------------------------------------------------------------------------------------
配置nova-scheduler:
    在 /etc/nova/nova.conf 中,nova 通过 scheduler_driver,scheduler_available_filters 和 scheduler_default_filters 这三个参数来配置 nova-scheduler。
    
    scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler        #配置调度器;Filter scheduler是 nova-scheduler默认的调度器
    scheduler_available_filters = nova.scheduler.filters.all_filters        #配置过滤器
    scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, DiskFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter
        参数scheduler_available_filters、scheduler_default_filters是用于配置过滤器的
        Filter scheduler 需要执行调度操作时,会让 filter 对计算节点进行判断,filter 返回 True 或 False。Nova.conf 中的 scheduler_available_filters 选项用于配置 scheduler 可用的 filter,默认是所有 nova 自带的 filter 都可以用于滤操作。
        感觉根据参数名字,感觉此处把2个参数的功能写反了。。。。
---------------------------------------------------------------------------------------
filter过滤器介绍:
    RetryFilter:刷掉之前已经调度过的节点。
        例如某次调度选择了节点A,但是操作时,节点A失败了;此时会重新进行调度,节点A仍然会入选,此时通过RetryFilter过滤掉上一次选择的节点A
    AvailabilityZoneFilter:将不属于指定 Availability Zone 的计算节点过滤掉。
    RamFilter:将不能满足 flavor 内存需求的计算节点过滤掉。
        OpenStack 在计算节点可用内存时允许 overcommit(超载、过载、超卖);超过的程度是通过 nova.conf 中 ram_allocation_ratio 这个参数来控制的,默认值为 1.5
    DiskFilter:将不能满足 flavor 磁盘需求的计算节点过滤掉。
        Disk 允许 overcommit,通过 nova.conf 中 disk_allocation_ratio 控制,默认值为 1
    CoreFilter:
        将不能满足 flavor vCPU 需求的计算节点过滤掉。
        vCPU 允许 overcommit,通过 nova.conf 中 cpu_allocation_ratio 控制,默认值为 16
    ComputeFilter:保证只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。
        ComputeFilter 显然是必选的 filter。
    ComputeCapabilitiesFilter:根据计算节点的特性来筛选。
    ImagePropertiesFilter:根据所选 image 的属性来筛选匹配的计算节点。
    ServerGroupAntiAffinityFilter:尽量将 Instance 分散部署到不同的节点上。
    ServerGroupAffinityFilter:尽量将 instance 部署到同一个计算节点上
---------------------------------------------------------------------------------------
Weight权重:
    Scheduler 会对每个计算节点打分,得分最高的获胜。 打分的过程就是 weight
    目前 nova-scheduler 的默认实现是根据计算节点空闲的内存量计算权重值: 空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上。
nova-scheduler;nova-scheduler的调度原理;配置nova-scheduler;filter过滤器介绍;Weight权重
复制代码

 

复制代码
nova-scheduler日志;nova-scheduler日志示例
=========================================================================
nova-scheduler日志
    nova-scheduler 的日志 /opt/stack/logs/n-sch.log(非 devstack 安装其日志在/var/log/nova/nova-scheduler.log)
    
    要显示 DEBUG 日志,
        1.在 /etc/nova/nova.conf 中打开 debug 选项;
        2.重启服务systemctl restart openstack-nova-scheduler
    https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587839&idx=1&sn=93f155405b8485ab9bccb65941340a67&chksm=8d308166ba470870de70fefb0fa2f35da7933fbcdf45aad81e36084d5e14253749b618628c7c&scene=21#wechat_redirect

-------------------------------------------------------------------------------------------------------------------
nova-scheduler的filters日志:
    2021-11-14 21:40:36.611 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Starting with 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:70
    2021-11-14 21:40:36.612 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filter RetryFilter returned 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104
    2021-11-14 21:40:36.612 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filter AvailabilityZoneFilter returned 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104
    2021-11-14 21:40:36.613 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filter ComputeFilter returned 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104
    2021-11-14 21:40:36.613 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filter ComputeCapabilitiesFilter returned 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104
    2021-11-14 21:40:36.614 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filter ImagePropertiesFilter returned 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104
    2021-11-14 21:40:36.615 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filter ServerGroupAntiAffinityFilter returned 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104
    2021-11-14 21:40:36.615 33362 DEBUG nova.filters [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filter ServerGroupAffinityFilter returned 2 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104


nova-scheduler的filter_scheduler日志:
    2021-11-14 21:40:36.616 33362 DEBUG nova.scheduler.filter_scheduler [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Filtered [(compute23, compute23) ram: 9306MB disk: 114688MB io_ops: 0 instances: 0, (compute22, compute22) ram: 9306MB disk: 114688MB io_ops: 0 instances: 0] _get_sorted_hosts /usr/lib/python2.7/site-packages/nova/scheduler/filter_scheduler.py:443
    2021-11-14 21:40:36.617 33362 DEBUG nova.scheduler.filter_scheduler [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] Weighed [WeighedHost [host: (compute23, compute23) ram: 9306MB disk: 114688MB io_ops: 0 instances: 0, weight: 3.0], WeighedHost [host: (compute22, compute22) ram: 9306MB disk: 114688MB io_ops: 0 instances: 0, weight: 3.0]] _get_sorted_hosts /usr/lib/python2.7/site-packages/nova/scheduler/filter_scheduler.py:462
    2021-11-14 21:40:36.981 33362 DEBUG nova.scheduler.filter_scheduler [req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default] [instance: e1fe6e4c-bb2b-489e-b370-83a508710f7d] Selected host: (compute23, compute23) ram: 9306MB disk: 114688MB io_ops: 0 instances: 0 _consume_selected_host /usr/lib/python2.7/site-packages/nova/scheduler/filter_scheduler.py:354
nova-scheduler日志;nova-scheduler日志示例
复制代码

 

posted @   雲淡風輕333  阅读(1244)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示