Nova Cell

Nova Cell V2 詳解?


現在 ,OpenStack 在控制平面上的性能瓶頸主要在 Message Queue 和 Database 。 尤其是 Message Queue , 隨著計算節點的增加 , 性能變的越來越差 。 為了應對這種情況 , Nova 很早之前提出來 nova-cell ( 以下以 cellv1 代替 ) 的解決方案 。 目的是在把大的 OpenStack 集群分成小的單元 , 每個單元有自己的 Message Queue 和 Database。 以此來解決規模增加時引起的性能問題 。 而且不會向 Region 那樣 , 把各個集群獨立運行 。 在 cell 里面 ,Keystone、Neutron、Cinder、Glance 等資源還是共享的 。

cell v1
cellv1 最初的想法很好 , 但是局限于早期 nova 的架構 , 硬生生的加個 nova-cell 服務來在各個 cell 間傳遞消息 , 使得架構更加復雜 。 以下是 cellv1 的架構:

\
cell v1 的問題在于 :
?1、一直以來 ,cell v1 被標記為實驗性質
?2、相關的測試很少 , 而且也沒有 v1 + neutron 的測試
?3、現在來說功能已經凍結 , 不會加入新的功能
?4、不嚴重的 Bug 根本不會去修復
?5、使用案例很少 。 現在經常提到的使用案例也只有 CERN( 歐洲原子能研究中心 )。 一般規模下 , 完全沒有必要搭建 cell v1
所以 , 現在進行部署的話 , 如果用 cell, 就盡量使用 cell v2 吧 。

cell v2
cell v2 自 Newton 版本引入 ,Ocata 版本變為必要組件 。 以后默認部署都會初始化一個單 cell 的架構 。
cell v2 的架構圖如下 , 看著比 cell v1 清爽不少 。
\

從架構圖上 , 可以看到 :
1、api 和 cell 有了明顯的邊界 。 api 層面只需要數據庫 , 不需要 Message Queue。
2、nova-api 現在依賴 nova_api 和 nova_cell0 兩個數據庫 。
3、nova-scheduler 服務只需要在 api 層面上安裝 ,cell 不需要參數調度 。 這樣實現了一次調度就可以確定到具體在哪個 cell 的哪臺機器上啟動
4、這里其實依賴 placement 服務 , 以后的文章會提到
5、cell 里面只需要安裝 nova-compute 和 nova-conductor 服務 , 和其依賴的 DB 和 MQ
6、所有的 cell 變成一個扁平架構 。 比之前的多層父子架構要簡化很多 。
7、api 上面服務會直接連接 cell 的 MQ 和 DB, 所以不需要類似 nova-cell 這樣子的額外服務存在 。 性能上也會有及大的提升

nova_api & nova_cell0
自 Newton 版本 ,nova 就一直拆分 nova 數據庫 , 為 cell v2 做準備 。 把一些全局數據表從 nova 庫搬到了 nova_api, 下面是現在 nova_api 里面的所有表 。
\

可以看到像 flavor, instance groups, quota 這些表已經遷移了過來 。
nova_cell0 數據庫的 schema 和 nova 是一樣的 , 他存在的只要用途是 : 當 instance 調度失敗時 , instance 的信息不屬于任何一個 cell, 所以放到 cell0 上面 。 因此里面的數據并不是太重要 。

Cell Related Tables
Cell 相關的數據庫表都在 nova_api 里面 , 包括 cell_mappings, host_mappings, instance_mappings。 其表結構如下 :
\

1、cell_mappings 表 cell 的 Database 和 Mesage Queue 的連接 。 用于和子 cell 通訊
2、host_mappings 是用于 nova-scheduler, 可以確認分配到的機器 。 這里其實也有一個坑 , 之前 nova-compute 啟動起來 , 就可以直接使用了 ,cell v2 之后 , 就需要手動運行 nova-manage cell_v2 discover_host , 把 host mapping 到 cell_mappings 表里面 , 那臺計算節點才會加入到調度中 。
3、instance_mappings 表里有所有 instance id, 這樣在查詢 instance 時 , 就可以從這個表里查到他所在的 cell, 然后直連 cell 拿到 instance 具體信息 。

cell 流程
\

當想要獲取一個機器的詳細信息時 :
1.nova-api 先從 instance_mappings 表拿到 instance 的 cell_id
2.再從 cell_mappings 表拿到所在 cell 的 DB connection
3.直接連接 cell 的 DB 拿到機器的詳細信息

\

當要重啟一臺機器時 :
1.nova-api 先從 instance_mappings 表里拿到 instance 所在的 cell_id
2.從 cell_mappings 里拿到所在 cell 的 message queue 連接
3.nova-api 直接給 mq 的相關隊列發重啟機器的消息
\

