前言

        不知不觉中已经接触云计算领域一年有余了,从CloudFoundry到OpenStack,从虚拟化到云平台,随着项目的深入发现要学的东西越来越多,但时间却总是不够用,所以也想借这篇博文对过去的2012年做一个总结。

        值得庆幸的是,我们躲过了世界末日,我们还活着,云计算事业还将继续。


瞬联为什么需要私有云?

        说到这样一个问题,必须要了解一下企业的背景。简单来说,瞬联就是一家外包公司。相信很多人看到这里可能会发出这样的感叹:哦,就是个卖人的公司嘛!相信大多数的外包公司都会留给人这样的印象,但是这句话只说对了一半。从外包的定义上说,除了传统的人力资源外包,项目外包也占据了外包行业的半壁江山。其实在中国,电信行业、金融业的项目,都是以项目打包的方式承包给IT服务企业完成的。

需求一:开发、测试环境的需求

        其中占据瞬联业务重要的一部分就是服务即产品(Service as a product)的模式,在瞬联内部有大量为不同客户项目提供解决方案的团队,涵盖电信、移动互联网等诸多方面,其中也包括我们企业私有云解决方案团队,这些团队在项目开发过程中,经常需要使用很多不同的开发环境,但无外乎Windows和各种Linux版本,当项目开始后,项目经理四处寻找空闲资源,当项目结束后,环境又被销毁掉,资源被回收,但是如果项目一旦重新启动,通常的做法是按照文档重新搭建环境,大大浪费人力和时间成本。那么这里通过OpenStack提供的镜像服务以及虚拟机服务可以方便快速的保存、重建开发、测试环境,大大缩短了环境重建的周期,提高效率,也提高了资源的利用率。

        但是,从实际使用状况来看,OpenStack主要是面对公有云运营商开发的,所以不会对用户使用资源使用刻意限制,换句话说,你用的越多我越高兴。但对私有云的来说,硬件资源总是有限的,我们不能让所有的用户不加限制的随意占用资源(时间和硬件资源),所以对于企业私有云来说,流程控制是必不可少的。所以针对这一点,我们在Nova项目中开发了一个新的服务Flow,用来控制虚拟机资源的申请流程,以及控制虚拟机资源使用的时间和通知等服务。

       另外,对于公司来讲,资源的隔离性也是很很有必要的,不同项目、部门的采购的硬件往往希望独占,所以这里面就涉及到Zone的概念。OpenStack中的Zone是在生成虚拟机时指定的,但是我们并不希望让用户不加限制的去选择Zone信息,这样失去了对用户行为的控制。那么,我们会将Project和Zone由云管理员进行绑定,用户申请时只能选择该Project允许创建虚拟机的Zone。这样就保障了项目对硬件隔离的需求。


需求二:共享存储——私有网盘

        此外,基于群组的文件共享也是重要需求之一。在我们企业内部环境中,文件的共享基本通过电子邮件或者wiki的方式实现,但无论哪种方式都有明显的劣势:电子邮件不利于查找而wiki对普通用户使用有门槛。基于以上需求,我们结合OpenStack提供的对象存储模块SWIFT,开发了针对企业私有云平台的网盘服务。另外,对于一些OFFICE、PDF、图片等,大部分的用户只想查看其中的内容,并不需要编辑他们,但往往我们收到这样的文件,只能下载后通过本地的客户端软件打开后才能查看,很浪费时间。所以,我们又开发了针对文档及图片等常见文件格式的在线浏览功能,同时还提供群组分享、内容检索等服务。网盘的应用在企业内部,即保证了数据的安全、可靠,又提高了用户体验。


