樂視云計算基于OpenStack的IaaS實踐

本文作者岳龍廣,現在就職于樂視云計算有限公司,負責IaaS部門的工作。

  從開始工作就混在開源世界里,在虛擬化方面做過CloudStack/Ovirt開發,現在是做以OpenStack為基礎的樂視云平臺。所以對虛擬化情有獨鐘,也對虛擬化/云計算的未來充滿了信心。

  樂視網的所有服務是跑在樂視云上的,樂視云提供所有的底層支撐,包括IaaS/PaaS/Storage/CDN等等。為了帶給用戶更好的體驗,樂視網的服務到哪,樂視云的底層服務就會跟到哪。

  其中虛擬化是必不可少的部分,它的快速提供、按需分配、資源隔離顯得特別重要,但我們會遇到什么問題呢?

  今天的主要目的是分享我們在OpenStack項目中做的一部分工作,它們解決了內部的一些需求,也是實際經驗,希望對大家有所啟發。

  開始之前 首先感謝肖總、浩宇、victor等朋友給予的大力支持,感謝群友、技術愛好者的圍觀。

  很榮幸有這次機會來與大家做這個分享。

  提綱:

  1. IaaS Architecture

  2. OpenStack Deploy & QOS

  3. Multiple Regions

  4. LeTV LBaaS

  5. DEV

  樂視云計算IaaS的基本架構

  首先就是介紹一下樂視云計算基礎架構,再介紹OpenStack 網絡組件的部署,Multiple Regions是什么樣子的,更方便于使用的LeTV LBaaS,最后是開發/上線流程。

  樂視云計算 IaaS 采用了 OpenStack 和 Ceph 的開源方案,為樂視提供了云主機、虛擬網絡、云硬盤和 S3 對象存儲。

  

樂視云計算OpenStack實戰

?

  我們采用了 Ceph RBD 作為 統一存儲,OpenStack使用的Cinder,后端接的是Ceph,Glance也是共享Ceph存儲。

  我們同時還提供了 S3 對象存儲,用作于 CND 源站,存儲樂視網的視頻以及客戶需要分發的資源。

  S3 也是全國分布式部署,用戶可以就近上傳,再推送到北京。

  目前樂視云 OpenStack 規模已達 900 個物理節點,對象存儲的數據達到數PB。

  Neutron Deployment & QOS

  

樂視云計算OpenStack實戰

?

  我們 Havana 版本采用了 nova-network 的 FlatDHCP 類型。

  Icehouse 版本采用了 Neutron,再做足調研的前提下,我們對 Neutron 做了大量的減法,所用服務僅為 Neutron Server 和 OpenvSwitch Agent,控制節點部署 Neutron Server(with ML2 plugin),計算節點部署 OpenvSwitch Agent。

  沒有網絡節點,因而沒有用到DHCP Agent,L3 agent 和 Metadata Agent。 物理網絡使用 VLAN 做隔離。由于 Region 數量較多,每個 region 有不同的物理網絡(對應ml2_conf 中的 physical_network 字段),可以緩解 VLAN 數量的限制。

  私有云環境通過 Config Drive 配置虛擬機網卡和 metadata,Public IP 地址直接配在虛擬機網卡上,走物理路由器。無論是 nova-network 還是 neutron,我們都采用了穩定可靠的網絡,由于不存在網絡節點的單點問題,因此集群在滿足私有云的需求前提下,兼顧了可靠性、穩定性和可擴展性。

  優點:簡單穩定,性能更好,這也是業務最需要的,線上業務穩定、可用性是最重要的。

  缺點:犧牲了靈活性,和物理網絡的耦合度高

  為了防止某個虛擬機負載過高而影響其它虛擬機或者宿主機,我們做了了 CPU,Network 和 Disk IO 的 QoS,其中 Cpu 的 QoS 采用 cgroup 實現,虛擬機網卡的 QoS 通過 TC 實現。

  一開始我們采用了 cgroup 限制 Disk IO,由于 ceph 采用了 Non-host-block,故 cgroup 無法限制基于 ceph 的 Disk IO, 因此我們采用了 qemu io throttling。和 cgroup 相比,qemu io throttling 不僅僅能支持 non-host-block IO,同時限速的效果也更為出色,限速后,虛擬機的 IO 不會有太大抖動。

  此外,如果基于 cgroup 的 Disk IO 設置過小,會導致虛擬機刪除失敗。原因在于 qemu 提交的 Direct IO 必須完成后才能退出,使用過小的磁盤帶寬導致此動作需很長時間才能完成,導致 qemu 進程不能及時響應 libvirt 發出的 SIGTERM 和 SIGKILL 信號。

  而如果使用 qemu io throttling,則 io 會現在 qemu block layer 中加入 queue,此時 qemu 可以響應 libvirt 發出的信號而退出 。

  使用 qemu io throttling 需要需注意的是,當 Xfs 扇區大小為4k時,qemu 以 cache=none 方式啟動失敗

  Multiple Regions

  

