OpenStack核心组件原理与应用一

开头语

前段时间对公司测试环境进行了重构,将虚拟化技术从KVM改为了OpenStack集群,并结合了CEPH存储。目前整个集群承担着Dev和测试环境的运行,以及公司内部服务,如Wiki,Git等,目前已稳定运行了一段时间。在部署的整个过程以及使用的这段时间,产生了一些心得也积累了些经验,想分享给更多需要的朋友。考虑到OpenStack组件较多,一篇文章的篇幅不足以概括,所以会以系列专栏的形式呈现出来。

OpenStack是什么?

OpenStack 是一个适用于所有云环境、旨在实现简单、可扩展性强、功能丰富的开源云计算平台。自2010年NASA(美国国家航空航天局)和Rackspace共同发起后,到现在其开发人员遍及世界各地,已成长为全球第二大开源社区。

OpenStack通过一组相互关联的服务提供基础架构即服务(IaaS)解决方案。每个服务都提供了API来实现服务间调用。根据需要,您可以安装部分或全部服务。

服务与项目名称对照表

OpenStack的服务名和项目名称是不一样的,以下是笔者基于Queens版本梳理出的核心服务和项目对应关系及描述:

Service Project Name Description
Dashboard Horizon 提供基于 Web 的自助服务门户,以便与底层 OpenStack 服务进行交互,例如启动实例,分配IP地址和配置访问控制。
Compute Service Nova 在 OpenStack 环境中管理虚拟实例的生命周期。职责包括按需产生,调度和停用虚拟机。
Networking Service Neutron 为其他 OpenStack 服务组件启用网络连接服务,例如 OpenStack Compute。为用户提供一个API来定义网络及其附件。具有支持许多流行网络供应商和技术的可插拔架构。
Object Storage Service Swift 对象存储服务,通过基于HTTP的 RESTful API 来存储和检索任意的非结构化数据对象。高度的容错及多副本存储。
Block Storage Service Cinder 为运行的实例提供块存储。
Identity Service Keystone 为其他 OpenStack 服务提供认证和授权服务。能列出所有 OpenStack 服务的端点目录。也是需要最先部署的组件。
Image Service Glance 镜像存储检索服务。
Telemetry Service Ceilometer 计费服务。
Orchestration Service Heat 编排服务。
Database Service Trove 为关系数据库和非关系数据库引擎提供可伸缩和可靠的云数据库即服务功能。
Data Processing Service Sahara 通过指定 Hadoop 版本,集群拓扑和节点硬件信息等参数,提供在 OpenStack 中配置和扩展 Hadoop 群集的功能。

架构

介绍了核心服务功能,我们来看看 OpenStack 的架构,下图是 OpenStack 的概念架构:
要设计、部署和配置 OpenStack,运维人员必须了解它的逻辑体系结构。

如上图的概念架构所示,OpenStack 由几个独立部分共同组成了 OpenStack 服务。所有服务都通过 Keystone 组件进行身份验证。

在内部,OpenStack 服务由多个进程组成。所有服务都至少有一个API进程,它监听其他API的请求,预处理它们并将它们传递给服务的其他部分。除身份服务外,实际工作由不同的进程完成。进程间的通信采用消息队列,进程的状态存储在数据库中。

用户可以通过 Horizon Dashboard、命令行客户端以及浏览器插件或 curl 等工具发起请求来访问 OpenStack。对于应用程序,有几个 SDK 可用。最终,所有这些访问方法都会对各种 OpenStack 服务发出 REST API 调用。

下图是OpenStack最常见的体系结构:

大家可以按照图上列出的组件来定制部署自己的 OpenStack 环境,在部署 OpenStack 前,我们先来准备依赖环境。

兵马未动,粮草先行

在笔者的 OpenStack 环境中,操作系统均使用的 CentOS7 版本,OpenStack 为 Queens 版本。
CentOS中可以通过 redhat-release 文件查看操作系统版本:

[[email protected] ~]# cat  /etc/redhat-release

OpenStack 最小化部署需要两台主机:一个 Controller 节点,一个 Computer 节点。所以,想尝试的同学,请至少准备好两个节点(可以是物理机,也可以是虚拟机),每个节点上至少两块网卡。本例中的主机信息如下:

Role Name Private IP Public IP
Controller ct1.vtlab.io 192.168.1.231 10.0.0.231
Computer cp1.vtlab.io 192.168.1.233 10.0.0.233

