乐视云计算基于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.mzph.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模型的…

数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)...

第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…

[软件测试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;把字段名包起来。如&…

ABB RAPID SOCKET编程

相传在2009年6月11日&#xff0c;微博的鼻祖t-w-i-t-t-e-r还没有被封锁的时候&#xff0c;于仁颇黎写了了一个东西可以将staubli机器人在运行时的状态&#xff0c;实时发送上去&#xff0c;可以被实时的查看&#xff0c;任何一个人都可以查看&#xff0c;于是就有了这个名为TWI…

机器人 工具坐标系的标定

概念 工具坐标系是把机器人腕部法兰盘所握工具的有效方向定为Z轴&#xff0c;把坐标定义在工具尖端点&#xff0c;所以工具坐标的方向随腕部的移动而发生变化。 工具坐标的移动&#xff0c;以工具的有效方向为基准&#xff0c;与机器人的位置、姿势无关&#xff0c;所以进行相…

Linux内核分析— —计算机是如何工作的(20135213林涵锦)

实验部分 &#xff08;以下命令为实验楼64位Linux虚拟机环境下适用&#xff0c;32位Linux环境可能会稍有不同&#xff09; 使用 gcc –S –o main.s main.c -m32命令编译成汇编代码&#xff0c; int g(int x){ return x 6;} int f(int x){ return g(x);} int main(void){ r…

【测试开发】测试用例讲解

文章目录 目录 文章目录 前言 一、测试用例的基本要素 二、测试用例的设计方法 1.基于需求的设计方法 对日历根据web界面的功能布局分析出的功能框图如下&#xff1a; 继续举一个例子百度云盘非功能测试的案例&#xff1a; 2.等价类 3.边界值 5.正交表 6.场景设计法 7…

Hadoop分布式系统的安装部署

1、关于虚拟机的复制 新建一台虚拟机&#xff0c;系统为CentOS7&#xff0c;再克隆两台&#xff0c;组成一个三台机器的小集群。正常情况下一般需要五台机器&#xff08;一个Name节点&#xff0c;一个SecondName节点&#xff0c;三个Data节点。&#xff09; 此外&#xff0c;为…

Windows线程调度学习(一)

前言 Windows 线程调度器的实现分散在内核各处&#xff0c;并且与许多组件都有关联&#xff0c;很难进行系统地学习&#xff0c;所以我打算写几篇文章来记录下自己学习过程中的思考和分析&#xff0c;同时也方便日后查阅&#xff0c;此文可以看作是《Windows内核原理与实现》中…

scapy 安装及简单测试

关于scapy Scapy的是一个强大的交互式数据包处理程序&#xff08;使用python编写&#xff09;。它能够伪造或者解码大量的网络协议数据包&#xff0c;能够发送、捕捉、匹配请求和回复包等等。它可以很容易地处理一些典型操作&#xff0c;比如端口扫描&#xff0c;tracerouting&…

JavaScript 基础知识 - BOM篇

前言 本篇文章是JavaScript基础知识的BOM篇&#xff0c;如果前面的《JavaScript基础知识-DOM篇》看完了&#xff0c;现在就可以学习BOM了。 注意&#xff1a; 所有的案例都在这里链接: 提取密码密码: yvxo&#xff0c;文章中的每个案例后面都有对应的序号。 1. BOM 基本概念 B…

全球首例机器人自杀事件 因受够无聊家务

据凤凰网,一个奥地利家庭购买一小机器人,每天工作就是倒垃圾、倒垃圾。一天完工后,它竟自己启动,爬到炉边&#xff0c;推开上面的锅&#xff0c;把自己活活烧死…专家称这个机器人实在受够了无聊的家务琐事&#xff0c;才毅然选择自杀机器人也是有尊严的!为这有骨气的robot点根…

【python基础】——数据类型(列表、字典、集合)

骏马金龙——python语法基础 python基础 变量与运算 符号//%**意义整除整除取余幂次方数据种类 #mermaid-svg-7nSRRijcYFCYwTDr .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-7nSRRijcYFCYw…

机器人实现屠宰自动化

当 WESTFLEISCH 注册合作社考虑在 Coesfeld 肉类加工中心内自动化原有的人工屠宰设备过程时&#xff0c;首先在“剔除直肠”及“切开盆腔骨及腹部”两个流程中测试使用了两台库卡机器人。在此过程中&#xff0c;机器人主要以它工作的质量及经济效益说服了使用者。 实施措施/解…

python数据结构《排序专题复习》

目录 常见的三种排序方法 冒泡排序 插入排序 选择排序 其他经典的排序方法 快速排序 堆排序 归并排序 希尔排序 不同排序方法的各维度对比 排序方式的稳定性&#xff1a;若两个相同的元素在排序前后的相对位置不发生改变的排序为稳定排序&#xff0c;否则不稳定排序 常…