综观许多云计算服务模式,比如用户云(又叫软件即服务)、开发云(又叫平台即服务)和系统云(又叫基础设施即服务),有大量多种多样的应用程序可供选择,既有商业产品,又有免费的开源产品。本文列举目前主流的开源云计算软件,让你可以精挑细选应用程序,为贵企业构建一套可靠、整合的云计算解决方案。
云计算是当今IT界最火热和突出的词汇概念,开源云计算更是被认为是IT的趋势。我们熟知的几个IT巨头的云计算平台,如亚马逊EC 2、IBM的蓝云、微软的Azure、Google的GFS、甲骨文的Sun Cloud等,那么开源云计算的平台又有哪些呢?以下列举了开源中国社区收录的5款知名的开源云计算平台。
关键字:云计算,开源,云计算平台
云管理软件比较 产品:Eucalyptus, OpenNebula, OpenStack, OpenQRM, XenServer, Hadoop、Oracle VM, CloudStack, ConVirt
云管理软件比较
产品:
Eucalyptus,
OpenNebula,
OpenStack,
OpenQRM,
XenServer,
Oracle
VM,
CloudStack, ConVirt
五种主要开源云计算平台特征与性能比较如下表:
Abiquo公司平台 |
1)abiCloud可以创建管理资源并且可以按需扩展,具有强大的Web界面管理,支持VMware,KVM和Xen。 2)abiNtense,类似于Grid的架构,可用来减少大量高性能计算的执行时间。 3)abiData 由Hadoop,hBase,Pig开发而来,可以用来搭建分析大量数据的应用,是低成本的云存储解决方案。 |
Eucalyptus |
Amazon EC2的一个开源实现,与商业服务接口兼容,依赖于Linux和Xen进行操作系统虚拟化。 |
10gen MongoDB |
可用于创建自己的私有云,类似于App Engine的一个软件栈,提供与App Engine 类似的功能,可使用Python以及JavaScript和Ruby语言开发应用程序。还可使用沙盒概念隔离应用程序,并且使用它们自己的应用服务器的许多计算机(在Linux上构建)提供一个可靠的环境。 |
Enomalism |
可编程的虚拟云架构,EC2风格的IaaS,功能类似于EC2的云计算框架。基于Linux,同时支持Xen和KVM。与其他纯IaaS解决方案不同的是,提供了一个基于TurboGears Web 应用程序框架和Python的软件栈。 |
Nimbus |
Nimbus由网格中间件Globus提供,Virtual Workspace演化而来,与Eucalyptus一样,提供EC2的类似功能和接口。 |
云计算拥有无限潜力有待人们开发挖掘,云计算的发展将给信息社会的发展带来历史性的飞跃,本文在介绍云计算及云计算平台构架的基础上,总结分析了当前主要的开源云计算平台的特征,通过简单的对比和初步分析,得出:Abiquo公司的abiCloud, abiNtense和abiData都可以用来架构和开发公有私有混合云,其中AbiCloud较之同类其他产品的一个主要的区别在于其强大的Web界面管理。abiNtense可减少大量高性能计算的执行时间。而abiData是一种低成本的云存储解决方案;Eucalyptus和Nimbus有EC2的类似功能和接口,但Nimbus由网格中间件Globus提供;Enomalism是一种可编程的虚拟云架构,与其他纯IaaS解决方案不同的是,提供了一个基于TurboGears Web 应用程序框架和Python的软件栈;10gen MongoDB可用于创建自己的私有云,类似于App Engine的一个软件栈,提供与App Engine 类似的功能。
开源云计算软件的若干优点
虽然市面上有数量众多的商业软件可用于构建云基础设施,但是在你开始花血汗钱之前,也许应该看一下可供使用的开源方案。虽然开源云软件常常被称为是商业云软件的“替代品”,其实根本不是这样。而在许多情况下,开源应用程序是同类软件中率先使用云技术的。
有许多理由求助于开源软件来满足你的云计算要求。如果求助于一个或多个这样的开源应用程序,贵公司可以省下一大笔费用,具体取决于公司规模。此外,你可能会发现自己在与大规模企业竞争,对方其实在运行与你一样的开源软件,实际上让竞争环境变得了公平一点。
但是也有其他理由可能迫使你试一下这些方案。许多云计算开源项目有更庞大的用户群。由于实施软件的门槛很低,有更多数量和类别的人在使用它,而且软件背后常常有充满活力的社区,充当支撑体系。开源项目通常具有创新精神,很短的发布周期推动技术前进。实际上,用户常常根据实际的商业要求来决定下一个特性发布周期。
另外,开源意味着可以随意享用应用编程接口(API)和编写它们所使用的开放标准。应用程序代码库更透明,这常常有助于推动创新前进,加大社区支持。
综观许多云计算服务模式,比如用户云(又叫软件即服务)、开发云(又叫平台即服务)和系统云(又叫基础设施即服务),有大量多种多样的应用程序可供选择,既有商业产品,又有免费的开源产品。你可能会注意到,许多开源项目有着更崇高的目标,原因在于庞大、开发的社区,广大开发者致力于编写创新的软件,希望进一步推动云计算技术。幸好,有开放标准,许多开源应用程序可以彼此联系,让你可以精挑细选应用程序,为贵企业构建一套可靠、整合的云计算解决方案。
这样的应用程序和解决方案就包括如下:Salesforce.com、Google Docs、Red Hat Network、VMware Cloud Foundry、Google AppEngine、Windows Azure、Rackspace Sites、Red Hat OpenShift、Active State Stackato、AppFog、EC2、Rackspace Cloud Files、OpenStack、CloudStack、Eucalyptus、OpenNebula及另外许多。
不妨更近距离地看一看如今市面上的主流开源云计算软件。
一、开源虚拟机管理程序
Xen云平台(XCP)
XCP含有思杰公司的商业发行版XenServer的一小部分功能。它包括Xen API工具堆栈,提供了主机系统池管理、多租户模式、存储库、支持SLA以及预先整合网络和磁盘功能(比如Open vSwitch)。 XCP可以通过ISO来安装,类似XenServer,附有所有一样的驱动程序。虽然与XenServer不一样,但是代码库大部分一样。XCP还可以通过安装在Debian GNU/Linux和Ubuntu Linux中的程序包管理器下的XCP-XAPI程序包来获得和配置。ISO基于CentOS 5.x,使用XAPI本地管理,支持XenServer的大多数功能。然而,它是类似黑盒的设备,只能在CentOS上工作,而XCP-XAPI程序包易于定制、易于从源代码来构建,并以程序包的形式存在,那样你就能围绕它们组装自己的系统。缺点就是,相比ISO,XCP-XAPI在功能方面有一些限制,而且只支持数量有限的存储库类型,而ISO支持大多数类型。
相关链接:http://www.xenproject.org
KVM
基于内核的虚拟机(KVM)是一个开源项目,为在x86硬件上运行的GNU/Linux开发。由于可装入的Linux内核模块(kvm.ko),KVM可与安装有KVM的GNU/Linux系统整合起来,包括针对特定处理器的Linux内核模块(kvm-intel.ko或kvm-amd.ko)。作为一套完整的虚拟化系统,编写了许多外部程序来管理KVM映像。KVM可以运行GNU/Linux或微软Windows系统的多个映像,包括可访问专有的网卡、磁盘、显卡和USB等。虽然KVM与Linux内核整合起来(自Linux 2.6.20起,KVM就是主线代码的一部分),Xen之类的虚拟机管理程序却是外部的,不得不控制安装有KVM的机器,并利用资源管理;KVM充当系统的一部分,使用Linux调度程序和内存管理。目前,KVM需要QEMU(开源模拟器)才能工作,但是撰写本文时,该项目在努力摈弃这种依赖。
相关链接:http://www.linux-kvm.org
VirtualBox
为了非商业机构易于使用,VirtualBox可以在多种平台上工作,易于安装和设置。它提供x86和AMD64/英特尔64虚拟化,在家庭环境和企业环境下都很容易得到利用。它可以在Windows、Linux、Macintosh和Solaris主机上运行,支持主机安装Windows(NT 4.0、2000、XP、Server 2003、Vista、Windows 7和Windows 8)、DOS/Windows 3.x、Linux(2.4、2.6和3.x)、Solaris及OpenSolaris、OS/2以及OpenBSD。VirtualBox拥有众多引人入胜的功能:可以轻松运行多个操作系统访客;你的限制主要取决于系统内存和处理器能力。可以使用VirtualBox来建立虚拟网络,用于实验室环境,比如渗透测试、构建集群原型和贝奥武夫(Beowulf)集群模板。一项名为“快照”的功能让用户可以保存虚拟机状态,如果需要的话,可以恢复到之前的那些状态。你还可以构建系统、配置系统并交付虚拟机,用于客户的VirtualBox实例。相比另外一些知名的商业虚拟化解决方案,VirtualBox 因占用的内存和处理器资源最少而著称。
相关链接:https://www.virtualbox.org
OpenVZ
OpenVZ基于“容器”技术,它不是一种名副其实的虚拟化应用程序。它拥有经过改动的Linux内核(意味着主机系统只能是某种版本的GNU/Linux),经过了定制,以支持OpenVZ容器。容器是独立的实体,依赖资源管理和检测点(借助经过改动的Linux内核),其行为总的来说如同正常的服务器,有文件系统、应用程序、用户、用户组等。主机内存对OpenVZ容器来说更为灵活,原因在于没有被一个容器使用的内存可以轮换、供另一个容器使用。OpenVZ中的资源管理包括用户计数器、磁盘输入/输出调度程序、处理器调度程序和两级磁盘配额。在运行过程中不需要重启即可更改这些资源,这对开发者和测试人员或者对运行的活动系统与用户交互的人来说是诱人的功能。容器是安全的、隔离的,在服务器上的应用程序之间不太有冲突,不然这些应用程序会共享库或目录空间。OpenVZ是采用GNU公共许可证(GPL)发行的,是免费软件。
相关链接:http://openvz.org/Main_Page
LXC
与OpenVZ一样,LXC也是一种容器技术,作为一种用户空间接口而存在,支持Linux内核容器控制功能。这些功能包括:内核命名空间(ipc、uts、mount、pid、network和user)、来自Apparmor和SELinux的配置文件、Seccomp策略、通过pivot_root的chroot以及cgroup(控制组)。LXC还不完全是虚拟机,仍能提供类似Linux安装的环境,就像VirtualBox中的虚拟机上那样。然而,不需要LXC下有单独的内核,因为它扎根于主机内核。与OpenVZ一样,LXC使用主机内核的资源管理和检查点。LXC包含众多容器模板、管理容器的标准工具、支持多种语言(Ruby、Python、Go和Lua)的绑定,以及liblxc库(libvirt被认为是一种替代的库)。LXC是免费软件,大多数代码按照GNU LGPL许可证的条款来发行(访问LXC官方网站,即可了解不是采用LGPL许可证的组件方面的细节)。
相关链接:https://linuxcontainers.org
二、开源云设备
Bitnami
获得预构建的设备从来没有这么容易过。与SUSE Studio一样,用户可以使用预构建的Bitnami堆栈,下载虚拟机或安装程序。可从Bitnami获得的应用程序包罗万象:从基础设施和云工具,到客户关系管理(CRM)、内容管理系统(CMS)和企业内容管理(ECM),不一而足。耳熟能详的应用程序包括:WordPress、Joomla、Drupal、Moodle、JBoss、LimeSurvey、DokuWiki、SugarCRM和ownCloud等等。另外,Bitnami提供一系列堆栈,包括Ruby、Django、LAMP、WAMP、WAPP、MAMP、LAPP和MAPP。Bitnami设备拥有诸多功能,比如具有独立、安全、最新等优点,按一致的标准来构建。每个设备都捆绑有它所需要的所有库、数据库和运行时环境。每个设备都针对互联网上最常见的使用和情况进行了优化。Bitnami还通过亚马逊网络服务,为需要设备所提供的功能,可是又没有资源来下载和安装设备的那些人提供云服务。
相关链接:https://bitnami.com
BoxGrinder
眼下BoxGrinder主要是一种命令行构建工具,用于构建虚拟化用途和云部署的设备,BoxGrinder这个项目在不断开发之中。目前支持构建基于Fedora、CentOS、红帽企业级Linux(RHEL)和Scientific Linux的设备。设备目前可以部署到VMware、VirtualBox、VirtualPC和EC2。交付的内容包括一组插件,可用于本地交付、SFTP、S3、EBS、ElasticHosts和OpenStack。不过眼下,只能在Fedora上构建设备。用Ruby编写的BoxGrinder需要rubygem用于安装和管理程序包。由于项目还在开发之中,附加功能还在规划之中,BoxGrinder是未来值得关注的项目,但是构建系统的局限性和设备操作系统底层的局限性会让你暂时关注其他的云设备应用程序。
相关链接:http://boxgrinder.org
Oz
Oz是为了便于自动安装操作系统而开发的,它从用户获得首次安装的极少输入后,迅速推出一个完整的系统。Oz可以安装操作系统、定制操作系统,并生成程序包清单文件。不过,Oz方面有些地方需要手动维护。就新的操作系统和版本而言,它们需要手动添加。必须经常更新Oz,才能支持新的操作系统版本。作为其功能的一部分,Oz使用操作系统提供的原生安装工具来执行安装。虽然Oz支持安装一系列广泛的操作系统,包括RHEL、CentOS、Scientific Linux、Fedora、OpenSUSE、Debian、Ubuntu、Mandrake、Mandriva、FreeBSD和Windows,不过就这每一款操作系统及不同版本而言,Oz可能支持其中一种操作(安装、定制和生成清单文件),也可能不支持。然而,不像其他许多堆栈安装或操作系统安装工具,Oz让操作系统的安装就像它安装在裸机系统上一样。
相关链接:https://github.com/clalancette/oz/wiki
SUSE Studio
SUSE Studio自2009年首次发布以来就大受欢迎,迅速经历了从LifeHacker到TuxRadar的几轮评估。借助最初由Novell SUSE(现在的SUSE)发布的在线Linux映像创建工具,该网站让你很容易配置青睐的操作系统 (从核心应用程序到系统级定制),然后使用自动化工具来构建系统。RPM可以上传到构建环境,也可以添加软件库。因而生成的映像可以作为ISO(Live CD/DVD,预装)、虚拟机(VMware/VirtualBox/OVF/Xen)、SUSE云或USB映像来下载。还有一系列广泛的预装映像可以选择,既有SUSE开发的,也有SUSE Studio用户贡献的。默认映像都基于SUSE,既有openSUSE,又有SUSE Linux Enterprise Server。除了这些功能外,SUSE还能通过之前存在的AWS帐户上传AMI映像,为EC2映像创建实例,还可以通过之前存在的Windows Azure帐户,上传VHD映像,为Azure应用程序创建实例。
相关链接:https://susestudio.com
三、开源计算云(IaaS)
Apache CloudStack
尽管外面传闻Java不会继续是许多主要云应用程序的核心,但它依然扮演这一重要角色。Apache CloudStack的核心是用Java编写的一批功能,包括用户管理、多租户和帐户分离、网络、计算和存储等资源核计、基于Web的管理控制台、原生API及与亚马逊S3/EC2兼容的API,以及支持主存储/辅助存储。Apache CloudStack可以与XenServer/XCP、KVM、Hyper-V和VMware上的主机协同运行。Apache CloudStack用来部署和管理虚拟系统组成的大型网络,被许多提供商选择用来为客户部署私有云、公有云和混合云等解决方案。额外的功能特性包括:高可用性、作为服务云计算平台的可扩展基础设施,以及用户和开发者组成的庞大社区(他们不断推动技术进步、改进功能特性)。
相关链接:http://cloudstack.apache.org
Eucalyptus
虽然目前只出现在CentOS和红帽企业级Linux上,但是Eucalyptus作为一种完整的IaaS解决方案,已经备受关注。Eucalyptus包括云控制器(CLC)、Walrus(持续性数据存储)、集群控制器(CC)、存储控制器(SC)、节点控制器(NC)和可选的VMware代理(VB),这俨然是一款功能齐全的产品。每个组件都是一种独立的Web服务(VB除外),旨在让Eucalyptus可以为每种服务提供API(与语言无关)。这种基于Linux的系统让用户可以使用一种基于行业标准的模块化框架,在现有的基础设施里面部署私有云和混合云。尤其是,Eucalyptus提供了隔离各路流量的虚拟网络覆盖层,让多个集群在同一局域网(LAN)上可以做到透明,同时保持数据完整性。此外,Eucalyptus通过API与亚马逊的EC2、S3、IAM、ELB、自动扩展(Auto Scaling)和CloudWatch等服务兼容,因而对实施混合云方案来说再理想不过了。
相关链接:https://www.eucalyptus.com
OpenNebula
OpenNebula结合了功能项目和功能研究,声称是数据中心虚拟化发展道路上迈出的下一步。从研究的角度来看,该项目力求开发先进的、自适应的虚拟化数据中心和企业云。通过与云计算领域的其他开源项目和研究人员合作,OpenNebula希望还能获得云计算软件的稳定性和质量。该项目的核心价值包括:流程和技术开放性、项目的所有生命周期都确保出色以及云开发方面的创新。至于其实际的功能产品,目前声称的主要功能特性包括:界面直观的自助服务门户网站、自动化服务管理目录、管理和超级用户界面、设备市场、性能及容量管理、高可用性、业务连续性、虚拟基础设施管理、企业级安全、第三方工具整合,以及开发者直接提供出色的产品支持和基于服务级别协议(SLA)的商业支持。
相关链接:http://opennebula.org
OpenStack
在所有IaaS解决方案当中,OpenStack是出现在云计算架构多个产品领域的两种解决方案之一。OpenStack这个全球性项目由Rackspace和美国宇航局共同创办,它们开发了一个大规模扩展的云运营系统,采用了Apache 2.0许可证,可随意使用。OpenStack并不要求使用专有的硬件或软件,被设计成可以在完全虚拟的系统和裸机系统里面都能够运行。支持多种虚拟机管理程序,包括KVM和XenServer,还支持容器技术,包括LXC。OpenStack应用广泛,从为客户部署IaaS的服务提供商,到为项目团队和各部门提供私有云服务的企业IT部门,不一而足。OpenStack可与Hadoop协同运行以满足大数据要求,可以纵向和横向扩展,以满足不同的计算要求,还提供高性能计算(HPC)以处理密集的工作负载。主要的功能特性包括:虚拟机映像缓存、基于角色的访问控制、虚拟机映像管理、局域网管理、通过Web浏览器的VNC代理、浮动IP地址及其他众多功能。
相关链接:https://www.openstack.org
四、开源云存储软件
GlusterFS
GlusterFS使用FUSE(用户空间中的文件系统)与VFS(虚拟文件系统)连接起来建立了一种在用户空间里面或者在内核及其特权扩展件外面编写的集群网络文件系统。GlusterFS使用ext3、ext4和xfs之类的现有文件系统来存储数据。GlusterFS之所以大受欢迎,是由于用户可以使用这样一种框架:能够扩展,在单一挂载点下提供数PB数据。GlusterFS可以将文件分布到一组子卷上,用一批较小的存储单位组成一个大的存储单位。这可以跨一台或几台服务器上的卷来实现。可以通过添加新服务器来增加卷,尤其是可以实时添加。由于复制功能,GlusterFS提供了存储冗余性和可用性。
相关链接:http://www.gluster.org
Ceph
Ceph的技术基础是可靠的自主分布式对象存储(RADOS),它在单个统一的存储集群中为应用程序提供了对象存储、块存储和文件系统存储。由于库让客户机应用程序可以直接访问基于对象的RADOS存储系统,用户就能充分利用RADOS块设备(RBD)、RADOS网关以及Ceph文件系统。RADOS网关提供了与亚马逊S3和OpenStack兼容的接口,以便连接RADOS对象存储。此外,POSIX是Ceph的一项主要的特性。POSIX语义用Ceph的传统文件系统来驱动接口,那样使用符合POSIX的文件系统的应用程序就能轻松使用Ceph的对象存储系统。额外的库让用C、C++、Java、Python和PHP编写的应用程序也可以访问Ceph对象存储文件系统。高级的功能包括:部分/完整读取/写入、快照、对象级键值映射和原子事务(具有附加、截断和克隆范围等功能)。Ceph还与几种虚拟机客户软件兼容。
相关链接:http://ceph.com
OpenStack
在OpenStack的许多架构特性当中,存储是基本的云架构必备要件之一。OpenStack提供了可扩展、冗余的对象存储,使用服务器集群,可以存储数PB数据。借助这种分布式存储系统,OpenStack为其功能组合添加了另一层面的可扩展性、冗余性和耐久性。数据写入到数据中心中的多个磁盘上,数据复制得到管理,数据复制得到保障。对在意预算的那些人来说,OpenStack存储解决方案既可以将数据写到老式的小容量驱动器上,也可以写到新式的高速驱动器上。对OpenStack存储不满意?OpenStack与其他存储解决方案兼容,比如Ceph、NetApp、Nexenta、SolidFire和Zadara。额外的功能包括:快照(可以恢复或用来创建新的存储块)、扩展(添加新的服务来扩展和跨节点复制数据)、支持块存储、自愈合、众多功能强大的管理工具(可报告使用情况、性能和一般情况),包括审查工具。
相关链接:https://www.openstack.org
Sheepdog
Sheepdog是另一种分布式对象存储解决方案,恪守代码库小巧、简单和易于使用的原则。Sheepdog主要用于卷和容器服务,能够智能化管理磁盘和节点,它可以扩展至数千个节点。Sheepdog可以连接到QEMU虚拟机和Linux SCSI目标设备,还支持快照、克隆和自动精简配置。它还可以连接到在裸机硬件上运行的其他虚拟机和操作系统(不过iSCSI必须得到支持)。Sheepdog支持libvirt和OpenStack,可与HTTP Simple Storage进行联系,还有后端存储功能,比如支持丢弃、日志功能、支持单一节点上的多磁盘以及支持擦除代码。由于通过Web接口可与OpenStack Swift和亚马逊S3兼容,Sheepdog能存储和检索海量数据。
相关链接:http://sheepdog.github.io/sheepdog/
五、开源平台即服务(PaaS)
Cloud Foundry
由VMware开发的Cloud Foundry将丰富多样的产品和服务作为平台即服务来提供,它是VMware昨EMC合资创办的Pivotal Sotware公司的一部分。Ruby开发者和用户组成的庞大开放社区支持Cloud Foundry,不仅专注于代码库,还专注于这个PaaS提供的托管服务。Cloud Foundry为其托管解决方案提供的服务包括:MySQL DB、VFabric Postgres、MongoDB、Redis和RabbitMQ。作为一种相当简单直观的模式,Cloud Foundry提供了诸多机制,可用于部署应用程序、为云环境设计应用程序、推送应用程序、使用服务、迁移数据库、使用环境变量以及映射自定义域。此外,Cloud Foundry提供了客户端工具,比如cf命令行工具、Eclipse插件和构建整合工具。Cloud Foundry还有应用程序日志、第三方日志管理服务整合、Splunk整合和应用程序清单文件。如今该项目眼里的主要竞争对手包括AppScale、Heroku、OpenShift和谷歌应用程序引擎。
相关链接:http://cloudfoundry.org
Cloudify
Cloudify主要致力于自动化,可以自动安装、部署、监控和修复应用程序堆栈,还可以根据使用情况,自动扩展应用程序堆栈。Cloudify使用Oasis基金会开发的名为TOSCA的技术,TOSCA的全称是面向云应用程序的拓扑结构和编排规范;Cloudify声称其技术“致力于改善云应用程序和服务的移植性。有了TOSCA,就能够统一描述应用程序和基础设施云服务、服务各部分之间的关系,以及这些服务的操作行为(比如部署、打补丁和关闭),独立于开发服务的供应商以及任何云提供商或主机托管技术。TOSCA还让更高层的操作行为有可能与云基础设施管理关联起来。”使用TOSCA蓝图,你可以指定“配方”(recipe),配方成为你的应用程序堆栈模板。Cloudify支持与OpenStack、AWS、CloudStack、微软Azure和VMware整合。
相关链接:http://getcloudify.org
OpenShift
OpenShift PaaS是红帽公司的一项主要服务;该公司目前支持该软件的私有云版本:OpenShift Enterprise。OpenShift允许部署可在红帽企业级Linux上运行的二进制代码。支持的语言包括:JavaScript、Ruby、Python、PHP、Perl、Java、Haskell和.NET。OpenShift支持众多数据库,包括MySQL、PostgreSQL、MongoDB和微软SQL Server。可以在OpenShift下面发现一些最流行、应用最广泛的Web应用程序框架,比如Ruby、WSGI for Python、PSGI for Perl和Node.js for JavaScript。额外的框架包括Laravel、CodeIgniter、CakePHP、Ruby on Rails、Django、Perl Dancer、Flask、Sinatra、Tornado和Web2py。为了保持竞争力(也就是叫板AppScale、Heroku、Cloud Foundry、谷歌应用程序引擎、Jelastic和ElasticBox),OpenShift提供了企业级功能,比如加快应用程序服务交付、尽量避免厂商锁定、自助服务和按需应用程序堆栈以及标准化的开发者工作流程。PaaS还是个“多面手”,支持许多编程语言和框架、企业应用程序(支持Java EE6)、内置数据库服务,还支持多种环境(开发环境、测试环境和生产环境)。OpenShift的其他功能特性包括:依赖项及版本管理、持续集成及版本管理、源代码版本管理、远程SSH登录到应用程序容器、IDE集成、应用程序远程调试、丰富的命令行工具集、反应迅即的Web控制台以及其他功能。
相关链接:https://www.openshift.com
Stackato
ActiveState的Stackato提供常见的功能特性,包括可定制的应用程序商店、Web管理控制台、活动流和自助服务。Stackato拥有的其他特性包括:端到端开发、自动配置、集中式集群管理、动态负载均衡及弹性扩展、放置区及可用区、应用程序自动扩展和持久性文件系统共享。由于实际上采用了自助服务模式,ActiveState可以在短短几分钟内而不是数周内完成部署。由于属于开发者驱动,Stackato团队制作了一款出色的开发、构建和发布工具。因致力于敏捷企业这个群体,上市时间是ActiveState为Skackato采用的设计模式的一个关键驱动因素。报告功能涵盖上市时间、停运时间、使用情况和性能等方面。
相关链接:http://www.activestate.com/stackato
WSO2 Stratus
WSO2 Stratos被知名调研机构加特纳集团(Gartner)评为是“有远见者”,自诩为“最全面的企业级云解决方案”。它支持的核心服务数量超过如今市面上的其他PaaS方案;一些企业力求“将从企业内部实施异构环境获得的灵活性和创新扩展到云端”,对它们来说这是不错的选择。WSO2 Stratos提供众多功能,包括可扩展的cartridge架构(可以以插件的模式接入到PHP、MySQL和Tomcat等第三方运行时环境,支持为WSO2 Carbon产品构建基于Puppet的cartridge,配置以添加多租户或单租户cartridge);经过改进的云部署支持,可支持多个IaaS(在亚马逊网络服务EC2经过了全面测试,对OpenStack和vCloud提供试验性支持;能够通过jclouds API支持任何IaaS;云突发可扩展至同时支持多个IaaS;可用于私有云、公有云和混合云等解决方案),而且易于开发SaaS应用程序(对多租户和单租户模式提供内置支持,支持用户身份管理、计量和计费)。PaaS还为数据存储提供了易于访问、缓存和查询的功能,还有作为多租户应用程序的SaaS应用程序,让每个租户都可以在旁边部署自己的自定义逻辑。组件分配协调器(ADC)将支持外部的Git和GitHub软件库,还包括这项功能:将应用程序日志发布到集中位置,便于监控。
相关链接:http://wso2.com/landing/stratos-donation-to-apache/
六、开源软件定义网络工具
Floodlight
作为一种企业级OpenFlow控制器(OpenFlow是开放网络基金会管理的一项开放标准),Floodlight采用了Apache许可证,基于Java。Floodlight是一种开放的SDN控制器,可与通过OpenFlow协议进行联系的虚拟和物理交换机协同运行。此外,它还能指定用于远程控制网络设备的协议,比如交换机、路由器、虚拟交换机及其他接入点等设备。有了OpenFlow,Floodlight就能远程控制交换机的数据包转发表、流表规则、转发或阻止流量,并且充分利用自定义接口和脚本语言。主要的功能特性包括:模块装入系统、极少的依赖项、支持OpenFlow和非OpenFlow网络以及高性能。Floodlight背后还有一个庞大的社区在支持OpenStack。
相关链接:http://www.projectfloodlight.org
Indigo
开源项目Indigo能够支持物理交换机上和虚拟机管理程序交换机上的OpenFlow。它还是Big Switch Networks公司的Switch Light交换机软件的基础。Indigo为许多流行的交换机提供了固件,因而让那些交换机可以享用OpenFlow技术。这项技术包括拥有一套核心库的Indigo代理以及硬件抽象层(HAL),以便与交换机轻松整合,通过Indigo实现转发和端口管理功能。还有一个抽象层用于交换机上的“混合”模式OpenFlow。Indigo还随带一款名为LoxiGen的编译器,该编译器可生成编组/反编组(marshalling/unmarshalling)库。Indigo固件既有预构建的二进制代码格式,又可以通过虚拟机来分发源代码。另外还提供Indigo虚拟交换机,这是与KVM兼容的开源虚拟交换机,包含与OpenFlow整合的Indigo框架。
相关链接:http://www.projectfloodlight.org/indigo/
OpenStack Networking“Neutron”
作为OpenStack项目的一部分,Neutron在OpenStack服务(比如Nova)管理的接口设备(比如网卡)之间提供了“网络即服务”。虽然是OpenStack核心的一部分,Neutron因其规模以及作为“NaaS”产品的功能而理应得到特别注意。用户可以构建多层Web应用程序拓扑结构,利用先进的网络功能(比如端到端服务质量或NetFlow监控)。先进的网络功能可以通过插件添加到OpenStack租户网络中,比如负载均衡即服务、VPN即服务、防火墙即服务、入侵检测系统(IDS)即服务和数据中心互联即服务。Neutron提供了Horizon GUI,可支持Neutron第2层/第3层网络、子网建立/删除以及启动VMson Neutron网络。还提供了一套API,可以利用该API来编写扩展件。
相关链接:https://wiki.openstack.org/wiki/Neutron
Open vSwitch
作为一种多层软件交换机,Open vSwitch支持一系列广泛的功能特性,包括带干线和接入点的802.1Q虚拟局域网(VLAN)、网卡绑定(带或不带LACP上游机制)、NetFlow/sFlow、服务质量、通用路由封装(GRE)、基于IPSEC的GRE、虚拟扩展局域网(VXLAN)、LISP隧道、802.1ag连接故障管理、OpenFlow、通过Linux内核的高性能转发以及事务配置数据库。借助内核模块,Open vSwitch可以完全在用户空间里面运行,或者作为基于内核的交换机,支持多种虚拟化技术,包括Xen/XenServer、KVM和VirtualBox。还特别支持思杰XenServer和红帽企业级Linux这两种主机。Open vSwitch的组件包括:守护程序“ovs-vswitched”、数据库服务器软件“ovsdb-server”、用于配置查询和更新的工具“ovs-dpctl”,以及用于管理和监控的其他众多工具。
相关链接:http://openvswitch.org
七、开源NoSQL数据库
Apache Cassandra
Apache Cassandra这种数据库在硬件、虚拟系统或云基础设施上提供了可扩展性、高可用性和容错性。由于列索引、日志结构更新、非规范化和物化的视图以及内置缓存机制,许多大规模企业组织已选择使用Cassandra,包括Constant Contact、 欧洲原子核研究组织(CERN)、康卡斯特、电子港湾、GitHub、GoDaddy、Hulu、Instagram、Intuit、Netflix、Reddit、美国天气频道及其他众多组织。功能特性包括:自动复制到多个节点以实现容错;让集群节点保持一样,避免了单一故障点;更新过程中的同步或异步复制,以及支持读取/写入吞吐量,没有停机时间或干扰。还提供了面向Apache Cassandra的第三方合同支持服务。
相关链接:http://cassandra.apache.org
CouchDB
CouchDB是为了满足Web应用程序数据库的需要而专门编写的,它缺少一种预定义的数据结构(即模式)。CouchDB数据存储在JSON文档里面,这些文档含有的名称字段可以是字符串、数字、日期或排序列表和关联映射。CouchDB支持Web和移动应用程序,可以直接从CouchDB里面提供Web应用程序。CouchDB使用JavaScript来描述,可以聚合、连接和报告数据库文档,而不影响文档的底层结构。CouchDB完全分布式、基于对等,服务器和离线客户机可以拥有同一数据库的独立复制副本。复制活动包括冲突管理、增量复制及双向复制、过滤后的复制以及主/从复制和主/主复制。CouchDB用Erlang编程语言编写而成,内置了支持并发、分布和容错的机制;语言和运行时环境能够充分利用有多个处理器核心的较新硬件。
相关链接:http://couchdb.apache.org
HBase
Apache Hbase以在Hadoop分布式文件系统(HDFS,即Apache的Hadoop文件系统)上运行而出名,具有分布式、可扩展、安全、高可用性等优点。HBase仿照谷歌的BigTable,可处理含有几十亿行和几百万列的庞大数据表,可以利用同一集群里面多台服务器上的存储、内存和处理器等资源,那样数据库就能实现横向扩展。其他功能特性包括:跨表和列的Kerberos安全性、自动分片、完全一致性,以及便于添加服务器以增加计算容量的向外扩展架构。HBase还有压缩、内存中操作和针对每列的布隆过滤器等功能。MapReduce任务在Hadoop中运行,可以使用HBAse表用于输入和输出。
相关链接:http://www.cloudera.com/content/cloudera/en/products-and-services/cdh/hbase.html
Hypertable
Hypertable仿照Bigtable(谷歌的大规模扩展数据库),拥有一种扁平的表结构,采用键前缀和块数据压缩。它与关系数据库没多少相似之处,除了这一点:它以采用行和列这种形式的信息表来表示数据。Hypertable中的行键是UTF-8字符串,不支持数据类型、连接或事务。Hypertable中的信息以大规模数据表的形式存储,按行键排序,行键是唯一的、主要的键。Hypertable的其他功能包括:单元版本控制(时间戳)、列修饰符、命名空间(就像文件系统中的目录层次结构),以及为RangeServer进程添加额外服务器时可实现“实时”扩展。
相关链接:http://www.hypertable.org
MongoDB
开源文档数据库MongoDB用C++编写而成,是一种NoSQL数据库。功能包括:面向文档的存储(JSON式样的文档和动态模式)、支持全面索引(针对任何属性)、复制和高可用性(跨局域网和广域网)、自动分片(横向扩展)、查询、快速就地更新以及映射/化简。MongoDB还有灵活的聚合和数据处理、GridFS(存储任何大小的文件)、MongoDB管理服务和专业支持。MongoDB的一大优点就是嵌入的文档和数组,它们减少了需要开销很大的连接。此外,动态模式支持顺畅多态,文档对应于许多编程语言中的原生数据类型。
相关链接:https://www.mongodb.org
Redis
Redis用ANSI C编写而成,是一种联网的内存中键值数据存储系统。这是一种大受欢迎的键值数据存储系统,已经与它有着密切关系的语言包括ActionScript、C、C++、C#、Clojure、Common Lisp、Dart、Erlang、Go、Haskell、Haxe、Io、Java、JavaScript(Node.js)、Lua、Objective-C、Perl、PHP、Pure Data、Python、R、Ruby、Scala、Smalltalk和Tcl。主要的功能特性包括:键值映射的字典数据模型、通过将整个数据集存储到内存中实现的持续性、主从复制以及通过内存中存储提升的性能。Redis还提供开发阶段集群、IaaS和PaaS平台中易于使用的特点,以及将Radis用作托管服务的功能(没必要启动数据库的虚拟机实例)。
相关链接:http://redislabs.com
Riak
这种数据库是一种云存储和分布式数据库相结合的解决方案(Riak CS/Riak),目的在于在私有云和公有云中提供任何规模的云存储。Riak具有诸多功能特性:与亚马逊S3-API兼容、可了解每个租户的情况(通过网络输入/输出来了解)、支持元数据和大对象、多数据中心复制及更多功能。Riak中的数据在默认情况下具有私密性;访问控制列表可用来进一步完善数据可见性。然而,目前并不支持对“静态数据”进行加密;数据在获取时没有经过任何压缩(不过可以由外部应用程序来进行压缩)。
相关链接:http://docs.basho.com/riakcs/latest/
八、开源配置工具
Axemblr Provisionr
这个Apache孵化器项目主要是一种跨多个云的虚拟机池管理工具。作为一项简单的服务,Axemblr Provisionr可以管理几十个或几百个虚拟机组成的池。该项目专注于半自动化的工作流程、云移植性和配置管理。为了实现云移植性,API隐藏起来,并做了一些假设,比如平台运行特定的操作系统,拥有预安装的程序包和库、DNS设置和网络配置。该项目的外部依赖项目前都有Apache兼容许可证,比如Activiti(Apache 2.0)、AWS SDK(Apache 2.0)、jclouds(Apache 2.0)和Google Guava(Apache 2.0)。Axemblr目前用于根据需要在企业内部部署Hadoop集群,用于测试和质量保证。
相关链接:http://provisionr.incubator.apache.org
Cobbler
Cobbler倡导的口号就是化简(reduce)、重复使用(reuse)、回收(recycle)。作为支持快速配置网络环境的Linux安装系统,Cobbler依赖庞大的模板库来配置及管理DNS和DHCP之类的服务。为了最大限度地重复使用代码,kickstart和preseed之类的所有响应文件也都模板化。除了模块库外,Cobbler还有一大堆的代码片段可以嵌入到模板中。目的在于,支持管理员易于使用,并且省去编写新代码的时间,让管理员可以管理和响应。应用程序用Python编写而成,总共只有大约1.5万行代码,就一款企业应用程序而言异常短小。不过,由于强大的功能特性和丰富的配置选项,又能够与Puppet之类的配置管理应用程序联系起来,Cobbler比其他一些更庞大的资源配置工具更像是一款管理员工具。
相关链接:http://www.cobblerd.org
JuJu
Ubuntu的JuJu有一个讨巧的主题:charm可通过charm商店来获取。在你的云上运行JuJu就如同利用GUI或命令行接口来定义、配置、部署、管理、监控服务,并将服务扩展到任何公有云或私有云一样简单。有了几乎可以满足各种要求的charm,通过插件添加新的配置功能就跟部署之前,搜索Ubuntu charm商店,然后将你所需要的charm拖到“画布”(canvas)上、配置新功能来得一样容易。charm可以通过服务彼此连接起来,已预先构建,知道与哪些charm兼容。JuJu通过Landscape提供了服务监控、警报和额外智能,Ubuntu的这个系统管理工具可用于检查、重启和更新运行中的服务。
相关链接:https://juju.ubuntu.com
Salt Cloud
虽然号称使用简单,但SaltStack在大小、功能多样性和配置可能性方面类似OpenStack。这款系统和配置管理软件拥有可高度配置的资源配置功能,支持大多数基础设施、云和开发运营等环境。Salt Cloud的一些企业功能包括:通过其基础设施自动化和云编排,推送拉取远程执行、为数据中心工作流程和任务编排详细描述(overstate)、应用程序配置及持续部署、混合云配置及管理以及并行管理。SaltStack将一致性和简单性作为卖点,尤其是凭借Salt声称的最低的管理成本和运营成本,单一的独立式平台以及根本不需要编程。它还提供了一种高效的配置管理系统,根本不需要专有的管理工具、代码或语言。它有单一的用户界面和命令行、统一的用户体验以及易于部署和管理。
相关链接:http://www.saltstack.com
Dell Crowbar
戴尔的Crowbar很惹人注目。戴尔的这种云计算框架最先于2011年在开源大会(OSCON)上开放源代码,似乎仍然是很重要的框架。Crowbar让用户可以简化在云端配置、部署及使用企业硬件的任务。戴尔Crowbar用户可以在线移动硬件,快速高效地安装和配置应用程序,并且安装操作系统,不必等工作人员架设和配置服务器。Crowbar便于硬件出现故障后快速恢复,还能够安装及配置应用程序和操作系统,只需要一次。现在添加了Hadoop后,增添了支持多操作系统的功能。一种名为“barclamp”的模块化概念俨然成形,可用于包装部署基础设施的单个层。这些barclamp让其他应用程序可以通过插件插入到Crowbar框架,充当具有独特生命周期的独立模块,提供其他barclamp可以使用的服务,并执行其他众多操作。
相关链接:http://www.dell.com/learn/us/en/19/cloud-computing/crowbar-software-framework
九、开源配置管理工具
Ansible
Ansible是一种模型驱动型配置管理工具,充分利用SSH,改善安全、简化管理。除了配置管理外,它还能够让应用程序部署(甚至多层部署)、工作流程编排和云配置实现自动化,因而Ansible公司喜欢该工具被归为“编排引擎”这一类。Ansible基于五大设计原则,包括易于使用(不需要编写脚本或自定义代码)、易于掌握(对管理员和开发者来说都是如此)、全面的自动化(让你可以做到你环境中的几乎一切都实现自动化)、高效率(因为它在OpenSSH上运行,因而不依赖内存或处理器资源),以及安全性(它天生来得更安全,因为不需要代理、额外端口或根级守护程序)。与其他许多开源项目一样,Ansible也有一款收费产品,使用一种名为Ansible Tower的Web用户界面。
相关链接:http://www.ansible.com/home
CFEngine
作为市面上最早的功能齐全的配置管理系统之一,CFEngine已推出了好几个版本,就在操作系统由本地数据中心进入到云端的同时,它依然保持了重要地位。作为基础设施自动化框架的核心,CFEngine还是一种建模和监控合规引擎,它占用很少的资源就能够运行。按照CFEngine的建议,识别初始预期状态的几个步骤包括如下:1)为你环境的预期状态建模;2)先模拟配置变化,然后再提交;3)验证预期状态,为自动自愈准备就绪;4)收集实际状态与预期状态的差异方面的报告。CFEngine有一个庞大的库,里面可重复使用的数据驱动型模型将帮助用户为预期状态建模。这些基础设施模式旨在可以跨整个企业重复使用。
相关链接:https://cfengine.com
Chef
Chef既有一款开源产品,又有一款企业产品,这种功能强大的工具可用于全面的IT基础设施配置管理。由于开源Chef同为这两种产品的核心,共同的功能特性包括:一种灵活、可扩展的自动化平台,可访问800多本可重复使用的“食谱”(cookbook),并与领先的云服务提供商整合起来。Chef还提供企业平台支持,包括Windows和Solaris,让你可以创建、启动和管理OpenStack云。它易于安装(归功于“一键式”Omnibus安装工具)、系统自动发现(归功于Ohai)、基于文本的搜索功能以及支持多种环境。其他值得注意的功能包括“Knife”命令行接口、测试潜在变化的“模拟执行”(Dry Run)模式,以及在单一Chef服务器上管理10000多个节点的功能。Chef企业版才有的功能特性包括:可作为主机托管服务来提供、经过改进的管理控制台、集中式活动和资源报告,另外还有“推送”(Push)指挥与控制客户软件运行。Chef企业版还包括多租户模式、基于角色的访问控制(RBAC)、高可用性安装支持及验证,以及使用LDAP或活动目录的集中式验证。
相关链接:http://www.getchef.com
Puppet
Puppet最初是一种广受欢迎的开发运维工具,如今已迅速成为一股潮流。Puppet用Ruby编写而成,与Chef一样,它同样既有开源版,也有企业版。不过,虽然Chef为开源版和企业版都提供了相当丰富的功能特性,而Puppet将大部分功能特性放入到企业版。开源版随带的功能特性包括:资源配置(亚马逊EC2和谷歌计算引擎),配置管理(操作系统和应用程序),外加Puppet Forge上的2000多个预构建配置。企业版拥有的功能特性则要多得多,除了开源版的功能外,还包括图形化用户界面、事件检查工具(直观地显示基础设施的变化)、得到支持的模块和资源配置(VMware虚拟机)。另外还包括配置管理(发现和用户帐户)、编排、任务自动化以及基于角色的访问控制(支持外部验证)。Puppet 企业版还有一个统一的跨平台安装工具,可以安装所有组件和支持服务。
相关链接:http://puppetlabs.com
Salt
作为一款更庞大的企业就绪的应用软件的一部分,Salt配置管理组件正如人们预料的那样强大稳健、功能齐全。基于远程执行核心而建,系统的执行在“minion”节点上进行;minion节点收到来自中央Salt主节点的命令后,返回相应命令的结果。Salt支持同时配置成千上万个主机的任务。基于主机“状态”,根本不需要编程以编写配置文件;配置文件很短小,易于理解,可以帮助识别每个主机的状态。此外,对于确实习惯编程的那些人或想更大程度地控制及熟悉配置文件的管理员来说,可以利用任何语言来进行配置。
云计算体系中的定位
C2MS应用及特点
IaaS (Infrastructure as a service)
基础设施即服务。消费者通过 Internet 可以从完善的计算机基础设施获得服务。
PaaS (Platform as a service)
平台即服务,实际上是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。
SaaS (Software as a service)
软件即服务的简称,它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动。
C2MS功能特点
1)C2MS产品支持多种虚拟化技术
2)用户自助服务
3)账单计费系统
4)集成的性能监控
5)强大的运营中心
6)先进的运维流程管理
综合利用Nagios、Ganglia和Splunk搭建起的云计算平台监控体系,具备错误报警、性能调优、问题追踪和自动生成运维报表的功能。有了这套系统,就可轻松管理Hadoop/HBase云计算平台。
云计算早已不是停留在概念阶段了,各大公司都购买了大量的机器,开始正式的部署和运营。而动辄上百台的性能强劲的服务器,为运营管理带来了巨大的挑战。
如果没有方便的监控报警平台,对于管理员而言犹如噩梦,每天都将如救火队员一样,飞快地敲击键盘,用原始的 Unix命令在多台机器中疲于奔命。如果没有好的日志管理平台,对于开发者Troubleshooting更是一件泪流满面的事情。而如果你是运维团队的总负责人,简洁清晰的 Report则非常重要。Stakeholder们动不动就可能问起系统的SLA、机器的利用率等诸多问题,毕竟,公司为此投入了巨大的资金和人力。
朋友们,当我们管理起公司寄予厚望的云计算平台时,当我们面对如此多充满挑战的实际问题时,该怎么办?
概述
我们在搭建趋势云计算平台时,遇到了很多的问题和挑战。开始搭建时,第一次来了那么多性能强劲的机器,我们在感到兴奋的同时,也不免有些顾虑。大家坐在一起讨论,问题就列了满满一白板。
出了问题怎么办,有没有预警机制?有没有可视化的管理界面?管理平台需要自己开发吗?开发难度有多大?有没有开源的管理工具?那么多日志分布在各个机器上,有没有更有效的方法管理?能否生成好的报表?机器宕机,管理员能否收到短信通知?如何做性能调优?扩容升级时,能否给出依据?
带着这些问题,我们开始了自己的云计算平台管理和运营之旅,一路走来,收获颇丰。现在基本上形成了如图1所示的一整套云计算平台监控体系。
图1 云计算平台监控架构
在这个系统中,我们综合利用了Nagios、Ganglia和Splunk,搭建起云计算平台监控体系,使其具备错误报警、性能调优、问题追踪和自动生成运维报表的功能。有了这套系统,我们终于能够轻松管理Hadoop/HBase云计算平台了。接下来将简单介绍它们的特点和功能。
Nagios:云计算平台的智能报警器
总不能天天盯着机器看吧,因此我们首先关心的是机器的监控与报警。最理想的境界是:如果机器出故障了,我能第一时间处理;如果机器没有问题(最好永远没有问题),我能去喝茶、钓鱼和睡大觉。
发现机器有没有问题,对我们而言不是什么难事。写个脚本,Ping一下IP,Telnet每台机器的Service端口,如果增加了新机器就改改配置即可。但这样也太原始了吧,可视化效果差,不好维护,没有层次,不好管理,出不来报表,总不能老是用Excel人工写报表吧。有没有更好的方法呢?
有,你可以用Nagios。
Nagios是一个可运行在Linux/Unix平台之上的开源监视系统,可以用来监视系统运行状态和网络信息。Nagios可以监视所指定的本地或远程主机以及服务,同时提供异常通知功能。
Nagios可以提供以下几种监控功能。
监控网络服务( SMTP、POP3、HTTP、NNTP、Ping等)。监控主机资源(处理器负荷、磁盘利用率等)。简单的插件设计使得用户可以方便地扩展自己服务的检测方法。并行服务检查机制。具备定义网络分层结构的能力,并使用“ parent”主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态。当服务或主机问题产生与解决时将告警发送给联系人(通过电子邮件、短信、用户定义方式)。具备定义事件处理功能,可以在主机或服务的事件发生时获取更多问题定位。自动的日志回滚。可以支持并实现对主机的冗余监控。可选的 Web界面用于查看当前的网络状态、通知和故障历史、日志文件等。
Nagios最好用的地方就是它将这些每天管理员做的工作自动化,你只需设定好要监听的端口即可,它会默默地工作,帮忙定时地去检测服务端口的状态,一旦发现问题,会及时发出报警。报警可以是电子邮件也可以是手机,从而使得管理员第一时间就能收到系统的状况。
Nagios的报表功能也很强大。管理员可以很容易地得到每天、每周和每月的Service运行状况。
图2 SPN 后台运行的所有Service的当前状态
如图2所示,红色部分清楚地标注有问题的机器,点开链接,就可以得到有问题机器的情况。虽然在HBase中,几台Region Server宕机不会对整体服务产生大的影响,但多少会影响到系统的Performance。而且,如果某几台Region Server频繁宕机,对整个系统的稳定性也会产生不好的影响。有了Nagios,我们可以快速定位有问题的机器,及时地将一些机器移除出HBase系统,待调整好了再上线运行,以保证系统的稳定性。
现在,Nagios已经成为了很多公司必备的监控工具。只需要简单地配置,就可以实现强大的功能,将管理员从日常烦琐的工作中解放出来。
有了Nagios,哪怕就是管理上千台机器,也不会手忙脚乱,而是有一种统领千军、运筹帷幄的感觉。
Ganglia:看到云计算平台的方方面面
Nagios的确不错,但你是不是真的可以喝茶、钓鱼、睡大觉呢?显然还不行。有了Nagios,你基本上可以做个优秀的救火队员,能在事发第一时间到达现场、处理事故。但如何防患于未然,真正做到运筹帷幄、游刃有余呢?
我们需要更加精确的数据,能够看到云计算平台的方方面面,能根据这些数据,做出性能调整、升级、扩容等的决策,从而保证Service能够满足不断增长的业务需求。
这时候,你需要Ganglia。
Ganglia是UC Berkeley发起的一个开源实时监视项目,用于测量数以千计的节点,为云计算系统提供系统静态数据以及重要的性能度量数据。Ganglia系统基本包含以下三大部分。
Gmond:Gmond运行在每台计算机上,它主要监控每台机器上收集和发送度量数据(如处理器速度、内存使用量等)。
Gmetad:Gmetad运行在Cluster的一台主机上,作为Web Server,或者用于与Web Server进行沟通。
Ganglia Web前端:Web前端用于显示Ganglia的Metrics图表。
Hadoop和HBase本身对于Ganglia的支持非常好。通过简单的配置,我们可以将Hadoop和HBase的一些关键参数以图表的形式展现在Ganglia的Web Console上。这些对于我们洞悉Hadoop和HBase的内部系统状态有很大的帮助。
在Hadoop的conf文件夹下面,找到hadoop-metrics.properties,配置好Ganglia的Server即可。这里要注意,Ganglia 3.0和Ganglia 3.1的区别,它们使用了不同的class。
dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
dfs.period=10
dfs.servers={Ganglia_Server}:8649
有了这些图表,Hadoop和HBase就不再是一个黑盒。无论是Hadoop的Namenode、Datanode,还是HBase的MasterServer、RegionServer任何时刻的情况,都会一目了然。由于图标的跨度可以是小时、天、月甚至是年,这样,就可以非常方便地定期生成周报、月报和年报。同时,根据图中Metrics的状况,我们可以通过调整参数、增加内存和硬盘、增加机器等的方法调整单个机器或者整个Service的性能。
图3 Hadoop其中一个DataNode的Metrics
Nagios 最大的问题在于不能洞悉到Service内部的状况。像Hadoop、HBase这样的分布式系统,一个节点的故障并不等于整个Service的故障,影响的只是Service的性能。所以,在测定Service的SLA时,我们不能以某一台机器的故障作为Service故障的评判标准。比如在我们的HBase SLA的设定上,我们定义了HBase Service完全不能工作的评判标准如下。
Master Server 联系不上。所有 RegionServer 都无法联系上。-ROOT- 表无法访问。.META. 表无法访问。
图4 Ganglia对Hadoop/HBase使用情况的监测
那么,我们就可以根据这个规则定义SLA,通过定期调用HBaseAdmin相应API ,将测试的结果发给Ganglia。采用同样的方法,我们还可以自定义一些规则,监视HBase Master、Zookeeper等的情况。
通过这些方法,我们完全能够针对Hadoop/HBase使用的实际情况,做出Service级别而不是机器级别的监控系统并生成报表。
此外,Ganglia还可以通过Server反馈回来的Load信息,给出各个机器的Load情况,给我们做升级和扩容提供依据。
如图5所示,Ganglia分别会用不同颜色,标注出当前时刻的机器Load分布情况。如果Load过重,就应该检查机器的具体使用情况。
图5 HBase Cluster Load Metrics
Ganglia的安装配置,可以参考:http://www.spnguru.com/?p=604。
Splunk:像查Google一样查日志
有了Nagios和Ganglia,算是成功了一大半。作为一名优秀的管理员,我们需要具备一定的Troubleshooting能力,对一些常见的问题能给出解决方案。那么,对日志的分析就必不可少。
但Hadoop/HBase的日志分布在各个机器上面,而日志之间关联性强。Client端的错误有可能是Region Server引起,而Region Server的错误有可能是Zookeeper导致。有没有一个统一的日志管理平台呢?
众里寻它千百度,蓦然回首,我们找到了Splunk——日志界的Google。
很遗憾,Splunk不是开源的,但它的免费版本提供每天500MB日志索引。如果数据量较小,通过定义好Log的级别,基本上也能满足需求。但对于数据量较大的公司,就有些捉襟见肘。
Splunk支持AdHoc的日志搜索,而且可以与Nagios配合使用。比如Nagios报警某台RegionServer端口不可达,我们收到Notification后,登录Splunk,直接搜索shutdown和host名称,找到RegionServer退出的日志。点击详细信息,分析日志,就能快速定位问题。如图6所示。
图6 Splunk与Nagios配合使用进行日志搜索
对Hadoop和HBase有了进一步了解后,我们可以利用Splunk实时检测日志中的关键字,定义关键字规则,如监控“shutdown”、“quit”、“ERROR”、“Zookeeper Session Expired”等,一旦出现,利用Splunk的Notification功能,发出邮件通知管理员,管理员通过Splunk定位问题,就可以在系统真正出现问题之前,对系统进行调整,防患于未然。
具体Splunk的设置,可以参考:http://www.spnguru.com/?p=122。
总结
搭建一套云计算平台,强大的监控管理系统是必不可少的。当然,任何工具都不是万能的,在实际维护过程中,我们也发现,Nagios和Splunk经常出现误报,如果规则定义得不好,大量的警报邮件如潮水一样涌来,反而掩盖了真正的问题。可以说,在云计算平台的运维管理上,没有一劳永逸的事情,随着规模的不断增大和应用的不断多样化,需要大家不断地实践和总结。
参考:云计算 - 开源软件库 - 开源中国社区 http://www.oschina.net/project/tag/220/cloud
15个你可能不知道的开源云平台 - skyme - 博客园 http://www.cnblogs.com/skyme/archive/2012/06/05/2536185.html