一、前言
之前研究了一下openstack的M版本,对openstack的各个基础组件版本都有了比较简单的理解,现做如下总结,欢迎大牛前来纠正和指导。
二、openstack基础服务
基础服务即是部署openstack必须要装的服务,但是其实horizon也不是必须要装的,但是一般web图形界面管理应该是大家都需要的,所以就算在了基础服务里面。
三、openstack存储服务
存储服务也是openstack中非常最要的组件,如果我们希望我们的数据能够独立于虚拟机实例存在,即使虚拟机实例删除之后也可以继续保存数据,就需要将数据存储于存储服务中,存储服务主要分为对象存储,块存储和共享文件系统三种,分别对应三种不同类型的存储需求类型
四、openstack共享服务
共享服务即是为其他openstack服务提供公共服务的组件,有如下3个服务。
五、openstack后台服务
所谓后台服务,即是平台租户不会直接使用的openstack服务,但是openstack平台内部均是有这些服务支撑运行,提供必要的后端数据存储和通信等,包含以下3个组件:
六、openstack组件详细介绍
以下部分是对openstack各个组件组成的详细介绍。
1) glance组件详细介绍
以下是对glance组件中详细组成内容的介绍:
glance-api
负责整个glance服务的对外API接口,接收镜像的拉取,上传,删除等请求;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
glance-registry
负责虚拟机镜像的存储和元数据的管理,例如镜像的存储位置,大小和类型等等。
Storage repository for image files
支持多种后端存储类型,例如普通文件系统,对象存储,Ceph块存储,HTTP,S3等等。
2) nova组件详细介绍
以下是对nova组件中详细组成内容的介绍:
nova-api service
为nova模块提供统一的API接口,所有nova的请求均要先发到该服务,可以支持openstack compute类型的API以及亚马逊EC2类型的API;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
nova-compute service
负责通过虚拟化hypervisor来管理各个虚拟机实例的服务,例如创建,删除虚拟机实例等。
该服务支持不同类型的虚拟机hypervisor,例如:
XenAPI for XenServer/XCP
libvirt for KVM or QEMU
VMwareAPI for VMware
nova-scheduler service
接收到虚拟机实例的相关请求,决定在哪个物理机上创建虚拟机
nova-conductor module
负责整个nova组件与后端数据库的交互。
nova-novncproxy daemon
提供基于web形式的VNC连接用以访问运行中的虚拟机实例。
3) neutron组件详细介绍
以下是对neutron组件中详细组成内容的介绍:
Neutron-server
和所有的API组件功能类似,提供neutro组件的对外API接口,负责分发不同的API请求到不同的networking plug-in上;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
OpenStack Networking plug-ins and agents
负责调度为虚拟机提供基本网络连接的服务插件,可以支持对接各类不同的网络插件,例如:
Cisco virtual and physical switches
NEC OpenFlow products
Open vSwitch
Linux bridging
VMware NSX product
同时,也会提供通常的network agents,例如:
L3 Agents
DHCP Agents
4) cinder组件详细介绍
以下是对cinder组件中详细组成内容的介绍:
cinder-api
和所有的API组件功能类似,提供cinder组件的对外API接口;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
cinder-volume
Cinder服务的核心部件,负责与块设备直接交互,通过利用自己管理的块设备,向虚拟机实例提供统一的块存储服务。同时,他还支持通过加载不同设备厂商的驱动,来调用不同的厂商的集中性磁阵,直接对虚拟机提供lun,而不经过cinder服务这一层转发。
cinder-scheduler daemon
和nova-scheduler功能类似,当创建新的块设备的时候,选择合适的块设备存储节点。
cinder-backup daemon
可以提供块设备的备份服务,与cinder-volume类似的是,通过加载不同设备厂商的驱动,可以将块设备备份到各个不同的存储系统或者磁盘阵列上。
5) swift组件详细介绍
以下是对swift组件中详细组成内容的介绍:
Proxy servers (swift-proxy-server)
对外提供对象服务 API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
Account servers (swift-account-server)
提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。
Container servers (swift-container-server)
提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。
Object servers (swift-object-server)
提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。
Various periodic processes
各种周期性运行的额服务,以保证对象存储系统正常稳定,包括:
Replicator:会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具 rsync 来同步;另外一个任务是确保被标记删除的对象从文件系统中移除
Updater:当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理.
Auditor:检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
Account Reaper:移除被标记为删除的账户,删除其所包含的所有容器和对象。
七、openstack典型部署节点规划
如上图所示,一个典型的openstack部署拓扑基本是包含控制节点,计算节点和存储节点,必要的时候可以将对象存储节点和块存储节点分离,如果在租户网络内部路由方面有比较多的需求可以将网络节点也从控制节点中剥离单独部署。技术上上所有节点都可以分离部署或者合并部署,可以根据实际需求调整。
八、openstack网络类型介绍
典型的openstack网络可以分为3个网络,各个网络各司其职。
1)
内部网络。即是openstack平台的物理节点之间互相通信的网络,该网络一般数据量理论上不会太多,基本为openstack平台内部的数据流。当然如果openstack集群数量很大则另当别论。
2)
provider网络。即是openstack的租户对外提供服务的网络,租户可以将足迹需要暴露给外部提供访问的服务放置于这个网络中,openstack平台外部用户可以访问的也只有这个网络。
3)
selfservice网络。即是openstack的租户网络,是基于vxlan的overlay网络,一般不与外部打通,用户租户内部的虚拟机实例之间互相访问,该网络是软件定义的,所以可以随意设置网段和路由等等,外部无法直接访问到。
九、openstack虚拟机实例创建过程
在openstack平台上,创建一个虚拟机,需要各个组件相互配合,由先到后,逐一完成自己的工作,最终创建成一个正常运行的虚拟机实例。具体流程图如下: