OpenStack实战指南
上QQ阅读APP看书,第一时间看更新

第3章
OpenStack组织结构一览

3.1 组件关系

OpenStack是一个构建云环境的工具集,所有的OpenStack组件都可以单独部署,而组件中的模块也可以单独部署。OpenStack领先的分布式架构,可以让部署人员以类似搭积木的方式,按需求选取所需要的组件,灵活地构建云环境。使用OpenStack搭建的云环境可大可小,大至成千上万台的服务器,小至一台ARM手机都可以用OpenStack来构建云。通过前面两章,读者了解了OpenStack的基本内容,也熟悉了OpenStack的安装、使用,现在将带领读者更深入地学习OpenStack组件架构。

OpenStack组件如图3-1所示。

· 所有OpenStack组件都是用Python编写的。

· 最终用户可以通过Web界面(Horizon)、命令行来使用组件服务或直接调用每个组件的API。

· 每个组件都通过同一个认证源(Keystone)。

· 通过公共的REST API来实现各个组件间的交互。

· 大部分组件通过Message Queue来实现组件内部交互(官方推荐使用RabbitMQ)。

· 所有组件都用DataBase来存放数据信息(官方推荐使用MariaDB,MariaDB为MySQL的分支)。

· OpenStack的守护进程大多由WSGI中间件来实现(Paste),OpenStack中广泛使用paste.ini为其配置文件。

图3-1 OpenStack组件图

OpenStack组件特点:

· 分布式,OpenStack可以分开部署在多个服务器上,通过网络联通,是建立在网络之上的软件系统。正是因为这种软件的特性,所以分布式系统具有高度的内聚性和透明性。

· 无状态,当前的请求不依赖于之前请求状态。各个请求都相对独立,可扩展性强。

· RESTful(Representational State Transfer,具象状态传输风格),是指满足REST约束和风格的程序设计。OpenStack对外接口都是RESTful风格。

· RPC(Remote Procedure Call Protocol,远程过程调用协议),OpenStack内部通信机制大量使用RPC,RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

· Plugin(插件式设计),把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现。扩展功能与框架以一种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。

3.1.1 Nova组件

Nova组件是最早的OpenStack组件之一,熟悉了Nova组件结构,其他组件可以轻松学习。

Nova架构非常成熟,最早由RackSpace贡献,也可以称之为RackSpace架构。novaapi支持OpenStack原生API、AWS EC2 API,或者特殊的管理员API(为特权用户执行管理操作)。它可强制执行一些默认的配额策略;可以通过Keystone认证,认证处理优先于内部任务处理;支持多种后端Hypervisor创建虚拟机,如KVM、Xen、LXC、VMware、Hyper-V等。

Grizzly版本之前的Nova组件架构如图3-2所示。

图3-2 原有Nova组件架构

Grizzly版本的Nova组件架构如图3-3所示。

图3-3 现有Nova组件架构

在Grizzly版本Nova组件架构中,nova-compute组件不再直接与database交互,而是通过nova-conductor组件做代理,nova-compute所有数据操作均通过消息队列交由novaconductor写入或读取数据库。由于nova-compute组件是分布式部署的,在OpenStack环境中,每一台做虚拟机容器的物理服务器都需要部署nova-compute。如果nova-compute都能访问数据库,则无疑加大了数据库的访问风险。数据库可访问对象的增加,意味着数据安全指数降低。之所以采用代理模式来访问,是为了避免数据库被非法入侵,这大大降低了数据库访问风险;并且,所有的数据库操作通过Message-Queue都可以持久化,不必担心当节点死机时,访问数据会丢失。从可用性、健壮性、安全性各个方面来说,Grizzly版本的Nova组件在架构上无疑更先进。

3.1.2 Swift组件

Swift组件架构如图3-4所示,其特点如下。

· 提供文件的对象存储及服务。

· 采用对象级别的复制,以保障数据。

· swift-proxy的横向部署,可以保证接收的API请求分布式地维护account DB和container DB。

· ext4或XFS文件系统作为对象存储的文件系统。

图3-4 Swift组件架构

3.1.3 Keystone组件

Keystone组件架构如图3-5所示,其特点如下。

· Keystone提供统一的、完整的OpenStack身份验证、服务目录、令牌、访问策略服务。

· Keystone处理所有的API请求,提供可配置的身份验证、服务目录、令牌、访问策略服务。

· Keystone标准的后端包括SQL、LDAP、K&V等。

· 大多数用户会使用定制化的Keystone作为OpenStack的认证服务。

图3-5 Keystone组件架构

3.1.4 Glance组件

Glance组件架构如图3-6所示,其特点如下。

图3-6 使用多种存储后端的Glance服务

· 数据库中存放镜像文件的元数据。