樂視云計算OpenStack實戰

?

  由于樂視網業務的特殊性,為了讓用戶有更好的體驗,服務會分散部署在全球。

  樂視網的視頻服務需要 CDN 的支持,對于某些 CDN 節點,特別是國外,需要提供云主機等基礎設施服務。我們在國內外部署了有 20 多個集群,每個集群規模大小不一,其中最大的有上百個物理節點,這種需求也是極罕見的。

  這些節點既有 Havana 版本,又有 Icehouse 版本。每個集群均維護獨自的 Dashboard 和用戶信息,這就造成了以下四個問題:

  1. 用戶租戶信息不統一,不同集群的用戶信息不一致,對用戶使用有很大的影響

  2. 訪問不同的集群,用戶需要登錄不同的 IP

  3. 運維難度增加

  4. 維護 H 和 I 版本的 Keystone 和 Horizon

  隨著集群數量的不斷增加,上述問題將顯得越發突出,于是我們采用了 Multi-Region 方案,把這些集群做了統一的管理。

  部署方面, Keystone 和 Horizon 全局唯一,其中 Keystone 部署在公網,從而能夠被其它服務訪問,Horizon 部署在內網,從而能夠訪問其它集群。這是大概的分布圖:

  

樂視云計算OpenStack實戰

?

  LeTV LBaaS

  LeTV LBaaS,在原生LBaaS基礎上做了定制化,為了區分開來,就叫做LeTV LBaaS。

  樂視網的服務需要高可用、擴展性。Neutron LBaaS 看起來是個不錯的選擇,基本框架有了,但是還不能完全滿足業務需要。

  要想滿足業務需要,除了增強已有的接口,還有開發新的功能,比如HaProxy 冗余,本身服務健康檢查,以及與LVS整合。

  

樂視云計算OpenStack實戰

?

  這是實際業務架構,通過域名解析到LVS,LVS把流量負載到LB機器,在通過LB把流量負載到其他機器,實際提供服務的機器可以橫行擴展,不管是虛擬機還是物理機,甚至是容器。

  Letv LBaaS 可以輕松滿足業務需求,優勢如下:

  1. 不同業務之間的LB,互不干擾。Haproxy跑在各自的namespace里面

  2. Haproxy HA 冗余功能,保證服務的高可用

  3. 方便動態增加機器

  4. 與LVS整合

  DevOps & Community

  

樂視云計算OpenStack實戰

?

  開發上線流程,基本和社區一致,是方便、可靠的:

  Commit->Review->Auto Testing->Package->Testing->Production

  最后總結一點建議:

  方案的選取

  1. 合適的才是最好的

  2. 業務需求優先,穩定性優先

  組件的選取

  1. 盡量采用主流軟件,遇到問題可以快速解決

  版本的選取

  1. 成熟度與時新并重

  虛擬化,虛擬計算,虛擬網絡,虛擬存儲,我們大多會第一個想到OpenStack,或者由OpenStack帶來的這些功能。

  其實這些技術是可以獨立的,可以完美用到其他方面。讓所有的業務都跑在虛擬網絡里,為他們提供虛擬資源,并且可以輕而易舉的控制調整它們,方便管理整個數據中心,希望我們以后可以探討更大的話題。

  Q&A

  1.為什么沒有使用swift?

  答: switft 我不熟悉,但是ceph 數據分布,性能方面都很不錯,crush算法是它的亮點。

  2.可否介紹下你們的網絡架構 ,以及你們目前架構下對網絡的要求

  答:總體的架構是標準的neutron架構,但是我們沒有部署網絡節點,直接使用物理路由器,這適合穩定性高的場景。

  3.監控咱們這邊是怎么做的,是用社區原生的Celimeter還是自己的監控系統

  答:是的ceilometer,做過優化,以及換成influxdb,包括對floatingIP的流量監控。

  4.iaas層是否提供了nas接口,視頻轉碼,合成等業務軟件訪問存儲是通過S3 接口還是其他接口呢;

  答:沒有NAS接口。視頻提供了S3和HTTP接口。

  5.選Haproxy有什么優勢嗎?

  答:HaProxy 是專注于負載均衡的功能,提供的算法比較豐富,并發性也更好。

  6.你提到有的有集群上百個物理節點,部署這些物理節點時候,采用什么方法的?

  答:參照問題2。

  7.集群把公網線和心跳線用反了有什么后鍋,我感覺誰當心跳誰當公網,沒什么大不了,求解

  答:你說的心跳線是指什么? 公網是收費的,大家不希望浪費購買的帶寬,所有不穩定的因素多。 內網做心跳更好,心跳實時性要求高。

  8.交換機上的VLAN全手動配置?交換機也手動配置與虛擬機TC相對應的QoS?

  答:是的,這個地方的QOS 主要是限速。

  9.高可用如何保證的

  答:DNS負載均衡 和 LVS 高可用,共同保證總的高可用。

  10.那db性能怎么解決?

  答:一般沒問題,如果ceilometer 采樣頻繁,vm多的話,撐不住。我們現在是influxdb,已經對采樣頻率和采樣的內容進行裁剪。

  11.對于些開發能力小的公司來說,使用上openstack不?openstack在虛擬機的基礎上做了資源管理,目的是充分利用資源吧?cpu方面的分配很好理解,IO能調配不?有一些場景是,部分機器io很閑,部分IO很忙,可以調整利充分用上?樂視的定制版在這方面有改進呢?

  答:如果沒有太多需求,可以用virt-manager,直接管理。 openstack 還是比較復雜的。但是虛擬化可以大量節省成本io就是限制讀寫磁盤的速率iops 或者帶寬 ,qemu 自身可以限制。

  12.公網絡這塊,這接把pub ip配置到容器,那平臺的防火墻策略在哪一層做限制?

  答:外層防火墻,一般是3,4層. 是否控制 7層,我不能確定。

  13.二次開發主要是改了哪些地方

  答:社區有我們提交的代碼。

  14.底層操作系統是啥?rehl6,7? or ubuntu?

  答:centos6.5~。

  15.上線往各個節點推送文件,是用什么推的呢

  答:是puppet。

  16.LVS是什么?會有單點問題嗎?

  答:LVS 是linux virtual server, 沒有單點故障,參見問題9。

  17.會有一個業務幾個region都有vm,需要互通嗎?

  答:部署在幾個region 是為了高可用性。 大家都會訪問同一個數據庫。

  18.請問平均一個節點多少虛機?

  答:為了保證業務,我們的配比 比較低。沒有超過1:10. 主要看業務和重要程度。

  19.每次版本更新需要多長時間,什么范圍內更新呢?

  答:我們現在是長期維護一個穩定版本。

  20.在問個成本問題,是用的整理柜服務器還是定制的服務器,一個機柜裝幾臺?

  答:不好意思,這個問題,我回答不了你,抱歉。

  21.華為分布式存儲要求各個機器硬盤配置一樣,ceph有這個要求嗎?

  答:沒有強制要求,ceph 可以設置機器的權重。

  22.keystone,horizon全局唯一,是放在一個region里面還是怎么做冗余的?

  答:主要做好數據庫冗余就好,前端部署LB,提供 高可用和并發。

  23.想問下硬件資源cpu,mem,storage的超配比,是怎么調配的

  答:這個要根據自己的策略來定,看你的flavor,超配等。

  24.請問是否有對云主機安裝agent用做監控來收集信息

  答:一般不需要,這個地方只是為了取內存數據。

  25. ceph穩定性如何?性能和san或者nas做過對比測試嗎?

  答:和本地做過對比, san 和nas 品種很多,看對IO的要求,業務要求,ceph性能和穩定性都不錯。