需求三:VDI远程桌面

        最后,是关于VDI,也就是远程桌面系统,用来解决远程办公、软件共享、安全控制等功能。针对这个需求,我们利用OpenStack对虚拟资源的灵活控制,开发了一套基于OpenStack的VDI应用。用户使用任意RDP客户端,每次连接固定的域名,之后选择要使用的软件资源池,用OpenStack用户登陆后即可进入相应的操作系统,使用要使用的软件。并且,用户可以通过网盘服务,将所需要的文档资料拷入拷出,同时,我们为用户提供一块云端硬盘,用户存入此块磁盘的文件可以永久保存,在下一次登陆后,仍然可以方便的使用。

瞬联如何建设私有云?

        记得OpenStack北京行活动时,陈沙克老兄曾经提到过微软的那句名言:Eat your own dog food(吃你自己的狗食)。所以,我们认为如果想提供基于OpenStack的服务,那么必然自己先要用好,这也是我们在内部大力推广我们云服务的重要原因。

        在最开始部署我们的私有云服务时,我常常纠结的两个问题是:我需要新的硬件设备吗?我的旧的硬件怎么办?最后,我得出的结论就是我在OpenStack APAC讲的那句话:立足现有装备,打赢未来战争。所以从现有阶段来看,瞬联在私有云硬件成本的投入几乎为零。因为现有的硬件资源完全满足项目需求,我为什么要购置昂贵的硬件设备呢?但并不意味着我们永远不购置新的硬件设备,从一个长远的发展来看,我们的策略是:随着项目逐步迁移到云中,根据实际的需求购买更好的硬件设备,逐步淘汰耗电大,占空间的老旧设备

        因为我们毕竟不像那些预算充裕的大公司,可以随意购置新设备。所以我们的解决方案针对的是像我们一样,花自己的钱,又想构建私有云的中小企业。

        这里援引我一位非常要好的哥们对于国内云计算市场评价的话:

“对于云计算的价值,真的是见人说人话,见鬼说鬼话。国内云计算产业,究其源头会发现,基本是IBM、HP、SUN、DELL、VMware、Citrix等这些软硬件提供商在引导,把偌大的国内云计算市场往沟里带,说白了就是为了卖硬件和软件。国内各大运营商、各政府机构等有钱的地方,都有大国盛宴,举国体制的风范,开始跑马圈地,搞集中IDC,搞大事业……”

网络规划&高可用

        好了,说了这么多废话,开始说点干货吧。先上一张拓扑图:


        我们选用的OpenStack网络是传统的VLAN方式,并没有使用Quantum,这是因为在Essex版本时,Quantum还不是正式的模块,所以到了Folsom版本,我们延续了原有的VLAN方式。VLAN方式很好的实现了各个项目之间的隔离,保证了安全性。

        为了能够让各个分公司都能够使用私有云,我们先划定了一条各个分公司都能够访问的VLAN作为提供公共服务的网段,再划定一条VLAN作为虚拟机内部通讯的网络。同时在相关交换机上预留VLAN ID 800~850,50条VLAN与OpenStack内部VLAN相对应,同一VLAN下虚拟机之间通讯不受影响。通过这些手段,保证了无论我们的计算节点位于哪一层的机房,都可以进行通讯。

        在图中,最左侧为控制节点,其中OpenStack控制节点和网盘应用形成MySQL集群,用于实时备份数据,任意一台出现问题之后,另外一台可以快速作为对方的备份节点。下面的一台是为了提供自动部署的服务器。

        中间靠上的两台服务器,分别提供镜像和卷服务,利用GlusterFS形成冗余,并可互为灾备节点。因为GlusterFS并不支持块设备,所以这里用到的Cinder驱动为NFS。中间的服务器代表一个机房中的某几台服务器形成一个Zone,这个Zone专门为CL这个项目组提供虚拟机服务。中间靠下的服务器是SWIFT服务器,作为网盘的后台。

        最右边的服务器,代表OpenStack控制节点所在机房如何和另外一个机房的服务器连接。那么这几台服务器形成一个独立的区域,为整个瞬联内部提供服务。

        监控方案采用Nagios,对主机性能及关键进程形成监控,后期准备在已有的Nagios OpenStack Plugin基础上增加一些关键指标的监控。