· 存储镜像文件的实际后端可以有多种选择,可以使用OpenStack本身的组件Swift、Cinder,也可以使用本地存储,或者使用AWS的S3等。

3.1.5 Neutron组件

Neutron组件架构如图3-7所示,其特点如下。

· Neutron由Quantum更名而来。因为涉及商标侵权,所以OpenStack社区将Quantum更名为Neutron。

· neutron-server接收API请求,然后将请求路由到各个agent组件,执行具体的操作。

· agent由各种厂商支持,在Neutron中的agent角色类似于nova-compute、cindervolume,Nova面对不同的Hypervisor,Cinder面对不同存储,而Neutron面对各种不同的网络设备。

· 通常agent是L3、L2、DHCP和一些特殊插件式agent。

· agent目前有Cisco agent、Nicira nvp agent、NEC agent、Open vSwitch agent、Linux bridging agent等。

图3-7 Neutron组件架构

3.1.6 Cinder组件

Cinder组件架构如图3-8所示,其特点如下。

· Cinder就是nova-volume需求的扩展,是从Nova分离出来的一个集中式的块存储服务。

· Cinder组件架构完全是镜像式地复制Nova的架构,看过Nova代码再看Cinder代码会有似曾相识的感觉。

· cinder-api负责接收和分发API的请求信息。

· cinder-volume有多个后端存储可以支持,存储厂商以编写driver的方式加入到OpenStack开发行列,目前Cinder的存储驱动支持IBM、SolidFire、NetApp、Nexenta、Zadara和华为等商业存储。

· cinder-scheduler类似于nova-scheduler,决定在哪个存储上创建cinder-volume实例,但目前版本支持的调度策略很少,算法也并不完善。

· Cinder仍需完善,它的功能也可以用nova-volume代替。从Folsom版本到现在,Cinder本身的架构进展并不尽如人意,但是存储厂商的积极参与给了Cinder更多实际的意义。

图3-8 Cinder组件架构

3.2 OpenStack目录组织结构

3.2.1 Nova目录结构

下面来了解一下Nova的目录结构:

· bin:Nova服务执行文件。

· contrib:第三方贡献包。

· doc:技术文档。

· etc:Nova配置文件样例。

· nova:Nova代码目录。

· plugins:Nova插件。

· smoketests:冒烟测试代码。

· tools:工具。

· babel.cfg:Flask-Babel配置。

· CONTRIBUTING.rst:贡献指南。

· HACKING.rst:Hack指南。

· LICENSE:Apache2 LICENSE。

· MANIFEST.in:打包规则。

· openstack-common.conf:OSLO配置。

· pylintrc:Pylint代码分析配置。

· README.rst:Nova简介。

· run_tests.sh:测试案例。

· setup.cfg:setup.py配置。

· setup.py:Nova安装脚本。

· tox.ini:Python的标准化测试。

3.2.2 Swift目录结构

下面是Swift的目录结构:

· bin:Swift服务执行文件。

· doc:技术文档。

· etc:Swift配置文件样例。

· locale:Swift国际化模板。

· swift:Swift代码目录。

· test:Swift测试。

· tools:工具。

· AUTHORS:作者。

· babel.cfg:Flask-Babel配置。

· CHANGELOG:更新日志。

· CONTRIBUTING.md:贡献指南。

· LICENSE:Apache2 LICENSE。

· MANIFEST.in:打包规则。

· README.md:Swift简介。

· setup.cfg:setup.py配置。

· setup.py:Swift安装脚本。

· tox.ini:Python的标准化测试。

3.2.3 Keystone目录结构

下面是Keystone的目录结构:

· bin:Keystone服务执行文件。

· doc:技术文档。

· etc:Keystone配置文件样例。

· examples:Keystone使用样例。

· httpd:Keystone使用Apache配置。

· keystone:Keystone代码目录。

· tests:Keystone测试。

· tools:工具。

· babel.cfg:Flask-Babel配置。

· HACKING.rst:Hack指南。

· LICENSE:Apache2 LICENSE。

· MANIFEST.in:打包规则。

· openstack-common.conf:OSLO配置。

· README.rst:Keystone简介。

· run_tests.sh:测试案例。

· setup.cfg:setup.py配置。

· setup.py:Keystone安装脚本。

· TODO:代办列表。

· tox.ini:Python的标准化测试。

3.2.4 Glance目录结构

下面是Glance的目录结构:

· bin:Glance服务执行文件。

· doc:技术文档。

· etc:Glance配置文件样例。

· glance:Glance代码目录。

· tools:工具。

· babel.cfg:Flask-Babel配置。

· HACKING.rst:Hack指南。

· LICENSE:Apache2 LICENSE。

· MANIFEST.in:打包规则。

· openstack-common.conf:OSLO配置。

· pylintrc:Pylint代码分析配置。

· README.rst:Glance简介。