轉載于:https://www.cnblogs.com/allcloud/p/6085687.html

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

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

相關文章

【深度學習】——如何提高map值

目錄 代碼獲取 map原理 map提高技巧 技巧總結: 實戰: 1、效果不佳map55.55% 1)單獨調整get_dr_txt.py中的self.iou 0.3 2)單獨調整get_map,py中的minoverlap: 3)同時調整minoverlap和self.iou 本文是在faster_rcnn模型的…

每日站立會議個人博客(沖刺周)-Wednesday

時間未完成不知道如何獲取具體標簽里的內容正在做爬蟲技術之獲取標簽里的內容將要做對運用爬蟲技術獲取的數據進行處理轉載于:https://www.cnblogs.com/andibier/p/8075098.html

數據庫水平切分的實現原理解析——分庫,分表,主從,集群,負載均衡器(轉)...

第1章 引言 隨著互聯網應用的廣泛普及,海量數據的存儲和訪問成為了系統設計的瓶頸問題。對于一個大型的互聯網應用,每天幾十億的PV無疑對數據庫造成了相當高的負載。對于系統的穩定性和擴展性造成了極大的問題。通過數據切分來提高網站性能,橫…

【深度學習】——糾錯error: Unable to find vcvarsall.bat:關于安裝pycocotools

1、安裝包下載 大佬改寫支持 Windows 的 COCO 地址:https://github.com/philferriere/cocoapi 下載后如下: 進入pythonAPI 先后運行: python setup.py build_ext --inplacepython setup.py build_ext install 出現以下標志時&#xff0c…

【小貼士】虛擬鍵盤與fixed帶給移動端的痛!

前言今天來公司的主要目的就是研究虛擬鍵盤與fixed的問題,期間因為同事問起閉包與事件委托(阻止冒泡)相關問題,便穿插了一篇別的:【小貼士】工作中的”閉包“與事件委托的”阻止冒泡“,有興趣的朋友可以去看…

[OJ] Wildcard Matching (Hard)

LintCode 192. Wildcard Matching (Hard)LeetCode 44. Wildcard Matching (Hard) 第二次刷還是被這題虐. 其實就是跪在一個地方, 就是關于mustFail的地方. 當*p && !*s的時候, 說明s已經被用完了, p還沒有被窮盡, 這種情況下要直接退出所有的遞歸返回false, 因為s都匹配…

CSS3 -webkit-transition(屬性漸變)

-webkit-transition:CSS屬性(none|all|屬性) 持續時間 時間函數 延遲時間 CSS屬性(transition-property):要變化的屬性,比如元素變寬則是width,文字顏色要變色這是color;W3C給出了一個可變換屬性的列表:…

vxworks的default boot line說明

boot程序的主要功能是引導vxworks 內核,所以boot程序需要知道vxworks的內核存放在何處,通過什么手段去獲取。在vxworks缺省的boot程序里有一條內建的default boot line,它指明了獲得vxworks內核的途徑,在boot程序啟動時,它先尋找NVRAM里面有無…

【機器視覺】——相機和鏡頭的選擇

目錄 1、相機選擇 2、鏡頭選擇 3、其他計算公式 1)芯片尺寸計算:

React Native中pointerEvent屬性

