了解云计算
人类基于千年的物种衍变基础,在这个世纪终于有了爆发式的科技成果,尤其这二十年内互联网的发展,更像是一种催化剂,让原本已经热闹的地球更加的沸腾,互联网经济泡沫破灭后的科技研发却变得更加卖力,一次次的突破着传统研究中对人类脑力、科技最终式的定义,把“来自未来”的产品带到用户面前,那么到底互联网未来会变成什么样子,人类最终的归宿会是怎么样,我们不得而知,但可以肯定的是科技研发一直是由人类需求来驱动的。
众所周知Google谷歌是一家致力于互联网搜索、云计算、广告技术等领域的科技企业,一直在努力为全球无数的用户提供着大量基于互联网的产品与服务,而Amazon亚马逊则是全美国最大的网络电子商务公司,销售内容涉及方方面面,业务范围更是遍布全球,对于这种互联网巨头企业自然少不了庞大的基础设施的支撑,但是传统的硬件设施一旦投入就要一大笔钱,并且在业务的淡季也要一直的空闲,这样无疑产生了资源和资金的巨大浪费,所以最初的云计算便是由Google与Amazon分别提出的,核心理念之一就是通过云计算服务降低用户对资源拥有的成本。
当用户能够通过互联网方便的获取到计算、存储等服务时,我们比喻自己使用到了“云计算”,云计算并不能被称为是一种计算技术,而更像是一种服务模式,云计算服务好像拥有无穷的力量,能够预测气候变化、还能够模拟核弹爆炸,好像只要你需要,“云”就可以为你提供每秒万亿次的计算服务,满足你的一切需求,每个运维人员心里都有一个对云计算的理解,而最普遍接受的是NIST(美国国家标准与技术研究院)的定义:
云计算是一种按使用量付费的服务模式,这是一种能够提供可用的、便捷的、按需求的网络访问模式,计算共享池能够快速的为用户提供网络、服务器、存储、应用软件及其他服务,并且只需要花费很少的管理时间。
NIST还针对于云计算的服务模式提出了3个服务层次:
Iaas:提供给用户的是云计算基础设施,包括CPU、内存、存储、网络等其他的资源服务,用户不需要控制存储与网络等基础设施。
Paas:提供给用户的是云计算中的开发和分发应用的解决方案,用户能够部署应用程序,也可以控制相关的托管环境,比如云服务器及操作系统,但用户不需要接触到云计算中的基础设施。
Saas:提供给用户的是云计算基础设施上的应用程序,用户只需要在客户端界面访问即可使用到所需资源,而接触不到云计算的基础设施。
Openstack项目
Openstack最初是由NASA和Rackspace共同发起的云端计算服务项目,该项目以Apache许可证授权的方式成为了一款开源产品,目的是将多个组件整合后从而实现一个开源的云计算平台,目前Openstack项目正在被红帽、IBM、AMD、Intel、戴尔、思科、微软等超过一百家厂商共同研发,并已经支持了几乎所有的常见云计算环境,拥有了良好的可扩展性,而且部署搭建Openstack服务也变得十分简单,目前国内对于云计算的需求也逐渐增加,华胜天成、高德地图、京东、阿里巴巴、百度、中兴、华为等中国企业也加入到了Openstack项目研发当中,Openstack项目也正在随着全球内得到了众多厂商的参与支持而快速成熟。
Open是开放,Stack则是堆砌之意,合起来就是将众多的功能服务堆积起来的集合,让人们通过Openstack云计算项目,能够将诸如计算能力、存储、网络和软件等资源抽象成服务,以便让用户可以通过互联网远程来享用,付费的形式也变得因需而定,调整方便,拥有极强的虚拟可扩展性,是公共和私有云的建设与管理软件中的优秀开源项目。
Openstack作为一个云平台的管理项目,其功能组件覆盖了网络、虚拟化、操作系统、服务器等多个方面,每个功能组件交由不同的项目委员会来研发和管理,目前核心的项目包括有:
功能 项目名称 描述
计算服务 Nova 负责虚拟机的创建、开关机、挂起、迁移、调整CPU、内存等规则。
对象存储 Swift 用于在大规模可扩展系统中通过内置的冗余及高容差机制实现对象存储的系统。
镜像服务 Glance 用于创建、上传、删除、编辑镜像信息的虚拟机镜像查找及索引系统。
身份服务 Keystone 为其他的功能服务提供身份验证、服务规则及服务令牌的功能。
网络管理 Neutron 用于为其他服务提供云计算的网络虚拟化技术,可自定义各种网络规则,支持主流的网络厂商技术。
块存储 Cinder 为虚拟机实例提供稳定的数据块存储的创建、删除、挂载、卸载、管理等服务。
图形界面 Horizon 为用户提供简单易用的Web管理界面,降低用户对功能服务的操作难度。
测量服务 Ceilometer 收集项目内所有的事件,用于监控、计费或为其他服务提供数据支撑。
部署编排 Heat 实现通过模板方式进行自动化的资源环境部署服务。
数据库服务 Trove 为用户提供可扩展的关系或非关系性数据库服务。
Openstack项目的版本按照ABCDEFG……的顺序发布,每6个月更新一次,Openstack版本发布历史:
版本名称 发布时间
Liberty 2015年10月15日
Kilo 2015年4月30日
Juno 2014年10月16日
Icehouse 2014年4月17日
Havana 2013年10月17日
Grizzly 2014年4月4日
Folsom 2012年9月27日
Essex 2012年4月5日
Diablo 2011年9月22日
Cactus 2011年4月15日
Bexar 2011年2月3日
Austin 2010年10月21日
开源社区成员和Linux技术爱好者可以选择使用Openstack RDO版本,RDO版本允许用户以免费授权的方式来获取openstack软件的使用资格,但是从安装开始便较为复杂(需要自行解决诸多的软件依赖关系),而且没有官方给予的保障及售后服务,请读者们仔细的按实验步骤安装,就一定没有问题的~
服务模块组件详解
Openstack是一个云计算的平台,也像是部署云操作系统的工具集,可以通过调取不同的组件来构建虚拟计算及云计算服务,比较重要的包括有计算(compute)、对象存储(Objectstorage)、认证(Identity)、仪表板(Dashboard)、块存储(Block Storage)、网络(Network)和镜像服务(image service),Openstack服务组件协同工作拓扑:
Nova提供计算服务
Nova可以称作是Openstack云计算平台中最核心的服务组件了,它作为计算的弹性控制器来管理虚拟化、网络及存储等资源,为Openstack的云主机实例提供可靠的支撑,其功能由不同的API来提供。
Nova-api(API服务器):
API服务器用于提供云计算设施与外界交互的接口,也是用户对云计算设施进行管理的唯一通道,用户通过网页来调用各种API接口,再由API服务器通过消息队列把请求传递至目标设置进行处理。
Rabbit MQ Server(消息队列):
Openstack在遵循AMQP高级消息队列协议的基础之上采用了消息队列进行通信,异步通信的方式更是能够减少了用户的等待时间,让整个平台都变得更有效率。
Nova-compute(运算工作站):
运算工作站通过消息队列接收用户的请求并执行,从而负责对主机实例的整个生命周期中的各种操作进行处理,一般会架设多台计算工作站,根据调度算法来按照实例在任意一个计算工作站上部署。
Nova-network(网络控制器):
用于处理主机的网络配置,例如分配IP地址,配置项目VLAN,设定安全群组及为计算节点配置网络。
Nova-Volume(卷工作站):
基于LVM的实例卷能够为一个主机实例创建、删除、附加卷或从主机中分离卷。
Nova-scheduler(调度器)
调度器以名为"nova-schedule"的守护进程方式进行运行,根据对比CPU架构及负载、内存占用率、子节点的远近等因素,使用调度算法从可用的资源池中选择运算服务器。
Glance提供镜像服务
Openstack镜像服务是一套用于主机实例来发现、注册、索引的系统,功能相比较也很简单,具有基于组件的架构、高可用、容错性、开发标准等优良特性,虚拟机的镜像可以被放置到多种存储上。
Swift提供存储服务
Swift模块是一种分布式、持续虚拟对象存储,具有跨节点百级对象的存储能力,并且支持内建冗余和失效备援的功能,同时还能够处理数据归档和媒体流,对于超大数据和多对象数量非常高效。
Swfit代理服务器:
用于通过Swift-API与代理服务器进行交互,代理服务器能够检查实例位置并路由相关的请求,当实例失效或被转移后则自动故障切换,减少重复路由请求。
Swift对象服务器:
用于处理处理本地存储中对象数据的存储、索引和删除操作。
Swift容器服务器:
用于统计容器内包含的对象数量及容量存储空间使用率,默认对象列表将存储为SQLite或者MYSQL文件。
Swift帐户服务器:
与容器服务器类似,列出容器中的对象。
Ring索引环:
用户记录着Swift中物理存储对象位置的信息,作为真实物理存储位置的虚拟映射,能够查找及定位不同集群的实体真实物理位置的索引服务,上述的代理、对象、容器、帐户都拥有自己的Ring索引环。
Keystone提供认证服务
Keystone模块依赖于自身的Identity API系统基于判断动作消息来源者请求的合法性来为Openstack中Swift、Glance、Nove等各个组件提供认证和访问策略服务,
Horizon提供管理服务
Horizon是一个用于管理、控制Openstack云计算平台服务器的Web控制面板,用户能够在网页中管理主机实例、镜像、创建密钥对、管理实例卷、操作Swift容器等操作。
Quantum提供网络服务
重要的网络管理组件。
Cinder提供存储管理服务
用于管理主机实例中的存储资源。
Heat提供软件部署服务
用于在主机实例创建后简化配置操作。
安装Openstack软件
主机名称 IP地址/子网 DNS地址
openstack.example.com 192.168.23.128.24 192.168.23.2
使用vim编辑器写入主机名(域名)与IP地址的映射文件:
准备脚本配置本地yum
准备openstack相关yum源
tar xjf epel.tar.bz2
tar xjf openstack-juno.tar.bz2
解压bz2
将/dev/sdb创建成逻辑卷,卷组名称为cinder-volumes:
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb
安装Openstack的应答文件:
安装openstack服务程序:
packstack --allinone --provision-demo=n --nagios-install=n
创建云平台的网卡配置文件:
[root@openstack ~]# vim /etc/sysconfig/network-scripts/ifcfg-br-ex
DEVICE=br-ex
IPADDR=192.168.23.128
NETMASK=255.255.255.0
BOOTPROTO=static
DNS1=192.168.23.2
GATEWAY=192.168.23.2
BROADCAST=192.168.23.254
NM_CONTROLLED=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
ONBOOT=yes
DEVICETYPE=ovs
TYPE=“OVSIntPort”
OVS_BRIDGE=br-ex
vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
DEVICE=“eno16777728”
ONBOOT=yes
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
NM_CONTROLLED=no
IPV6INIT=no
将网卡设备添加到OVS网络中:
ovs-vsctl add-port br-ex eno16777728
ovs-vsctl show
重启网络配置成功!!
执行身份认证脚本:
[root@openstack ~]# source keystonerc_admin
[root@openstack ~(keystone_admin)]# openstack-status
打开浏览器进入http://192.168.23.128/dashboard:
查看用户名密码
成功登录
使用Openstack服务
配置虚拟网络
要想让云平台中的虚拟实例机能够互相通信,并且让外部的用户访问到里面的数据,我们首先就必需配置好云平台中的网络环境。
Openstack创建网络:
编辑网络配置:
点击创建子网
创建子网信息:
填写子网详情(DHCP地址池中的IP地址用逗号间隔):
子网详情:
创建私有网络:
创建网络:
填写网络信息:
设置网络详情:
查看网络信息:
…
添加路由信息:
…
填写路由名称:
设置路由的网关信息:
设置网关:
在网络拓扑中添加接口:
添加接口信息:
路由的接口信息(需要等待几秒钟后,内部接口的状态会变成ACTIVE):
22.5.2 创建云主机类型
我们可以预先设置多个云主机类型的模板,这样可以灵活的满足用户的需求,先来创建云主机类型:
填写云主机的基本信息:
创建上传镜像:
Cirros是一款极为精简的操作系统,非常小巧精简的Linux系统镜像,一般会在搭建Openstack后测试云计算平台可用性的系统,特点是体积小巧,速度极快,那么来上传Cirros系统镜像吧:
查看已上传的镜像(Cirros系统上传速度超级快吧!):
…
22.5.3 创建主机实例
创建云主机实例:
填写云主机的详情(云主机类型可以选择前面自定义创建的):
查看云主机的访问与安全规则:
将私有网络网卡添加到云主机:
查看安装后的脚本数据:
查看看磁盘的分区方式:
主机实例的孵化过程大约需要10-30秒,然后查看已经运行的实例:
…查看实例主机的网络拓扑(当前仅在内网中):
为实例主机绑定浮动IP地址:
为主机实例添加浮动IP
选择绑定的IP地址
将主机实例与IP地址关联:
此时再查看实例的信息,IP地址段就多了一个数据值(192.168.23.53):
尝试从外部ping云主机实例(结果是失败的):
ping 192.168.10.51
原因是我们没有设置安全组规则那,需要让外部流量允许进入到主机实例中:
填写策略组的名称与描述:
管理安全组的规则:
添加安全规则:
允许所有的ICMP数据包流入(当然根据工作有时还需要选择TCP或UDP协议,此时仅为验证网络连通性):
编辑实例的安全策略组:
将新建的安全组策略作用到主机实例上:
再次尝试从外部ping虚拟实例主机:
[root@openstack ~]# ping 192.168.23.53
PING 192.168.10.51 (192.168.10.51) 56(84) bytes of data.
64 bytes from 192.168.10.51: icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from 192.168.10.51: icmp_seq=2 ttl=63 time=0.684 ms
64 bytes from 192.168.10.51: icmp_seq=3 ttl=63 time=1.54 ms
64 bytes from 192.168.10.51: icmp_seq=4 ttl=63 time=1.33 ms
^C
— 192.168.10.51 ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2908 ms
rtt min/avg/max/mdev = 0.764/1.497/2.479/0.672ms
添加云硬盘
云计算平台的特性就是要能够灵活的,弹性的调整主机实例使用的资源,我们可以来为主机实例多挂载一块云硬盘,首先来创建云硬盘设备:
填写云硬盘的信息(以10GB为例):
编辑挂载设备到主机云实例:
将云硬盘挂载到主机实例中:
查看云主机实例中的硬盘信息:
控制云主机实例
经过上面的一系列配置,我们此时已经创建出了一台能够交付给用户使用的云主机实例了,查看下云平台的信息:
编辑安全策略,允许TCP和UDP协议的数据流入到云主机实例中:
分别添加TCP和UDP的允许规则:
成功登录到云主机实例中(默认帐号为"cirros",密码为:“cubswin:)”):
查看云主机实例的网络情况: