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.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
更多的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-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日志 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