當新建機器時 :
1.nova-api 接到用戶的請求信息 , 先轉發到 nova-scheduler 進行調度 , nova-scheduler 通過 placement service, 直接確定分配到哪臺機器上
2.nova-api 把 instance 的信息存入 instance_mappings 表
3.nova-api 把機器信息存到目標 cell 的 database
4.nova-api 給 cell 的 message queue 的相關隊列發消息 , 啟動機器


Cell v2 的優點
?數據庫和消息隊列作為 nova 的一等公民 。
?在 cell 的數據庫里沒有冗余數據 , 所有共享數據都在 nova-api 中
?全局數據和 cell 數據有一條清晰的界線
?非 cell 用戶很容易的就可以遷移到 cell v2 上面 。 不需要更改現在的部署架構
?cell v1 的用戶也可以遷移到 cell v2 上 。 只要手動建立起所有的 mapping, 關掉現在存在的 nova-cell 服務 , 清掉最上層 cell 的數據庫 。 但是最上層 cell 本質上和其它 cell 是不同的 。 所以需要調整架構
?增減 cell 變的十分簡單 , 而且在把某個 cell 加入之前 , 可以在其它環境進行測試

Cell v2 相關命令
因為 cell v2 完全靠 database 的操作為建立 , 所以也沒有相關的 api 接口 。 主要靠 nova-manage cell_v2 命令 。 詳細說明參見REF
nova-manage cell_v2
?
??? create_cell
??? delete_cell
??? list_cells
?
??? map_cell0
??? discover_hosts
??? simple_cell_setup
?
??? map_cell_and_hosts
??? map_instances
??? verify_instance


其它?
計算節點自動發現
上面提到了現在 nova-compute 服務上線后 , 不會自動加到 nova-api 的 host_mappings 里面 , 也就不會加到 nova-scheduler 的調度中 。 需要手動運行 nova-manage cell_v2 discover_hosts 命令 。 這顯示略顯繁瑣 。
在小型一些的環境上 , 推薦打開自動發現功能 , 就不用手動跑命令了 。
\

性能分析
為了拿到 instance 的詳細信息 , 需要查詢 nova_api 數據庫 , 相比之前要多查詢一次數據庫 ( 雖然是有三個表 , 但是可以用多表連接查詢 , 一次就可以拿到所有的結果 )。 但是一來數據相當少 , 而且很容易加上一層 cache, 并不會對性造成什么影響 。

Kolla?實現?
現在 Kolla 已經支持自動部署一個基本的 cell 環境 , 而且支持從沒有 cell 的 Newton 升級到有 cell 的 Ocata 版本 。

轉載于:https://www.cnblogs.com/zx-bob-123/p/8809362.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538922.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 通過WIFI狀態監聽廣播,判斷進入指定wifi范圍

原文地址:http://blog.csdn.net/kongxiuqi/article/details/52524500 --------------------------------------------- WIFI狀態變化會發送廣播,一些可用的廣播在WifiManger.java中可以看到。 廣播一:WIFI 狀態開關變化的監聽,en…

2018年度最佳網頁設計與開發教程

任何一個網站從開發到最終上線, 都是需要團隊協作且謹慎的一個過程,而實際中往往會遇到各類問題,所以網頁設計師通常需要扮演多種角色,除了掌握必備的網頁設計技能外,更應該對后期的開發流程及內容有所了解&#xff0c…

mysql_ping()函數的作用以及返回值的類型正確的是,[單選] mysql_ping()函數的作用以及返回值的類型正確的是:()...

[單選] mysql_ping()函數的作用以及返回值的類型正確的是:()更多相關問題中華田園犬,雄性,2歲,昨晚外出未歸,今晨發現患犬精神沉郁,呼吸急促,體溫39℃,左胸側壁中下部有創1884年新疆…

java 截取byte數組_2020年的秋招已經開始了!最新Java面試題大全(文末附參考答案)送給大家...

包含的模塊本文分為十九個模塊,分別是:Java 基礎、容器、多線程、反射、對象拷貝、Java Web 、異常、網絡、設計模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM共包含 208 道面…

MVP模式在Android項目中的使用

煩了在Activity中編寫太多的代碼,該app由我來主導。就選擇用MVP模式。 概述 MVP是模型(Model)、視圖(View)、主持人(Presenter)的縮寫,分別代表項目中3個不同的模塊。 模型&#…

運行時錯誤7內存溢出_C++程序運行時的內存模型

C程序在運行時會將內存劃分為4個區域:1代碼區:存放函數體的二進制代碼,由操作系統進行管理2全局區:存放程序的全局變量、靜態變量、常量3棧區:由編譯器進行自動分配和釋放,存放函數的參數值,局部…

php strip_tags 少,詳解PHP函數 strip_tags的用法不足之處

這篇文章主要介紹了詳解PHP函數 strip_tags 處理字符串缺陷bug的相關資料,需要的朋友可以參考下詳解PHP函數 strip_tags 處理字符串缺陷bugPHP 函數 strip_tags() 是一個常用函數,該函數可以剝去字符串中的 HTML、XML 以及 PHP 的標簽。極大方便了對字符串的操作&am…

