本文作者岳龙广,现在就职于乐视云计算有限公司,负责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 对象存储。

  

  我们采用了 Ceph RBD 作为 统一存储,OpenStack使用的Cinder,后端接的是Ceph,Glance也是共享Ceph存储。

  我们同时还提供了 S3 对象存储,用作于 CND 源站,存储乐视网的视频以及客户需要分发的资源。

  S3 也是全国分布式部署,用户可以就近上传,再推送到北京。

  目前乐视云 OpenStack 规模已达 900 个物理节点,对象存储的数据达到数PB。

  Neutron Deployment & QOS

  

  我们 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

  

  由于乐视网业务的特殊性,为了让用户有更好的体验,服务会分散部署在全球。

  乐视网的视频服务需要 CDN 的支持,对于某些 CDN 节点,特别是国外,需要提供云主机等基础设施服务。我们在国内外部署了有 20 多个集群,每个集群规模大小不一,其中最大的有上百个物理节点,这种需求也是极罕见的。

  这些节点既有 Havana 版本,又有 Icehouse 版本。每个集群均维护独自的 Dashboard 和用户信息,这就造成了以下四个问题:

  1. 用户租户信息不统一,不同集群的用户信息不一致,对用户使用有很大的影响

  2. 访问不同的集群,用户需要登录不同的 IP

  3. 运维难度增加

  4. 维护 H 和 I 版本的 Keystone 和 Horizon

  随着集群数量的不断增加,上述问题将显得越发突出,于是我们采用了 Multi-Region 方案,把这些集群做了统一的管理。

  部署方面, Keystone 和 Horizon 全局唯一,其中 Keystone 部署在公网,从而能够被其它服务访问,Horizon 部署在内网,从而能够访问其它集群。这是大概的分布图:

  

  LeTV LBaaS

  LeTV LBaaS,在原生LBaaS基础上做了定制化,为了区分开来,就叫做LeTV LBaaS。

  乐视网的服务需要高可用、扩展性。Neutron LBaaS 看起来是个不错的选择,基本框架有了,但是还不能完全满足业务需要。

  要想满足业务需要,除了增强已有的接口,还有开发新的功能,比如HaProxy 冗余,本身服务健康检查,以及与LVS整合。

  

  这是实际业务架构,通过域名解析到LVS,LVS把流量负载到LB机器,在通过LB把流量负载到其他机器,实际提供服务的机器可以横行扩展,不管是虚拟机还是物理机,甚至是容器。

  Letv LBaaS 可以轻松满足业务需求,优势如下:

  1. 不同业务之间的LB,互不干扰。Haproxy跑在各自的namespace里面

  2. Haproxy HA 冗余功能,保证服务的高可用

  3. 方便动态增加机器

  4. 与LVS整合

  DevOps & Community

  

  开发上线流程,基本和社区一致,是方便、可靠的:

  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性能和稳定性都不错。

