【實(shí)戰(zhàn)】樂視云計(jì)算基于OpenStack的IaaS實(shí)踐
本文作者岳龍廣,現(xiàn)在就職于樂視云計(jì)算有限公司,負(fù)責(zé)IaaS部門的工作。
從開始工作就混在開源世界里,在虛擬化方面做過CloudStack/Ovirt開發(fā),現(xiàn)在是做以O(shè)penStack為基礎(chǔ)的樂視云平臺(tái)。所以對虛擬化情有獨(dú)鐘,也對虛擬化/云計(jì)算的未來充滿了信心。
樂視網(wǎng)的所有服務(wù)是跑在樂視云上的,樂視云提供所有的底層支撐,包括IaaS/PaaS/Storage/CDN等等。為了帶給用戶更好的體驗(yàn),樂視網(wǎng)的服務(wù)到哪,樂視云的底層服務(wù)就會(huì)跟到哪。
其中虛擬化是必不可少的部分,它的快速提供、按需分配、資源隔離顯得特別重要,但我們會(huì)遇到什么問題呢?
今天的主要目的是分享我們在OpenStack項(xiàng)目中做的一部分工作,它們解決了內(nèi)部的一些需求,也是實(shí)際經(jīng)驗(yàn),希望對大家有所啟發(fā)。
開始之前 首先感謝肖總、浩宇、victor等朋友給予的大力支持,感謝群友、技術(shù)愛好者的圍觀。
很榮幸有這次機(jī)會(huì)來與大家做這個(gè)分享。
提綱:
- 1. IaaS Architecture
- 2. OpenStack Deploy & QOS
- 3. Multiple Regions
- 4. LeTV LBaaS
- 5. DEV
樂視云計(jì)算IaaS的基本架構(gòu)
首先就是介紹一下樂視云計(jì)算基礎(chǔ)架構(gòu),再介紹OpenStack 網(wǎng)絡(luò)組件的部署,Multiple Regions是什么樣子的,更方便于使用的LeTV LBaaS,***是開發(fā)/上線流程。
樂視云計(jì)算 IaaS 采用了 OpenStack 和 Ceph 的開源方案,為樂視提供了云主機(jī)、虛擬網(wǎng)絡(luò)、云硬盤和 S3 對象存儲(chǔ)。
我們采用了 Ceph RBD 作為 統(tǒng)一存儲(chǔ),OpenStack使用的Cinder,后端接的是Ceph,Glance也是共享Ceph存儲(chǔ)。
我們同時(shí)還提供了 S3 對象存儲(chǔ),用作于 CND 源站,存儲(chǔ)樂視網(wǎng)的視頻以及客戶需要分發(fā)的資源。
S3 也是全國分布式部署,用戶可以就近上傳,再推送到北京。
目前樂視云 OpenStack 規(guī)模已達(dá) 900 個(gè)物理節(jié)點(diǎn),對象存儲(chǔ)的數(shù)據(jù)達(dá)到數(shù)PB。
Neutron Deployment & QOS
我們 Havana 版本采用了 nova-network 的 FlatDHCP 類型。
Icehouse 版本采用了 Neutron,再做足調(diào)研的前提下,我們對 Neutron 做了大量的減法,所用服務(wù)僅為 Neutron Server 和 OpenvSwitch Agent,控制節(jié)點(diǎn)部署 Neutron Server(with ML2 plugin),計(jì)算節(jié)點(diǎn)部署 OpenvSwitch Agent。
沒有網(wǎng)絡(luò)節(jié)點(diǎn),因而沒有用到DHCP Agent,L3 agent 和 Metadata Agent。 物理網(wǎng)絡(luò)使用 VLAN 做隔離。由于 Region 數(shù)量較多,每個(gè) region 有不同的物理網(wǎng)絡(luò)(對應(yīng)ml2_conf 中的 physical_network 字段),可以緩解 VLAN 數(shù)量的限制。
私有云環(huán)境通過 Config Drive 配置虛擬機(jī)網(wǎng)卡和 metadata,Public IP 地址直接配在虛擬機(jī)網(wǎng)卡上,走物理路由器。無論是 nova-network 還是 neutron,我們都采用了穩(wěn)定可靠的網(wǎng)絡(luò),由于不存在網(wǎng)絡(luò)節(jié)點(diǎn)的單點(diǎn)問題,因此集群在滿足私有云的需求前提下,兼顧了可靠性、穩(wěn)定性和可擴(kuò)展性。
優(yōu)點(diǎn):簡單穩(wěn)定,性能更好,這也是業(yè)務(wù)最需要的,線上業(yè)務(wù)穩(wěn)定、可用性是最重要的。
缺點(diǎn):犧牲了靈活性,和物理網(wǎng)絡(luò)的耦合度高
為了防止某個(gè)虛擬機(jī)負(fù)載過高而影響其它虛擬機(jī)或者宿主機(jī),我們做了了 CPU,Network 和 Disk IO 的 QoS,其中 Cpu 的 QoS 采用 cgroup 實(shí)現(xiàn),虛擬機(jī)網(wǎng)卡的 QoS 通過 TC 實(shí)現(xiàn)。
一開始我們采用了 cgroup 限制 Disk IO,由于 ceph 采用了 Non-host-block,故 cgroup 無法限制基于 ceph 的 Disk IO, 因此我們采用了 qemu io throttling。和 cgroup 相比,qemu io throttling 不僅僅能支持 non-host-block IO,同時(shí)限速的效果也更為出色,限速后,虛擬機(jī)的 IO 不會(huì)有太大抖動(dòng)。
此外,如果基于 cgroup 的 Disk IO 設(shè)置過小,會(huì)導(dǎo)致虛擬機(jī)刪除失敗。原因在于 qemu 提交的 Direct IO 必須完成后才能退出,使用過小的磁盤帶寬導(dǎo)致此動(dòng)作需很長時(shí)間才能完成,導(dǎo)致 qemu 進(jìn)程不能及時(shí)響應(yīng) libvirt 發(fā)出的 SIGTERM 和 SIGKILL 信號(hào)。
而如果使用 qemu io throttling,則 io 會(huì)現(xiàn)在 qemu block layer 中加入 queue,此時(shí) qemu 可以響應(yīng) libvirt 發(fā)出的信號(hào)而退出 。
使用 qemu io throttling 需要需注意的是,當(dāng) Xfs 扇區(qū)大小為4k時(shí),qemu 以 cache=none 方式啟動(dòng)失敗
#p#
Multiple Regions
由于樂視網(wǎng)業(yè)務(wù)的特殊性,為了讓用戶有更好的體驗(yàn),服務(wù)會(huì)分散部署在全球。
樂視網(wǎng)的視頻服務(wù)需要 CDN 的支持,對于某些 CDN 節(jié)點(diǎn),特別是國外,需要提供云主機(jī)等基礎(chǔ)設(shè)施服務(wù)。我們在國內(nèi)外部署了有 20 多個(gè)集群,每個(gè)集群規(guī)模大小不一,其中***的有上百個(gè)物理節(jié)點(diǎn),這種需求也是極罕見的。
這些節(jié)點(diǎn)既有 Havana 版本,又有 Icehouse 版本。每個(gè)集群均維護(hù)獨(dú)自的 Dashboard 和用戶信息,這就造成了以下四個(gè)問題:
- 1. 用戶租戶信息不統(tǒng)一,不同集群的用戶信息不一致,對用戶使用有很大的影響
- 2. 訪問不同的集群,用戶需要登錄不同的 IP
- 3. 運(yùn)維難度增加
- 4. 維護(hù) H 和 I 版本的 Keystone 和 Horizon
隨著集群數(shù)量的不斷增加,上述問題將顯得越發(fā)突出,于是我們采用了 Multi-Region 方案,把這些集群做了統(tǒng)一的管理。
部署方面, Keystone 和 Horizon 全局唯一,其中 Keystone 部署在公網(wǎng),從而能夠被其它服務(wù)訪問,Horizon 部署在內(nèi)網(wǎng),從而能夠訪問其它集群。這是大概的分布圖:
LeTV LBaaS
LeTV LBaaS,在原生LBaaS基礎(chǔ)上做了定制化,為了區(qū)分開來,就叫做LeTV LBaaS。
樂視網(wǎng)的服務(wù)需要高可用、擴(kuò)展性。Neutron LBaaS 看起來是個(gè)不錯(cuò)的選擇,基本框架有了,但是還不能完全滿足業(yè)務(wù)需要。
要想滿足業(yè)務(wù)需要,除了增強(qiáng)已有的接口,還有開發(fā)新的功能,比如HaProxy 冗余,本身服務(wù)健康檢查,以及與LVS整合。
這是實(shí)際業(yè)務(wù)架構(gòu),通過域名解析到LVS,LVS把流量負(fù)載到LB機(jī)器,在通過LB把流量負(fù)載到其他機(jī)器,實(shí)際提供服務(wù)的機(jī)器可以橫行擴(kuò)展,不管是虛擬機(jī)還是物理機(jī),甚至是容器。
Letv LBaaS 可以輕松滿足業(yè)務(wù)需求,優(yōu)勢如下:
- 1. 不同業(yè)務(wù)之間的LB,互不干擾。Haproxy跑在各自的namespace里面
- 2. Haproxy HA 冗余功能,保證服務(wù)的高可用
- 3. 方便動(dòng)態(tài)增加機(jī)器
- 4. 與LVS整合
DevOps & Community
開發(fā)上線流程,基本和社區(qū)一致,是方便、可靠的:
Commit->Review->Auto Testing->Package->Testing->Production
#p#
***總結(jié)一點(diǎn)建議:
方案的選取
1. 合適的才是***的
2. 業(yè)務(wù)需求優(yōu)先,穩(wěn)定性優(yōu)先
組件的選取
1. 盡量采用主流軟件,遇到問題可以快速解決
版本的選取
1. 成熟度與時(shí)新并重
虛擬化,虛擬計(jì)算,虛擬網(wǎng)絡(luò),虛擬存儲(chǔ),我們大多會(huì)***個(gè)想到OpenStack,或者由OpenStack帶來的這些功能。
其實(shí)這些技術(shù)是可以獨(dú)立的,可以***用到其他方面。讓所有的業(yè)務(wù)都跑在虛擬網(wǎng)絡(luò)里,為他們提供虛擬資源,并且可以輕而易舉的控制調(diào)整它們,方便管理整個(gè)數(shù)據(jù)中心,希望我們以后可以探討更大的話題。
Q&A
1.為什么沒有使用swift?
答: switft 我不熟悉,但是ceph 數(shù)據(jù)分布,性能方面都很不錯(cuò),crush算法是它的亮點(diǎn)。
2.可否介紹下你們的網(wǎng)絡(luò)架構(gòu) ,以及你們目前架構(gòu)下對網(wǎng)絡(luò)的要求
答:總體的架構(gòu)是標(biāo)準(zhǔn)的neutron架構(gòu),但是我們沒有部署網(wǎng)絡(luò)節(jié)點(diǎn),直接使用物理路由器,這適合穩(wěn)定性高的場景。
3.監(jiān)控咱們這邊是怎么做的,是用社區(qū)原生的Celimeter還是自己的監(jiān)控系統(tǒng)
答:是的ceilometer,做過優(yōu)化,以及換成influxdb,包括對floatingIP的流量監(jiān)控。
4.iaas層是否提供了nas接口,視頻轉(zhuǎn)碼,合成等業(yè)務(wù)軟件訪問存儲(chǔ)是通過S3 接口還是其他接口呢;
答:沒有NAS接口。視頻提供了S3和HTTP接口。
5.選Haproxy有什么優(yōu)勢嗎?
答:HaProxy 是專注于負(fù)載均衡的功能,提供的算法比較豐富,并發(fā)性也更好。
6.你提到有的有集群上百個(gè)物理節(jié)點(diǎn),部署這些物理節(jié)點(diǎn)時(shí)候,采用什么方法的?
答:參照問題2。
7.集群把公網(wǎng)線和心跳線用反了有什么后鍋,我感覺誰當(dāng)心跳誰當(dāng)公網(wǎng),沒什么大不了,求解
答:你說的心跳線是指什么? 公網(wǎng)是收費(fèi)的,大家不希望浪費(fèi)購買的帶寬,所有不穩(wěn)定的因素多。 內(nèi)網(wǎng)做心跳更好,心跳實(shí)時(shí)性要求高。
8.交換機(jī)上的VLAN全手動(dòng)配置?交換機(jī)也手動(dòng)配置與虛擬機(jī)TC相對應(yīng)的QoS?
答:是的,這個(gè)地方的QOS 主要是限速。
9.高可用如何保證的
答:DNS負(fù)載均衡 和 LVS 高可用,共同保證總的高可用。
10.那db性能怎么解決?
答:一般沒問題,如果ceilometer 采樣頻繁,vm多的話,撐不住。我們現(xiàn)在是influxdb,已經(jīng)對采樣頻率和采樣的內(nèi)容進(jìn)行裁剪。
11.對于些開發(fā)能力小的公司來說,使用上openstack不?openstack在虛擬機(jī)的基礎(chǔ)上做了資源管理,目的是充分利用資源吧?cpu方面的分配很好理解,IO能調(diào)配不?有一些場景是,部分機(jī)器io很閑,部分IO很忙,可以調(diào)整利充分用上?樂視的定制版在這方面有改進(jìn)呢?
答:如果沒有太多需求,可以用virt-manager,直接管理。 openstack 還是比較復(fù)雜的。但是虛擬化可以大量節(jié)省成本io就是限制讀寫磁盤的速率iops 或者帶寬 ,qemu 自身可以限制。
12.公網(wǎng)絡(luò)這塊,這接把pub ip配置到容器,那平臺(tái)的防火墻策略在哪一層做限制?
答:外層防火墻,一般是3,4層. 是否控制 7層,我不能確定。
13.二次開發(fā)主要是改了哪些地方
答:社區(qū)有我們提交的代碼。
14.底層操作系統(tǒng)是啥?rehl6,7? or ubuntu?
答:centos6.5~。
15.上線往各個(gè)節(jié)點(diǎn)推送文件,是用什么推的呢
答:是puppet。
16.LVS是什么?會(huì)有單點(diǎn)問題嗎?
答:LVS 是linux virtual server, 沒有單點(diǎn)故障,參見問題9。
17.會(huì)有一個(gè)業(yè)務(wù)幾個(gè)region都有vm,需要互通嗎?
答:部署在幾個(gè)region 是為了高可用性。 大家都會(huì)訪問同一個(gè)數(shù)據(jù)庫。
18.請問平均一個(gè)節(jié)點(diǎn)多少虛機(jī)?
答:為了保證業(yè)務(wù),我們的配比 比較低。沒有超過1:10. 主要看業(yè)務(wù)和重要程度。
19.每次版本更新需要多長時(shí)間,什么范圍內(nèi)更新呢?
答:我們現(xiàn)在是長期維護(hù)一個(gè)穩(wěn)定版本。
20.在問個(gè)成本問題,是用的整理柜服務(wù)器還是定制的服務(wù)器,一個(gè)機(jī)柜裝幾臺(tái)?
答:不好意思,這個(gè)問題,我回答不了你,抱歉。
21.華為分布式存儲(chǔ)要求各個(gè)機(jī)器硬盤配置一樣,ceph有這個(gè)要求嗎?
答:沒有強(qiáng)制要求,ceph 可以設(shè)置機(jī)器的權(quán)重。
22.keystone,horizon全局唯一,是放在一個(gè)region里面還是怎么做冗余的?
答:主要做好數(shù)據(jù)庫冗余就好,前端部署LB,提供 高可用和并發(fā)。
23.想問下硬件資源cpu,mem,storage的超配比,是怎么調(diào)配的
答:這個(gè)要根據(jù)自己的策略來定,看你的flavor,超配等。
24.請問是否有對云主機(jī)安裝agent用做監(jiān)控來收集信息
答:一般不需要,這個(gè)地方只是為了取內(nèi)存數(shù)據(jù)。
25. ceph穩(wěn)定性如何?性能和san或者nas做過對比測試嗎?
答:和本地做過對比, san 和nas 品種很多,看對IO的要求,業(yè)務(wù)要求,ceph性能和穩(wěn)定性都不錯(cuò)。
【本文來源:KVM虛擬化實(shí)踐微信號(hào)】