在React Native界面開發中, 如果使用絕對定位布局,在代碼運行時的某個時刻有可能會遮蓋住它的下方的某個組件。這是因為絕對定位只是說這個組件的位置由它父組件的邊框決定。 絕對定位的組件可以被認為會覆蓋在它前面布局(JSX代碼順序)的組件的上方. 如果…

Rar Java Zip

http://wolfdream.iteye.com/blog/428588轉載于:https://www.cnblogs.com/diyunpeng/p/5218381.html

庫卡機器人CELL程序解析

KUKA機器人 CELL程序 解析及注釋&ACCESS RVP&REL 4&COMMENT HANDLER on external automaticDEF CELL ( );EXT EXAMPLE1 ( );EXT EXAMPLE2 ( );EXT EXAMPLE3 ( ) ;FOLD INITDECL CHAR DMY[3]DMY[]"---";ENDFOLD (INIT);FOLD BASISTECH INIIR_STOPM ( )…

Ubuntu 16.04服務器安裝及軟件配置

1.配置靜態地址 vim /etc/network/interfaces auto enp1s0 iface enp1s0 inet static address 192.168.1.131 netmask 255.255.255.0auto enp2s0 iface enp2s0 inet static address 192.168.2.131 netmask 255.255.255.0auto enp3s0 iface enp3s0 inet static address 192.168.…

[軟件測試airtest軟件安裝]——填坑

目錄 1、安裝Python環境(版本問題) 2、連接手機出現連接上了但是無法進行點擊 airtest官網: https://airtest.doc.io.netease.com/for_newer/ 關于軟件測試剛入門的可以參考進行了解:https://airtest.doc.io.netease.com/tuto…

KUKA 機器人SPS.SUB程序解析

&ACCESS RVO&COMMENT PLC on controlDEF SPS ( );FOLD DECLARATIONS;FOLD BASISTECH DECL;Automatik externDECL STATE_T STAT定義STATE_T類型的變量。該結構為:STRUC STATE_T CMD_STAT RET1, CMD_STAT是枚舉類型數據,組成了STATE_…

jquery validate表單驗證插件

1 表單驗證的準備工作 在開啟長篇大論之前,首先將表單驗證的效果展示給大家。 1.點擊表單項,顯示幫助提示         2.鼠標離開表單項時,開始校驗元素    3.鼠標離開后的正確、錯誤提示及鼠標移入時的幫助提醒 對于初學者而言&…

【Python位運算】——左移操作(<<)右移操作>>

目錄 左移操作 右移操作 其他博主的理解 應用——力扣題目78. 子集 解法 深度優先搜索 位運算 參考文獻 左移操作 # 左移操作&#xff0c;左移一位相當于乘以b&#xff0c;a<<b,a a*(2^b) print(2<<3) # 2*2^3 16&#xff0c;2的二進制10&#xff0c;向…

sql中字段名中包含特殊字符的查詢方法

sql中字段名章包含特殊字符的查詢方法&#xff1a;例如包含""&#xff0c;student表中字段為&#xff1a;id“學號”、name"姓名"。 解決辦法&#xff1a;用英文下的 ""&#xff08;Tab鍵上面那個鍵,不需要shift&#xff09;把字段名包起來。如&…

tomcat Server.xml Context配置

有時候需要在tomcat里面做特殊的配置&#xff0c;來進行訪問&#xff1a; 例如你的程序 名字是hello端口是80 這時候你要訪問你的程序 就要用 localhost/hello 來訪問了。 但是怎么直接用 localhost來訪問呢&#xff1f;就需要進行tomcat 的配置了呢 看以下配置&#xff1a;to…

絕望,絕望、希望

晚上&#xff0c;經歷了一場小小的絕望&#xff0c;因為在論文方面&#xff0c;經過一些實踐檢驗&#xff0c;我發現之前所提出的理論竟然差別太大&#xff0c;這件事情讓人感到絕望&#xff0c;但是&#xff0c;也只有被逼繼續前行&#xff0c;沒有退路&#xff0c;前行才能慢…