Controller 节点一般运行服务端的程序,Computer 节点运行客户端程序及VMS。接下来我们部署和配置环境。

配置主机名

#设置控制节点的主机名为 ct1.vtlab.io
[[email protected] ~]# hostnamectl set-hostname ct1.vtlab.io
#设置计算节点的主机名为 cp1.vtlab.io
[[email protected] ~]# hostnamectl set-hostname cp1.vtlab.io

配置各节点时区,统一为 Asia/Shanghai:

[[email protected] ~]# timedatectl set-timezone Asia/Shanghai

配置各节点的编码
当编码为中文,启动 OpenStack 组件可能会报一下错误,所以提前统一好主机编码均为 en_US.UTF-8

UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe6 in position 14: ordinal not in range(128)
[[email protected] ~]# cat /etc/locale.conf
LANG="en_US.UTF-8"

修改hosts文件,使彼此能通过主机名访问,如果环境中有DNS,可以使用DNS。

[[email protected] ~]# cat /etc/hosts
192.168.1.231   ct1.vtlab.io
192.168.1.233   cp1.vtlab.io

关闭各节点防火墙和Selinux

[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0
#编辑selinux配置文件,替换一下内容
[[email protected] ~]# vim /etc/selinux/config
SELINUX=disabled

NTP 服务:
在集体活动中,大家时间同步,才能保证行动一致、有条,显得像一个集体。集群环境更是如此。CentOS7.x 中,默认的时钟同步服务改为了 Chrony。 Chrony 可以同时作为NTP服务的客户端和服务端。默认安装后有两个程序chronyd 和 chronyc。chronyd 是一个在系统后台运行的守护进程,chronyc 是用来监控chronyd 性能和配置的工具。
Chrony 的优势包括:

  1. 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,这对于并非全天 24 小时运行的台式计算机或系统而言非常有用
  2. 能够更好地响应时钟频率的快速变化,这对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用。
  3. 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响。
  4. 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性。
  5. 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟。
    #安装 chrony,在所有OpenStack节点上执行
    yum install -y chrony
    #如果有 Ansible 等配置管理工具会更方便,只需要一条命令就能在所有节点上安装完成我们需要的程序包了。
    [[email protected] ~]# ansible node -m yum -a "name=chrony state=present"
    #在 Chrony 服务端执行
    #编辑配置文件 vim /etc/chrony.conf,添加下列部分
    allow 192.168.0.0/16
    allow 172.31.1.0/24
    allow 10.0.0.0/24
    #启动服务
    [[email protected] ~]# systemctl start chronyd.service
    [[email protected] ~]# systemctl enable chronyd.service
    #在 Chrony 客户端执行
    #编辑配置文件 vim /etc/chrony.conf,修改下列部分,其中 cp1.vtlab.io 为Chrony 服务端的地址,可以写主机名也可以写IP。
    server cp1.vtlab.io iburst
    #启动服务
    [[email protected] ~]# systemctl start chronyd.service
    [[email protected] ~]# systemctl enable chronyd.service
    #执行命令验证
    [[email protected] ~]# chronyc sources

准备网络环境

网络接口要求,双网卡,分为管理网络和专用网络,禁用DHCP功能,手动配置IP地址。
出于管理目的,例如:安装包,安全更新, DNS 和 NTP,所有的节点都需要可以访问互联网。在大部分情况下,节点应该通过管理网络接口访问互联网。为了更好的突出网络隔离的重要性,示例架构中为管理网络使用 "private address space"(192.168.1.x),并假定物理网络设备通过 "NAT" 或者其他方式提供互联网访问。示例架构使用可路由的IP地址隔离服务商(外部)网络并且假定物理网络设备直接提供互联网访问。

在提供者网络(10.0.0.x)架构中,所有实例直接连接到提供者网络。在自服务(私有)网络架构,实例可以连接到自服务或提供者网络。自服务网络可以完全在 OpenStack 环境中或者通过外部网络使用 “NAT ” 提供某种级别的外部网络访问。

示例网络架构如下:

  • 管理网络使用 192.168.1.0/24 带有网关 192.168.1.1 的网络段,这个网络需要一个网关为所有节点提供内部管理目的的访问,例如:包安装、安全更新、DNS、时钟同步。
  • 提供者网段 10.0.0.0/24,网关10.0.0.1
    这个网络需要一个网关来提供在环境中内部实例的访问。

控制节点网络配置:
1.将第一个接口配置为管理网络接口:

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno1
BOOTPROTO=static
DEVICE=eno1
ONBOOT=yes
IPADDR=192.168.1.231
GATEWAY=192.168.1.1
NETMASK=255.255.255.0

2.提供者网络接口使用一个特殊的配置,不分配给它IP地址。配置第二块网卡作为提供者网络:

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno2
BOOTPROTO=static
DEVICE=eno2
ONBOOT=yes
IPADDR=10.0.0.231
GATEWAY=10.0.0.1
NETMASK=255.255.255.0

3.重启网络服务,是配置生效

[[email protected] ~]# systemctl restart network

计算节点网络配置:
1.将第一个接口配置为管理网络接口

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno1
BOOTPROTO=static
DEVICE=eno1
ONBOOT=yes
IPADDR=192.168.1.233
GATEWAY=192.168.1.1
NETMASK=255.255.255.0

2.配置第二块网卡作为提供者网络:

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno2
BOOTPROTO=static
DEVICE=eno2
ONBOOT=yes
IPADDR=10.0.0.233
GATEWAY=10.0.0.1
NETMASK=255.255.255.0

配置域名解析

  1. 通过修改/etc/hosts文件。
  2. 通过DNS 服务。

通过 yum 方式安装,启用 OpenStack 库

[[email protected] ~]# yum -y install centos-release-openstack-queens
#升级包
[[email protected] ~]# yum upgrade
#安装OpenStack客户端
[[email protected] ~]# yum install -y python-openstackclient
#安装openstack-selinux 软件包以便自动管理OpenStack服务的安全策略
[[email protected] ~]# yum install -y openstack-selinux

安装数据库服务
OpenStack服务使用MySQL数据库存储信息。本处使用MariaDB。
安装MariaDB并配置bind_address为控制节点管理网卡的IP地址。

[[email protected] ~]# yum -y install mariadb mariadb-server python2-PyMySQL
[[email protected] ~]# vim /etc/my.cnf.d/openstack.cnf
[mysqld]
skip-name-resolve
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8mb4
#启动
[[email protected] ~]# systemctl enable mariadb.service
[[email protected] ~]# systemctl start mariadb.service
#可选操作:
#检查空密码用户并删除
[[email protected] ~]# mysql_secure_installation
delete from mysql.user where password="";
flush privileges;
select user,host,password from mysql.user where password="";

安装NoSQL服务
Telemetry 服务使用 NoSQL 数据库来存储信息。这里选择 MongoDB数据库。
安装 MongoDB。配置 bind_ip 为控制节点管理网卡的IP地址。

[[email protected] ~]# yum install mongodb-server mongodb -y
[[email protected] ~]# vim /etc/mongod.conf
bind_ip = 192.168.1.231
smallfiles = true
#启动服务
[[email protected] ~]# systemctl enable mongod.service
[[email protected] ~]# systemctl start mongod.service

安装消息队列
OpenStack使用消息队列协调操作和各服务的状态信息。消息队列服务一般运行在控制节点上。OpenStack 支持RabbitMQ、Qpid 和 ZeroMQ。我选用的 RabbitMQ。

[[email protected] ~]# yum -y install rabbitmq-server
#设置开机启动并启动RabbitMQ
[[email protected] ~]# systemctl enable rabbitmq-server.service
[[email protected] ~]# systemctl start rabbitmq-server.service
#添加RabbitMQ用户并设置密码,需要把RABBIT_PASS修改为真实密码。
[[email protected] ~]# rabbitmqctl add_user openstack RABBIT_PASS
#开启页面监控
[[email protected] ~]# rabbitmq-plugins enable rabbitmq_management
#添加openstack用户配置、写入和读取的权限
[[email protected] ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
[[email protected] ~]# rabbitmqctl set_user_tags openstack  administrator management

安装缓存服务
认证服务的认证缓存使用 Memcached 缓存令牌。缓存服务 Memcached 运行在控制节点。在生产环境中,推荐联合启用防火墙、认证和加密保证它的安全。

[[email protected] ~]# yum install -y memcached python-memcached
#编辑文件,修改监听地址
[[email protected] ~]# vim  /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,ct1.vtlab.io"
#设置开机启动并启动memcached
[[email protected] ~]# systemctl enable memcached.service
[[email protected] ~]# systemctl start memcached.service

安装ETCD服务

[[email protected] ~]# yum install -y etcd
#修改etcd配置文件 /etc/etcd/etcd.conf
[[email protected] ~]# vim /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.231:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.231:2379"
ETCD_NAME="ct1.vtlab.io"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.231:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.231:2379"
ETCD_INITIAL_CLUSTER="ct1.vtlab.io=http://192.168.1.231:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
#设置开机启动并启动etcd
[[email protected] ~]# systemctl enable etcd
[[email protected] ~]# systemctl start etcd

到目前为止,OpenStack 依赖的环境已经准备完毕,下一篇文章,将介绍 OpenStack 的验证服务——keystone。

原文地址:http://blog.51cto.com/weiwendi/2161308

时间: 2024-08-30 02:36:43

OpenStack核心组件原理与应用一的相关文章

OpenStack核心组件原理与应用之Keystone

认证服务介绍 在 OpenStack核心组件原理与应用一文中,我们介绍了OpenStack的架构及安装前的准备工作,这篇我们来完成 OpenStack 第一个服务--认证服务的部署.上篇"服务与项目名称对照表"中,认证服务的 Service 名字为"Identity Service",项目名称为"Keystone",主要功能是为 OpenStack 集群中的其他组件提供认证和授权服务.它能列出所有 OpenStack 服务的端点目录.其它服务将身

OpenStack核心组件原理与应用之Glance

概览 OpenStack 镜像服务 Glance 是 IaaS(Infrastructure as a Service,基础设施即服务)的核心服务.允许用户发现.注册和获取虚拟机镜像.它提供了一个 Rest API,允许您查询虚拟机镜像的元数据,并获取镜像.您可以将镜像存储在任何位置,比如文件系统.对象存储,我们采用Ceph集群进行存储. Glance包括以下组件: glance-api:接收API调用,实现镜像发现.恢复.存储等功能. glance-registry:存储.处理和恢复镜像的元数

OpenStack总体架构概览&OpenStack核心组件介绍

下面个是51CTO上一位朋友发布的O版OpenStack核心组件说明,总结的非常到位,所以我就不再造轮子了.~,~ https://down.51cto.com/data/2448945 私有云 公有云 混合云 IaaS(基础架构即服务):OpenStack,CloudStack PaaS(平台即服务):Docker,Openshift SaaS(服务即服务):主要面对终端用户,可通过一个浏览器就可以实现使用任何应用,而无需安装. DBaaS(Database as a Service) FWa

OpenStack DVR 原理深入分析

一.DVR实验环境 一套vlan模式的openstack环境,interface_driver使用openvswitch,并在计算节点添加br-ex,用于计算节点虚拟机出外网. 二.DVR配置 1.控制节点 a.编辑/etc/neutron/neutron.conf[DEFAULT]router_distributed = True b.重启neutron-server服务 2.网络节点 a.编辑/etc/neutron/l3_agent.ini[DEFAULT]agent_mode = dvr

Openstack Swift 原理、架构与 API 介绍

背景与概览 Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务,并于 2010 年贡献给 OpenStack 开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务.Swift 构筑在比较便宜的标准硬件存储基础设施之上,无需采用 RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式.容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题. 此项目是基于

云计算openstack核心组件——glance— 镜像服务(6)

一.glance介绍: Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取镜像. Glance可以将镜像保存到多种后端存储上,比如简单的文件存储或者对象存储. 理解 Image 要理解 Image Service,先得搞清楚什么是 Image 以及为什么要用 Image? 在传统 IT 环境下,安装一个系统要么从安装 CD 从头安装,要么用 Ghost 等克隆工具恢

OpenStack核心组件-keystone

1. Keystone介绍 keystone是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等.云环境中所有的服务之间的授权和认证都需要经过 keystone. 因此 keystone 是云平台中第一个即需要安装的服务. 作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情: ?   管理用户及其权限 ?    维护 OpenStack Services 的 Endp

零基础学习openstack【完整中级篇】及openstack资源汇总

1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事,内容整合来自: 零基础学习openstack(上)[中级篇] 零基础学习openstack(下)[中级篇] 是在 零基础学习openstack[初级篇]基础上的一个继续: 初级篇,我们主要是有这么一个概念,openstack的组成openstack由哪些部分来组成: Identity(代号为“Ke

【转载】OpenStack Swift学习笔记

免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:崔炳华      原文地址:http://blog.csdn.net/i_chips/article/details/17787017 1       概述 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一.Swift的目的是使用普通硬件来构建冗余的.可扩展的分布式对象存储集群,存储容量可达PB级. Swift并不是