部署

        我们当前采用的OpenStack版本为定制版Folsom,底层操作系统为Ubuntu 12.04 64bit Server版本。操作系统采用kickstart实现推送,本地缓存了所有DEB包,无须网络安装。IT人员只须设定好网络地址,之后由Fabric脚本完成主机名、NTP、Puppet等基础软件的安装。

        因为是我们定制的版本,所以市面上所有的部署方案基本都是不适用的,我们基于dodai-deploy,开发了可以部署我们自己软件的版本,并且将所有的数据库全部默认使用MySQL(默认的dodai-deploy只有nova是使用MySQL数据库)。


        我们全新部署一台计算节点的时间,从裸机到能够使用大致为30分钟之内。

定制化

        还是先上一张图:


        凡是有蓝色的模块是我们定制过的模块和增加的模块,主要集中在Keystone、Nova、以及Horizon三个模块,在Cinder中增加了关于NFS驱动层的三个方法。

        Nova是我们最早开始改动的模块,为了实现对于虚拟机申请的控制,我们增加了一张表用于存放用户所有申请及状态。之后增加Flow api用于实现相应的请求。最后,增加了nova-flow服务用于通知用户虚拟机过期和删除过期的虚拟机。这样配合Horizon的改动,就可以完成了对虚拟机申请流程的控制。


可供申请的虚拟机列表


用户申请页面,增加申请天数、区域等信息


        在Keystone中,为了实现Zone和项目绑定的目的,我们增加了相关方法,并且增加了一个新的角色ProjectAdmin,用于在某一个项目中,完成用户虚拟机申请的审批工作。因为OpenStack主要是针对公有云的开发,所以暂时没有把这部分代码提交到社区。

管理员可以设置Project允许生成虚拟机的区域


        Cinder中,因为NFS驱动中,并没有生成卷镜像和从卷镜像生成新镜像的方法,所以这部分代码,正准备提交到社区。

网盘应用

        网盘应用基于OpenStack Swift API开发的。提供在线文档、图片浏览、群组分享功能,现在支持的格式:DOC/XLS/PPT/PDF/PNG等多种常见的文档和图片格式。我们准备在近期将我们的版本开源,回馈社区。还是图片最容易说明问题,继续上图:

用户登陆后的页面,私人空间


在线浏览功能


虚拟化桌面应用

        虚拟化桌面包括VDI Broker以及Visual两个部分,Broker主要负责处理RDP协议解析以及和Visual交互,而Visual则完全负责资源分配。VDI同时支持添加虚拟机和物理机,现阶段暂时需要云管理员对所有可用服务器进行配置,在下一个阶段将根据需求启停虚拟机。如果用户使用的是虚拟机,那么在用户登陆后,自动挂载一块用户硬盘,用户保存在此硬盘的所有资料,在下一次使用VDI服务时仍然存在。还是来看图:

架构图


标准的RDP客户端连接


用户选择要使用的资源池,完成连接


结语

        在半年的内部运行中,系统非常稳定,随着新功能的不断更新,内部的用户也愿意使用云平台服务。各个项目的负责人也积极的将项目的开发、测试环境放到云中运维,而这也直接帮助他们更好的控制项目进度,缩短准备周期。我们相信随着我们不断的努力,一定能让企业私有云在我们的企业日常生活中发挥越来越重要的作用。

        当然,我们还有很多工作要做,还有很多功能要完善,我们也希望和社区、和更多行业用户、企业交流,以帮助我们更好的优化、完善我们的解决方案,也希望帮助有需要的企业用户创建一个稳定、良好的企业级私有云平台。

        最后,也欢迎对我们解决方案感兴趣用户与我们做进一步交流。

我的新浪微博 @RaySun

电子邮箱:qsun01185@cienet.com.cn


欢迎转载,请注明作者。







Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