玩轉Android之MVVM開發模式實戰,炫酷的DataBinding!

原文:http://blog.csdn.net/u012702547/article/details/52077515 --------------------------------------------------------- MVP可以結合android的DataBinding -------------------------以下轉載--------------- C# 很早就有了MVVM的開發模式,An…

打造一款便攜版的Sublime Text

https://segmentfault.com/a/1190000000707661 https://www.cnblogs.com/52cik/p/sublime-diy.html 直接安裝Sublime Text,不要打開 大家可以參照上文提到的《Sublime Text 全程指引》中的步驟去進行安裝。我這里使用的是Sublime Text 2,其實3也是一樣的…

confluence創建頁面加載緩慢_樹莓派4B使用docker安裝confluence

說明confluence是一個專業的企業知識管理與協同軟件,可以用于構建企業wiki。通過它可以實現團隊成員之間的協作和知識共享。現在大多數公司都會部署一套confluence,用作內部wiki。另外confluence也可以作為個人的知識管理工具來用,只需要花10…

python用map提取一個數的個十百位數_如何使用python中的map函數?

我們在使用python過程中,為了避免錯誤刪除,會選擇做好一個序列后可以插入另外的序列中做為新序列的一部分內容。方便完成一些復雜的工程或多個片段分別編輯后再串成一個完整工程的操作。之前小編向大家介紹了在序列中起到累計作用的reduce函數(https://w…

matlab粒子加速器仿真,粒子群算法優化PID參數 仿真不出結果 程序如下

用的是《MATLAB智能算法30個案例分析》中的程序1.文件名為PSO_PID.mfunction z PSO_PID(x)assignin(base,Kp,x(1)); % 粒子群依次賦值給Kp 這部分運行結果> PSO_PIDassignin(base,Ki,x(2)); …

CentOS5、6的啟動流程

CentOS5/6的啟動流程啟動流程畫了張圖,看著更清晰些: (centos7的啟動流程變化挺大的,這部分待補充)補充(/etc/rc.d/rc.local 不屬于任何服務,為特殊文件,可將不能定義為服務又想開機運行的命令定義在此文件中)添加自定義服務:[rootel5 init.d]# vi /etc/init.d/testsrv #!/bin…

Spark交互式分析平臺Apache Zeppelin的安裝

Zeppelin介紹 Apache Zeppelin提供了web版的類似ipython的notebook,用于做數據分析和可視化。背后可以接入不同的數據處理引擎,包括Spark, Hive, tajo等,原生支持Scala, Java, shell, markdown等。它的整體展現和使用形式和Databricks Cloud是…

win7 php zend,win7系統打開WZend Studio PHP出錯的解決方法

很多朋友安裝win7系統后,在使用的過程中會遇到win7系統打開WZend Studio PHP出錯的情況,可能有很多用戶還是不能自己處理win7系統打開WZend Studio PHP出錯的問題,其實簡單的來說處理win7系統打開WZend Studio PHP出錯的問題只需要按照 1、在…

9個元素換6次達到排序序列_C語言必學的12個排序算法:希爾排序(第3篇)

基本思想希爾排序(Shells Sort),以發明人命名,又稱為縮小增量排序,也是一種插入排序算法。主要思想:直接插入排序算法時間和待排數據有關,其平均復雜度是O(n^2),但是在待排數據已經有…

java快捷鍵禁用_pycharm 掌握這些快捷鍵,你就是大神!!

最重要的快捷鍵1. ctrlshiftA:萬能命令行 2. shift兩次:查看資源文件新建工程第一步操作1. module設置把空包分層去掉,compact empty middle package 2. 設置當前的工程是utf-8,設置的Editor-->File Encodings-->全部改成utf-8,注釋1. ctrl/:單行注釋光標操作1. ctrlalte…

如何在 5 分鐘內讀懂區塊鏈的架構思維?

作為入門者,如何在最短的時間了解區塊鏈技術,區塊鏈思維,以及比特幣的金融原理呢?本文嘗試從比特幣的架構設計思維出發,讓人從宏觀上搞清楚區塊鏈的技術本質。 本文授權轉載自阿里技術 作者 | 鄭吉 區塊鏈不是一種技術…

魅族Flyme5.x以上系統INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

用android studio 連接魅族flyme5.0安裝app,報 Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 解決方法: 1、進入手機管家 2、權限管理 3、usb安裝管理 4、關閉 完美解決問題

php取key的value值,獲取數組中key和value的值

方法1:PHP 4 引入了 foreach 結構,和 Perl 以及其他語言很像。這只是一種遍歷數組簡便方法。foreach 僅能用于數組,當試圖將其用于其它數據類型或者一個未初始化的變量時會產生錯誤。有兩種語法,第二種比較次要但卻是第一種的有用…