乐视云计算基于OpenStack的IaaS实践的更多相关文章

  1. 华为的云计算基于openstack #stackalytics#

    华为的云计算基于openstack,具体实力可以参考openstack 社区提供的stackalytics http://stackalytics.com/

  2. docker是PaaS,与openstack是IaaS的关系

    个人理解Docker的每一个虚机其实是宿主操作系统中的一个进程.主要是一种虚拟化技术.OpenStack主要解决的是基础架构云的云服务问题.OpenStack是在虚拟化技术之上的一层,主要解决系统部署 ...

  3. OpenStack Austin 峰会观察:OpenStack as IaaS 已是过去,Solutions on OpenStack 才是未来

    虽然搞 OpenStack 前后也有几年,但是今年在美国 Austin 举办的 OpenStack Summit 我还是第一次参加.回来之后,一直还在回味,觉得要写点东西,将我在这次峰会上的观察和思考 ...

  4. 恒天云 3.0:打造基于OpenStack的私有云新模式

    摘自恒天云官网:http://www.hengtianyun.com/download-show-id-17.html 云计算在当今IT世界中已发展地如火如荼,越来越多的企业利用云计算改造传统的数据中 ...

  5. 不care小米,梁军坦言微鲸才是乐视最大对手

    除了每天毫无悬念地上头条和陷入困境的生态帝国之外,乐视还要继续操心着它的对手们."挑事儿"的小米已经不足为惧,后起之秀微鲸成了一个令它"头疼"的所在.因为,不仅 ...

  6. 云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)

    “云计算” 算是近年来最热的词了.现在 IT 行业见面不说这三个字您都不好意思跟人家打招呼. 对于云计算,学术界有各种定义,大家有兴趣可以百度一下. CloudMan 这里主要想从技术的角度谈谈对云计 ...

  7. 我所了解的各公司使用的 Ceph 存储集群 (携程、乐视、有云、宝德云、联通等)

    Ceph 作为软件定义存储的代表之一,最近几年其发展势头很猛,也出现了不少公司在测试和生产系统中使用 Ceph 的案例,尽管与此同时许多人对它的抱怨也一直存在.本文试着整理作者了解到的一些使用案例. ...

  8. 戏说云计算之PaaS,IaaS,SaaS【转载】

    最近我们聊到“CRM系统PAAS化”,有些可能就不了解,到底什么是PAAS.云计算还有IaaS,SaaS概念,这三者之间有什么区别?今天智云通CRM系统小编用通俗易懂的例子跟大家分享Paas,IaaS ...

  9. 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)

    VPC的概念与基于vxlan的overlay实现很早就有了,标题中的"新"只是一个和传统网络的相对概念.但从前年开始,不同于以往基础网络架构的新一代SDN网络才真正越来越多的走进国 ...

随机推荐

  1. struts1 Demo

    每次都会忘记一些东西,反复查找原因,其实struts1很简单,可是不去巩固也很容易忘记并且犯错误.这是一个最简单的登录Demo. 1.建立web工程,引入struts1.2包 2.建package:a ...

  2. 本地和VMware虚拟主机之间的网络访问

    在需要设置的虚拟主机节点上右键,点击[设置...] 在打开的虚拟机设置中,选中[网络适配器],之后在右边设置网络连接为[自定义:指定的虚拟网络] 然后设置同一网关即可.

  3. ssh 协议执行repo sync 报错:Permission denied (publickey)

    1.ssh key 已经添加ssh key到gerrit服务器,并且执行ssh协议的git clone可以正常克隆代码到本地,可见不是ssh key的问题. 2.manifest清单文件配置 最初在m ...

  4. (gridcontrol等)通用导出excel z

    关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,并且解决DevExpress控件自带的方法存在的缺陷问题 1.解决GridControl自带方法不能导出图片: ...

  5. 【解决】SharePoint集成模式下Reporting Service—为用户授予的权限不足,无法执行此操作。 (rsAccessDenied)

    环境:Windows Server 2008 R2 SP1,SharePoint 2010 企业版,SQL Server 2008 R2 Reporting Service(SharePoint集成模 ...

  6. 关于AX 2012 SSRS 导出PDF时出现group by 分页错误的情况

    近期,在AX  2012 上一个二次开发的报表出现了一个奇怪的现象,报表设计正常,分组.分页设计正常, 但出现问题在,当报表在AX 上打开,按dataareaid 分页是正常的,如下图中title中的 ...

  7. AX Dynamic 2012 SSRS 按行数分页

    按行数分页 1. Create a new Row Group with the following grouping expression: =Ceiling(RowNumber(Nothing)/ ...

  8. Data Science at the Command Line学习笔记(二)

    1.vagrant建立简单httpserver方法: 1)映射端口 修改Vagrantfile, 末尾添加本地端口和虚机端口的映射关系, 然后执行vagrant reload. Vagrant::Co ...

  9. SmartWiki文档在线管理系统简介

    简介 SmartWiki是一款针对IT团队开发的简单好用的文档管理系统.可以用来储存日常接口文档,数据库字典,手册说明等文档.内置项目管理,用户管理,权限管理等功能,能够满足大部分中小团队的文档管理需 ...

  10. Hadoop HDFS编程 API入门系列之简单综合版本1(四)

    不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs4; import java.io.IOException; import ja ...