· run_tests.sh:测试案例。

· setup.cfg:setup.py配置。

· setup.py:Glance安装脚本。

· tox.ini:Python的标准化测试。

3.2.5 Neutron目录结构

下面是Neutron的目录结构:

· bin:Neutron服务执行文件。

· contrib:第三方贡献包。

· doc:技术文档。

· etc:Neutron配置文件样例。

· quantum:Neutron代码目录。

· tools:工具。

· babel.cfg:Flask-Babel配置。

· HACKING.rst:Hack指南。

· LICENSE:Apache2 LICENSE。

· MANIFEST.in:打包规则。

· openstack-common.conf:OSLO配置。

· README:Neutron简介。

· run_tests.py:测试案例。

· run_tests.sh:测试案例。

· setup.cfg:setup.py配置。

· setup.py:Neutron安装脚本。

· TESTING:测试方法简介。

· tox.ini:Python的标准化测试。

3.2.6 Cinder目录结构

下面是Cinder的目录结构:

· bin:Cinder服务执行文件。

· cinder:Cinder代码目录。

· contrib:第三方贡献包。

· doc:技术文档。

· etc:Cinder配置文件样例。

· tools:工具。

· babel.cfg:Flask-Babel配置。

· CONTRIBUTING.md:贡献指南。

· HACKING.rst:Hack指南。

· LICENSE:Apache2 LICENSE。

· MANIFEST.in:打包规则。

· openstack-common.conf:OSLO配置。

· pylintrc:Pylint代码分析配置。

· README.rst:Cinder简介。

· run_tests.sh:测试案例。

· setup.cfg:setup.py配置。

· setup.py:Cinder安装脚本。

· tox.ini:Python的标准化测试。

3.3 OpenStack配置文件

本节列出了各个OpenStack组件对应的配置文件和日志文件的位置并对各个文件进行了说明。具体的配置信息将会在后续章节中详细介绍。

3.3.1 Nova配置文件及日志

Nova的配置文件默认存放在/etc/nova,各文件描述如图3-9所示。

图3-9 Nova的配置文件

Nova的日志文件默认存放在/var/log/nova,各文件描述如图3-10所示。

图3-10 Nova的日志文件

3.3.2 Swift配置文件及日志

Swift的配置文件默认存放在/etc/swift,各文件描述如图3-11所示。

图3-11 Swift的配置文件

Swift的日志文件默认存放在/var/log/swift,文件描述如图3-12所示。

图3-12 Swift的日志文件

3.3.3 Keystone配置文件及日志

Keystone的配置文件默认存放在/etc/keystone,文件描述如图3-13所示。

Keystone的日志文件默认存放在/var/log/keystone,文件描述如图3-14所示。

图3-13 Keystone的配置文件

图3-14 Keystone的日志文件

3.3.4 Glance配置文件及日志

Glance的配置文件默认存放在/etc/glance,各文件描述如图3-15所示。

图3-15 Glance的配置文件

Glance的日志文件默认存放在/var/log/glance,各文件描述如图3-16所示。

图3-16 Glance的日志文件

3.3.5 Neutron配置文件及日志

Neutron的配置文件默认存放在/etc/neutron,各文件描述如图3-17所示。

Neutron的日志文件默认存放在/var/log/neutron,各文件描述如图3-18所示。

3.3.6 Cinder配置文件及日志

Cinder的配置文件默认存放在/etc/cinder,各文件描述如图3-19所示。

Cinder的日志文件默认存放在/var/log/cinder,各文件描述如图3-20所示。

图3-17 Neutron的配置文件

图3-18 Neutron的日志文件

图3-19 Cinder的配置文件

图3-20 Cinder的日志文件

3.4 小结

本章带领读者学习了各个组件的关系,从整体上把握各个组件的结构、配置文件、日志文件等。由于OpenStack是分布式架构,基本上所有的通信都是基于AMQP的,数据库使用MySQL,所以了解AMQP组件及MySQL的相关知识是非常重要的。

如果只是想要部署OpenStack,那么正确理解每个组件的关系是非常重要的。而对于那些想要加入OpenStack开源建设,为OpenStack“添砖加瓦”的开发人员来说,更需要详细了解各个组件之间的关联关系。OpenStack开发简单来说就是Python开发,但是需要丰富的背景知识做支撑,硬件、软件都需要有相应的了解。云计算是IT技术发展到一定阶段的必然产物,IT领域各种技术融合、碰撞,出现了新的技术革新与新的展现形式。其实云计算在技术上并没有任何特别的地方,只是传统技术的再次整合,但云计算改变了传统的IT思维,将一切虚拟化、自动化、弹性化,最终达到服务化的目的,按需取用,自助服务。“云化”看似很神秘,其实深入理解了云计算就会发现,这是IT技术发展过程顺理成章的事情。