《OpenStack实战指南》—— 第2章 Chapter 2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

本节书摘来自华章出版社《OpenStack实战指南》一 书中的第2章,第2.1节,作者:黄 凯 毛伟杰 顾骏杰 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第2章 Chapter 2

OpenStack的安装

2.1 在Ubuntu上使用二进制包安装

笔者写本书的时候,OpenStack已经发展到Havana版本,几大主流的Linux发行版本都会将OpenStack的源代码做成各自平台的二进制安装包,以供用户使用。随着OpenStack使用的人越来越多,发行版本对Linux的支持力度也越来越大,就目前来看,Ubuntu(Debian)、RedHat、OpenSUSE都有相应的包和开发定制的安装程序。当然,各个Linux平台上的包制作发布的时间各有快慢,同时支持的版本更新也有快有慢。Ubuntu是更新最快的发行版本之一。RedHat也越来越重视OpenStack,更新包的速度也比以前快很多。这里先以Ubuntu作为底层的操作系统,因为Ubuntu从OpenStack的Cactus版本开始就将其作为自身一个云计算的软件,同时,社区对OpenStack的支持很好,网络上很多文档都是以Ubuntu为操作系统进行部署安装的,并且OpenStack的开发人员是在Ubuntu上进行OpenStack的开发的,就目前情况来看,其支持度最好。
本节将会介绍如何在Ubuntu 12.04 LTS上安装Keystone、Glance、Nova、Neutron、Cinder和Horizon这几个组件,其中使用4台服务器,分别作为controller、network、compute、volume节点。这4个节点的名字只是按照它们需要完成的任务来命名的,并不是说它们有特定的名字。

2.1.1 控制节点的安装

在controller节点上计划部署如下组件:
RabbitMQ
MySQL
Keystone
Glance
Neutron
Nova中除去nova-compute的其他组件
Cinder中除去cinder-volume的其他组件
Horizon
下面详细介绍一下各个组件。
RabbitMQ:在OpenStack中,各个服务之间是通过消息来交互的。因为OpenStack使用AMQP(高级消息队列协议)作为其消息传递的技术,所以RabbitMQ、Qpid、ZeroMQ等支持AMQP的软件都是被OpenStack所支持的。这里会使用RabbitMQ,因为它是第一个被OpenStack使用的消息传递的软件。OpenStack通过AMQP实现RPC的服务,来保证不同组件之间的通信,RabbitMQ是controller中一个非常关键的服务。RabbitMQ结构图如图2-1所示。
screenshot

MySQL:OpenStack所使用的数据库。包括Nova、Glance、Cinder等在内的组件都会建立自己的数据库,保存一些必要的数据。
Keystone:OpenStack的用户认证组件。它的功能主要是建立管理项目的用户和各种服务端口,以及进行用户的身份认证。要使用OpenStack的任意API,第一步就必须通过Keystone的验证。
Glance:用来存放管理虚拟机镜像和快照的服务,这也是一个最小架构中必须有的服务。
Neutron:用来提供虚拟机网络通信的组件。
Nova(除去nova-compute的其他组件):这里不包括nova-compute,因为Controller节点不负责运行虚拟机。Nova是个至关重要的组件,也是个相对庞大的组件,其中有很多服务,它是进行生成虚拟机工作的主要服务。
Cinder(除去Cinder-volume的其他组件):用来创建、删除及管理volume(虚拟磁盘卷),以及给volume做快照等服务的组件。
Horizon:OpenStack的Web管理页面,使用Django框架开发。Web管理页面包含了日常使用的大部分功能,提供给用户一个最直观的展现方式。很多简单的二次开发工作都是从Horizon开始的。
1.?系统环境准备
在安装部署OpenStack之前,首先需要做一些安装额外软件和配置网络等准备,主要包括以下几个部分:
操作系统为Ubuntu 12.04 LTS,最小化安装即可。在安装系统的时候,安装openssh-server,分区尽量能有30GB空间,用来完成这个测试环境。
网络连接和IP设置。需要两个以太网口,分配两个独立的网络。
添加OpenStack Havana版本的软件包源到系统中,并且更新系统。
安装NTP服务。
MySQL,安装MySQL数据库和Python的MySQL库。
RabbitMQ,安装Rabbitmq-server作为OpenStack的AMQP。
(1)网络IP配置
按照架构的设计,controller需要两个网口,连接两个网段。
eth0所在的网段是一个用户可访问的网段,在本章中,把这个网络命名为network-1,将会通过Web访问这个eth0所使用的IP来进行登录Web的操作。举例来说,如果笔者现在的PC配置的IP是10.10.101.10,22位的掩码,那么笔者的controller的eth0可以配置为10.10.101.10/22这个网段中任何没有使用的IP地址。
eth1所在的网段是一个私有的管理网段,在本章中,把这个网络命名为network-2。在实际环境中,所有的节点,无论是controller,还是计算节点,网络节点都需要有一个网口连接这个网段,所有的数据库连接,以及RabbitMQ的通信使用的都是这个网口。如果用SSH登录来进行修改配置等工作,也应接入这个网段进行操作。如果需要监控OpenStack环境中的服务器和虚拟机,也建议通过接入这个网段进行。这个网段不需要有能访问外部网络的功能。在一个简单的模型中,只要把这些网口接入到一台交换机上即可,示例如下所示:


 # cat /etc/network/interfaces
 # network-1 Internet
 auto eth0
 iface eth0 inet static
address 10.10.101.10
netmask 255.255.252.0
network 10.10.100.0
broadcast 10.10.103.255
gateway 10.10.100.1
dns-nameservers 8.8.8.8

 # network-2 Management
 auto eth1
 iface eth1 inet static
address 10.80.80.10
netmask 255.255.255.0

以上是笔者环境中的网络配置文件,读者可以根据自己环境的实际情况进行修改,然后重启服务器网络。命令如下,提示符#的命令操作表示是在root用户环境下进行的操作。

# /etc/init.d/networking restart

(2)添加Havana的源
Ubuntu 12.04默认的OpenStack的版本是Essex版本,如果不安装其他版本的源,那么默认命令安装的都是Essex版本的软件包,这点需要用户注意。此处,要加入OpenStack软件包的Havana的源,然后更新一下系统的软件包信息和已安装的软件。命令如下:

# apt-get install –y python-software-properties
# add-apt-repository cloud-archive:avana

加入新的源后会在/etc/apt/sources.list.d/目录下多出一个Havana源的文件,如下所示:

# apt-get update
# apt-get upgrade –y
# apt-get dist-upgrade –y

更新完系统后可以重启,也可以等安装完OpenStack后再重启。
(3)安装NTP服务
在整个OpenStack集群中,规模可以从几个节点到几十个节点,甚至几百个,为了保证这些集群中的节点互相通信正常,需要使各个节点的时间一致,误差不能太大,因此需要一台NTP服务器来提供时间同步,在这个测试环境中,选择在控制节点上安装NTP服务。命令如下:

apt-get install –y ntp

(4)安装MySQL数据库
OpenStack的主要组件都需要数据库的支持。OpenStack支持MySQL、PostgreSQL、SQLite。在这个测试环境中,选择MySQL作为数据库。控制端安装MySQL的Server,节点通过Python的MySQL客户端模块连接到MySQL Server。命令如下:

# apt-get install –y mysql-server python-mysqldb

安装MySQL的过程中,会提示创建MySQL的root密码。
默认MySQL只监听127.0.0.1,而在实际的生产环境中,出于安全考虑,数据库通信经过的是管理网段,只需让MySQL监听管理网的IP。在这个安装实例中,可以将管理网IP设置为10.80.80.10。重启MySQL使配置生效。代码如下:

# sed –I"s/127.0.0.1/10.80.80.10/" /etc/mysql/my.cnf
# service mysql restart

(5)安装Messaging服务
OpenStack组件之间的通信需要通过支持AMQP的Messaging服务软件。OpenStack支持的有RabbitMQ、Qpid和ZeroMQ。这里安装RabbitMQ。命令如下:

# apt-get install -y rabbitmq-server

安装RabbitMQ服务软件时,RabbitMQ默认用户guest的密码是guest,出于安全考虑,用户可以在实际环境中更改密码。如果用户的RabbitMQ启动失败,那么可能是由于/etc/hosts中127.0.0.1所对应的主机名和使用命令hostname后的结果不一致,此时可以尝试在/etc/hosts的localhost前面把hostname加入,然后再启动RabbitMQ。修改guest密码的命令是:

# rabbitmqctl change_password guest NEW_PASSWORD

至此,前置工作已经完成,下面可以开始安装OpenStack了。
2.?安装部署Keystone
把Keystone作为安装OpenStack的第一步,因为它是整个OpenStack的认证系统,就好比屋子的一扇门,只有通过了这扇门,才能进行后面的操作。另外,Keystone负责OpenStack的用户管理,只有创建了用户,才能以这个用户的身份进入这扇门。
安装配置Keystone的过程主要分为下面几步:
安装软件包和修改配置文件。
创建Keystone的数据库,并建立Keystone的表结构。
启动服务,确认服务正常运行。验证Keystone可以使用。
创建Keystone的管理员用户。
定义Keystone使用的Services和API Endpoints。
以创建的用户来使用Keystone客户端命令行。
(1)安装和配置Keystone
直接安装Keystone一个包即可,系统同时会自动安装Python-keystoneclient的客户端包,其命令如下:

# apt-get install -y keystone

Keystone的配置文件放在/etc/keystone目录下,要修改的主要是keystone.conf这个文件。主要修改以下几个参数:

# vi /etc/keystone/keystone.conf
admin_token = openstack
debug = True
verbose = True
connection = mysql://keystoneuser:openstack@localhost/keystone

admin_token:这个选项至关重要,可以将其比喻成获取Keystone管理权限的“钥匙”。在这里可以设置一个复杂的字符串,因为太简单的字符串容易被破解。由于是测试环境,笔者就用openstack这个字符串作为admin的token。此时,因为在Keystone中还未建立任何用户,所以这个token和用户无关,但是这个token在生产环境中需要足够复杂且绝对保密。
debug与verbose:这两个选项均设置为True,用于测试时查看详细的输出信息,而输出信息会保存在log_dir和log_file定义的目录文件中。
connection:这个选项定义Keystone使用的数据库的URL。这里用了MySQL的keystoneuser用户,密码是openstack,数据库地址是localhost,也就是本机,数据库名是keystone。注意,目前我们还没有建立这个数据库和数据库用户。
在这个测试环境中,保持配置文件中其他选项不变。
(2)Keystone的数据库操作
需要在MySQL中建立一个Keystone的数据库,再创建一个用户,赋予其对keystone数据库的操作权限,代码如下。注意,建立的数据库名、用户名及密码要和上面keystone.conf配置文件中的connection选项一致。

# mysql -uroot -p -e "CREATE DATABASE keystone;"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON keystone.* TO'keystoneuser'@
    'localhost'IDENTIFIED BY 'openstack';"

建立好的数据库是空的,需要初始化Keystone数据库的表结构。Keystone提供了一个很方便的创建结构的命令:

# keystone-manage db_sync

运行成功之后,可以进入MySQL查看Keystone这个数据库的表结构和字段。
(3)确认Keystone服务正常运行
配置文件修改后需要重启服务:

# service keystone restart

如何确认Keystone服务正常启动?根据笔者的经验,可以从几个方面入手,这个也是后面经常会使用的方法。
使用命令“service keystone status”查看keystone进程是否为running状态。
查看log文件。log文件被定义在keytone.conf中,默认是/var/log/keystone/keystone.log,查看是否有出错日志。如果设置了debug和verbose为True,那么信息会很详细,有利于排错。
调用命令“keystone client”。其实前两步是查看服务是否正常启动,真正确认还需要第三步,即排错。服务启动了并不代表Keystone能如用户所愿地进行工作,有时配置选项设置成不同的参数,服务也能正常运行,但是使用Keystone的时候会出错,因此,运行一个实际的命令来验证Keystone是否能正常工作。运行命令前首先要输入token和Keystone的endpoint:

# export OS_SERVICE_TOKEN=openstack
# export OS_SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0/
# keystone user-list

前面两行是设定token和endpoint的环境变量。可以把它放入一个文件里,然后每次使用OpenStack之前只要执行“source这个文件”即可。还记得前面在Keystone配置文件中的一个选项admin_token吗?这里的第一个token使的就是当时设定的那个值。第三行命令是测试Keystone是否能正常运行,需要列出Keystone中的用户。输出是一个空行?不用担心,这是正常运行的表现,至少没有报错信息。运行命令的时候,建议结合日志的方法,再打开一个窗口使用命令tail日志文件,查看是否有报错情况。因为到目前为止还没有建立过用户,所以肯定没有用户使用的使用Keystone服务的日志。
(4)创建第一个Keystone用户
接下来的部分可能有点烦琐和难以理解,但笔者不打算在这里详细讲解每条命令的意思,也不会说明为什么要这样做。这些原理性的内容将在第5章详细讲解。这里的任务是快速地把基本环境搭起来,如果读者对这部分的内容产生疑惑,可以先照着步骤去做,相信等有了一个完整可用的体系后,在使用中会慢慢理解其中的含义。
这里将建立一个用户、一个tenant和一个role,它们之间的关系是用户属于tenant,用户在tenant中可以有不同的角色。记住,操作之前一定要设置token和endpoint这两个环境变量。
首先,创建一个具有管理权限的tenant,称为admin,其代码如下:

# keystone tenant-create --name=admin
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | 08cbb73f6689477eb42d7be9a901e55c |
|     name    |              admin               |
+-------------+----------------------------------+

然后,创建一个用户,命名为admin,密码设置为openstack,其代码如下:

# keystone user-create --name=admin --pass="openstack"
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |                                  |
| enabled  |               True               |
|    id    | 3372c9032dd24ee9b2dcefcdbba13f01 |
|   name   |              admin               |
+----------+----------------------------------+
接着,创建一个称为admin的角色,其代码如下:
# keystone role-create --name=admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | 59aa2c3dcbf542d1a84e6703eb45d8b1 |
|   name   |              admin               |
+----------+----------------------------------+

最后,把前面创建的tenant、用户和role组合起来,在admin的tenant中分配admin的角色给用户admin,命令如下:

# keystone user-role-add --user admin --role admin --tenant admin

(5)定义Services和API Endpoints
为了使用Keystone来认证用户使用的OpenStack中的其他组件,需要在Keystone中创建组件的服务和相应的API Endpoints,组件服务的API Endpoints是一组URL加端口号,用来提供组件服务的API接口。
这里需要创建一个Keystone的服务和Keystone的API Endpoints,其代码如下:

# keystone service-create --name keystone --type identity --description
    'OpenStack Identity'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |        OpenStack Identity        |
|      id     | 6660f592f4884e7ca18d498e7aa130a1 |
|     name    |             keystone             |
|     type    |             identity             |
+-------------+----------------------------------+
# keystone endpoint-create --service-id 6660f592f4884e7ca18d498e7aa130a1 --publicurl 
'http://10.10.101.10:5000/v2.0' --adminurl 
'http://10.80.80.10:35357/v2.0' --internalurl 
'http://10.80.80.10:5000/v2.0'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |  http://10.80.80.10:35357/v2.0   |
|      id     | 2dee1b06cbda4d8095c344ab3671d0ce |
| internalurl |   http://10.80.80.10:5000/v2.0   |
|  publicurl  |  http://10.10.101.10:5000/v2.0   |
|    region   |            regionOne             |
|  service_id | 6660f592f4884e7ca18d498e7aa130a1 |
+-------------+----------------------------------+

endpoint-create命令中的service id是service-create命令得到的ID号。publicurl里面的IP使用对外是可以访问的。adminurl和internalurl使用内部管理的IP,当然这个也可以视实际情况而定。
(6)使用Keystone命令行客户端
使用命令行客户端需要通过认证,有以下两种认证的方式。
使用keystone.conf配置文件中的token认证,设置以下两个环境变量:

# export OS_SERVICE_TOKEN=openstack
# export OS_SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0/
使用在Keystone中创建的用户名及密码进行认证,设置以下环境变量:
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL="http://192.168.5.101:5000/v2.0/"

其中填入需要认证用户的tenant、用户名和密码,最后一个是认证的URL,仔细观察和Keystone的endpoint中的publicurl的关系。
第一种方式通过设置OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT来认证,适用于Keystone中还没有管理员权限的用户的情况。现在我们有了一个管理员用户,就应该通过用户登录,而不是使用token。需要取消OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT这两个变量,然后再导入用户的认证。如果同时设置了两种方式,那么系统会有一个忽略用户认证的警告,仍旧使用token的认证。命令如下:

# unset OS_SERVICE_TOKEN
# unset OS_SERVICE_ENDPOINT

可以把认证方式的变量写在一个文件中,这里命令为openstackrc,在以后每次使用的时候,导入以下文件即可。

# source openstackrc
# keystone user-list
+----------------------------------+-------+---------+-------+
|                id                |  name | enabled | email |
+----------------------------------+-------+---------+-------+
| 3372c9032dd24ee9b2dcefcdbba13f01 | admin |   True  |       |
+----------------------------------+-------+---------+-------+

3.?安装Glance镜像组件
Glance组件完成镜像模板snapshot的存储工作。Glance主要包括了glance-api和glane-registry两个服务,其安装和配置都比较简单,主要分为以下几步:
安装软件包,编辑配置文件。
创建Glance的数据库。
在Keystone中,创建Glance的用户、服务和Endpoint。
初始化Glance数据库,启动服务,确认服务正常运行。
在Glance中添加虚拟机镜像。
(1)安装软件包,编辑配置文件
安装Glance服务时,将把glance-api、glance-registry、python-glanceclient都安装上。安装命令如下:

# apt-get install -y glance

Glance的配置默认文件在/etc/glance下,需要修改如下内容。
glance-api.conf的修改如下:

[DEFAULT]
verbose = True
debug = True
sql_connection = mysql://glanceuser:openstack@localhost/glance

[keystone_authtoken]
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = openstack

[paste_deploy]
flavor=keystone
glance-registry.conf的修改如下:
[DEFAULT]
verbose = True
debug = True
sql_connection = mysql://glanceuser:openstack@localhost/glance

[keystone_authtoken]
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = openstack

[paste_deploy]
flavor=keystone

(2)创建Glance数据库
根据上面配置文件中设定的sql_connection,在数据库中创建用户名为glanceuser,密码为openstack。创建数据库glance,赋予glanceuser对数据库glance的所有权限,其代码如下:

    # mysql -uroot -p -e "CREATE DATABASE glance;"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON glance.* TO 
    'glanceuser'@'localhost'IDENTIFIED BY 'openstack';"

(3)在Keystone中,创建Glance的用户、服务和Endpoint
在这个测试安装中,Glance需要通过Keystone来进行用户的身份认证。我们已经在前面的glance-api和glance-registry配置文件中设置了认证的用户等,现在必须在Keystone中创建用户glance,加入service这个tenant,赋予admin的角色,其代码如下:

# keystone tenant-create --name=service
# keystone user-create --name=glance --pass=openstack
# keystone user-role-add --user glance --role admin --tenant service

在Keystone通过用户验证后,因为需要知道Glance的服务和Endpoint API,所以必须在Keystone创建,其代码如下:

# keystone service-create --name glance --type image --description'OpenStack
    Image Service'     
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |     OpenStack Image Service      |
|      id     | 7bedcd5298d5404bbc82219f61372c1d |
|     name    |              glance              |
|     type    |              image               |
+-------------+----------------------------------+
# keystone endpoint-create --service-id
    7bedcd5298d5404bbc82219f61372c1d –publicurl
    'http://10.10.101.10:9292'--adminurl
    'http://10.80.80.10:9292/' --internalurl 
    'http://10.80.80.10:9292/'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://10.80.80.10:9292/     |
|      id     | b44b36a8c8c5406887f3d0a6d819b57d |
| internalurl |     http://10.80.80.10:9292/     |
|  publicurl  |     http://10.10.101.10:9292     |
|    region   |            regionOne             |
|  service_id | 7bedcd5298d5404bbc82219f61372c1d |
+-------------+----------------------------------+

两条命令的service id必须一致。
(4)初始化Glance数据库,启动服务,确认服务正常运行
使用glance-manage命令,初始化glance数据库,其命令如下:

# glance-manage db_sync

重启服务,查看/var/log/glance目录下的日志文件,确保启动后没有出错信息。也可以在glance-api.conf和glance-registry.conf中设置debug和verbose为True,来得到更多的日志信息。重启代码如下:

# service glance-api restart
# service glance-registry restart

最后,确认一下服务是否运行,其代码如下:

# service glance-api status
# service glance-registry status
# glance image-list

(5)在Glance中添加虚拟机镜像
到此为止,Glance的环境已经搭建好,但是Glance中还没有可用的镜像,只是可以用来启动虚拟机的模板。模板可以自己创建,具体创建的方法将会在第6章详细介绍。在这个测试安装中,为了方便,使用网络上一个精简的可启动的Linux系统作为模板。首先下载这个小镜像,其代码如下:

# wget http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img

使用Glance命令行客户端把镜像添加到Glance中。Glance会在数据库中记录,并把文件复制到指定的目录,其代码如下:

# glance image-create --name myFirstImage --is-public true --container-format bare
    --disk-format qcow2 --file cirros-0.3.1-x86_64-disk.img

再次运行“glance image-list”命令查看已上传的镜像,其代码如下:

# glance image-list
+--------------------------------------+--------------+-------------+------------------+----------+--------+
| ID                                   | Name         | Disk Format | Container Format | Size     | Status |
+--------------------------------------+--------------+-------------+------------------+----------+--------+
| d56d2ae1-2f8e-4801-ac06-b9e0ce7af6da | myFirstImage | qcow2       | bare             | 13147648 | active |
+--------------------------------------+--------------+-------------+------------------+----------+--------+

4.?安装Neutron网络组件
Neutron在整个OpenStack中负责网络部分的功能,其实Neutron仅仅只有管理功能,实际的网络方面的实现依靠的是更加底层的网络技术,譬如Linux网桥、Open vSwitch和Nicira等,在Neutron中,这些网络技术以plugin的形式使用。因此,在各个节点上,需要安装Neutron的不同服务,才能形成一个真正的网络组件。
在Grizzly版本发布以后,网络组件改名为Neutron,以前叫做Quantum,因此,当看到有的文档或者安装过程提到Quantum的时候,其实指的就是Neutron。
在控制节点上,需要主要进行以下几个步骤:
安装neutron-server服务,修改配置文件。
在Keystone中创建用户、服务和Endpoint。
在MySQL中创建数据库和用户。
(1)安装软件包,修改配置文件
Neutron的软件包按照功能可以划分为多个,在控制节点,只需要安装neutron-server的服务。同时,依赖会安装neutron-plugin-openvswitch。其代码如下:

# apt-get install -y neutron-server

修改配置文件,主要是设定Keystone认证和Neutron数据库,其代码如下:

# vi /etc/neutron/neutron.conf
[keystone_authtoken]
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = neutron
admin_password = openstack
signing_dir = $state_path/keystone-signing

[database]
connection = mysql://neutronuser:openstack@localhost/neutron

[DEFAULT]
# 如果用户设置了RabbitMQ的默认guest密码,那么必须去掉这一行的注释,写入自己设定的密码
rabbit_password = guest
ovs_neutron_plugin.ini配置文件代码如下:
# vi /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini
[OVS]
tenant_network_type = gre
enable_tunneling = True
tunnel_type = gre
tunnel_id_ranges = 1:1000

[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

[database]
connection = mysql://neutronuser:openstack@10.80.80.10/neutron

(2)创建用户、服务和Endpoint
在Keystone中创建用户、服务和Endpoint,其代码如下:

# keystone user-create --name=neutron --pass=openstack
# keystone user-role-add --user neutron --role admin --tenant service
# keystone service-create --name neutron --type network --description 
    'OpenStack Networking service'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |   OpenStack Networking service   |
|      id     | 7dc990a812874042bc96a1ca983ede1a |
|     name    |             neutron              |
|     type    |             network              |
+-------------+----------------------------------+
# keystone endpoint-create --service-id 7dc990a812874042bc96a1ca983ede1a --publicurl 
    'http://10.10.101.10:9696/' --adminurl 
    'http://10.80.80.10:9696/' --internalurl 
    'http://10.80.80.10:9696/'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://10.80.80.10:9696/     |
|      id     | 1b67e73564fc4f6087fd90aed723d8a4 |
| internalurl |     http://10.80.80.10:9696/     |
|  publicurl  |    http://10.10.101.10:9696/     |
|    region   |            regionOne             |
|  service_id | 7dc990a812874042bc96a1ca983ede1a |
+-------------+----------------------------------+

(3)创建Neutron数据库和用户
因为Neutron的数据库会被其他节点连接,所以必须赋予Neutron数据库用户相应的权限,使neutronuser不但能从本机连接,还要能从节点机器上连接控制服务器上的数据库,其代码如下:

# mysql -uroot -p -e "CREATE DATABASE neutron;"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON neutron.* TO 
    'neutronuser'@'%'IDENTIFIED BY'openstack';"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON neutron.* TO'neutronuser'@
    'localhost'IDENTIFIED BY'openstack';"

5.?安装Nova组件
Nova项目中虽然包含了很多组件,但是要在控制服务器上安装除去nova-compute的其他一切Nova组件。其过程主要分为下面几步:
安装Nova软件包,设置Nova配置文件。
创建数据库,初始化Nova数据库。
在Keystone中创建Nova用户和Endpoint。
1)安装Nova软件包,并配置相应文件,命令如下:

# apt-get install -y nova-api nova-cert novnc nova-consoleauth nova-scheduler 
    nova-novncproxy nova-doc nova-conductor

Nova的配置文件放在/etc/nova目录下,这次安装中需要修改的是api-paste.ini和nova.conf这两个文件。
api-paste.ini中要修改的是认证部分,其代码如下:

# vi /etc/nova/api-paste.ini
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = openstack
signing_dir = /var/lib/nova/keystone-signing
auth_version = v2.0

Nova几乎全部的配置都是写在nova.conf中的,其中选项参数很多,这里,笔者将列出一份测试环境安装使用的nova.conf配置文件以供参考。

    # vi /etc/nova/nova.conf
[DEFAULT]
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/run/lock/nova
verbose=True
debug=True
api_paste_config=/etc/nova/api-paste.ini
compute_scheduler_driver=nova.scheduler.simple.SimpleScheduler
rabbit_host=10.80.80.10
rabbit_password=guest
nova_url=http://10.80.80.10:8774/v1.1/
sql_connection=mysql://novauser:openstack@10.80.80.10/nova
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf
enabled_apis=ec2,osapi_compute,metadata

# Auth
use_deprecated_auth=false
auth_strategy=keystone

# Imaging service
glance_api_servers=10.80.80.10:9292
image_service=nova.image.glance.GlanceImageService

# Vnc configuration
novnc_enabled=true
novncproxy_base_url=http://10.10.101.10:6080/vnc_auto.html
novncproxy_port=6080
vncserver_proxyclient_address=10.80.80.10
vncserver_listen=10.80.80.10

# Network settings
network_api_class=nova.network.neutronv2.api.API
neutron_url=http://10.80.80.10:9696
neutron_auth_strategy=keystone
neutron_admin_tenant_name=service
neutron_admin_username=neutron
neutron_admin_password=openstack
neutron_admin_auth_url=http://10.80.80.10:35357/v2.0
    libvirt_vif_driver=
        nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
    linuxnet_interface_driver=
        nova.network.linux_net.LinuxOVSInterfaceDriver
#If you want Quantum + Nova Security groups
firewall_driver=nova.virt.firewall.NoopFirewallDriver
security_group_api=neutron
#If you want Nova Security groups only, comment the two lines above and 
    uncomment line -1-.
#-1-firewall_driver=
nova.virt.libvirt.firewall.IptablesFirewallDriver

#Metadata
service_neutron_metadata_proxy = True
neutron_metadata_proxy_shared_secret = openstack
metadata_host = 10.80.80.10
metadata_listen = 0.0.0.0
metadata_listen_port = 8775

# Compute #
#compute_driver=libvirt.LibvirtDriver

# Cinder #
volume_api_class=nova.volume.cinder.API
osapi_volume_listen_port=5900

# Quota #
quota_cores=5
quota_floating_ip3=3
quota_gigabytes=20
quota_driver=nova.quota.DbQuotaDriver
quota_instances=5
quota_key_pairs=2
quota_ram=51200
quota_volumes=2

2)创建并初始化Nova数据库,命令如下:

# mysql -uroot -p -e "CREATE DATABASE nova;"

因为Nova数据库也需要其他节点连接,所以必须赋予从localhost和其他节点连接的权限,代码如下:

# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON nova.* TO novauser@'%' IDENTIFIED BY
    'openstack';"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON nova.* TO novauser@'localhost'
    IDENTIFIED BY'openstack';"

初始化Nova数据库的表结构:

# nova-manage db sync

修改配置文件和初始化数据库后,需要重启Nova所有安装的服务,其代码如下:

# cd /etc/init.d/; for i in $( ls nova-* ); do sudo service $i restart; done

用如下命令查看Nova服务的状态,:-)表示服务运行,XXX表示服务停止。也可以查看/var/log/nova下的各个日志文件是否有出错日志。如果有出错日志和XXX显示,那么必须排查错误。错误很可能出现在nova.conf配置文件上。在进行下一步前,必须确保服务正常运行,其代码如下:

# nova-manage service list

3)在Keystone中创建Nova用户和Endpoint,示例如下:

# keystone user-create --name=nova --pass=openstack
# keystone user-role-add --user nova --role admin --tenant service
# keystone service-create --name nova --type compute --description'OpenStack 
    Compute Service'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |    OpenStack Compute Service     |
|      id     | bc4873dd598a4f23a2a61b225914efe4 |
|     name    |               nova               |
|     type    |             compute              |
+-------------+----------------------------------+
# keystone endpoint-create --service-id bc4873dd598a4f23a2a61b225914efe4 –publicurl
    'http://10.10.101.10:8774/v2/$(tenant_id)s' --adminurl 
    'http://10.80.80.10:8774/v2/$(tenant_id)s' --internalurl 
    'http://10.80.80.10:8774/v2/$(tenant_id)s'
+-------------+-------------------------------------------+
|   Property  |                   Value                   |
+-------------+-------------------------------------------+
|   adminurl  |  http://10.80.80.10:8774/v2/$(tenant_id)s |
|      id     |      e15110d5150247ef88f126ad2ea445ed     |
| internalurl |  http://10.80.80.10:8774/v2/$(tenant_id)s |
|  publicurl  | http://10.10.101.10:8774/v2/$(tenant_id)s |
|    region   |                 regionOne                 |
|  service_id |      bc4873dd598a4f23a2a61b225914efe4     |
+-------------+-------------------------------------------+

运行Nova的客户端命令,列出当前可用的镜像,测试是否能正常运行,其代码如下:

# nova image-list
+--------------------------------------+--------------+--------+--------+
| ID                                   | Name         | Status | Server |
+--------------------------------------+--------------+--------+--------+
| aae5f478-a8d4-4f56-8fb6-03c8e849f009 | myFirstImage | ACTIVE |        |
+--------------------------------------+--------------+--------+--------+

6.?安装Cinder
Cinder有三个组件服务:cinder-api、cinder-scheduler、cinder-volume。要在控制节点上安装cinder-api和cinder-scheduler,其中cinder-api负责接收其他组件或命令对cinder-volume的请求,而cinder-scheduler则是Cinder的调度程序,调度使用哪个volume。
(1)安装和配置
命令如下:

# apt-get install -y cinder-api cinder-scheduler

配置Keystone认证文件,其代码如下:

# vi /etc/cinder/api-paste.ini
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = cinder
admin_password = openstack
signing_dir = /var/lib/cinder/keystone-signing
     
# vi /etc/cinder/cinder.conf
[DEFAULT]
rootwrap_config = /etc/cinder/rootwrap.conf
api_paste_confg = /etc/cinder/api-paste.ini
iscsi_helper = tgtadm
volume_name_template = volume-%s
volume_group = cinder-volumes
verbose = True
auth_strategy = keystone
state_path = /var/lib/cinder
lock_path = /var/lock/cinder
volumes_dir = /var/lib/cinder/volumes

rabbit_password = guest

[database]
connection = mysql://cinderuser:openstack@localhost/cinder

(2)创建数据库和Keystone用户
创建和cinder.conf中connection变量一致的数据库用户名及密码,其代码如下:

# mysql -uroot -p -e "CREATE DATABASE cinder;"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON cinder.* TO cinderuser@'localhost'
    IDENTIFIED BY 'openstack';"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON cinder.* TO cinderuser@'%'
    IDENTIFIED BY 'openstack';"

初始化数据库cinder表结构:

# cinder-manage db sync

在Keystone中添加cinder用户和服务的Endpoint,其代码如下:

# keystone user-create --name=cinder --pass=openstack
# keystone user-role-add --user cinder --role admin --tenant service
# keystone service-create --name=cinder --type=volume --description="Cinder 
    Volume Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |       Cinder Volume Service      |
|      id     | fd43556d811a4822a615a75928d5969d |
|     name    |              cinder              |
|     type    |              volume              |
+-------------+----------------------------------+
# keystone endpoint-create --service-id=fd43556d811a4822a615a75928d5969d 
    --publicurl=http://10.80.80.10:8776/v1/%\(tenant_id\)s --internalurl=
    http://10.80.80.10:8776/v1/%\(tenant_id\)s --adminurl=
    http://10.80.80.10:8776/v1/%\(tenant_id\)s

重启Cinder服务,其代码如下:

# service cinder-api restart
# service cinder-scheduler restart

可以使用命令查看Cinder服务的状态,其代码如下:

# cinder-manage service list
Binary           Host                                 Zone             Status
    State Updated At
cinder-scheduler controller                           nova             enabled    
    :-)   2013-11-25 13:16:09

7.?安装Horizon
Horizon是OpenStack的一个Dashboard,也就是以网页形式面向用户的一个界面。通过Horizon,用户可以很方便地使用OpenStack,而不必使用烦琐的命令行。安装OpenStack的Dashboard的过程很简单,其命令如下:

# apt-get install -y openstack-dashboard memcached

安装好以后,就可以使用Web浏览器了,这里建议使用Chrome访问10.80.80.10/horizon。此处暂时可以使用用户名admin和密码OpenStack进行登录。这个界面是Ubuntu包装过的,如果想要用Horizon原来的界面,可以去除Ubuntu的界面,代码如下:

# dpkg --purge openstack-dashboard-ubuntu-theme
# service apache2 restart; service memcached restart

至此,可以打开Web浏览器,在地址栏里输入10.80.80.10/horizon,其中IP地址需更换成用户实际环境中的。此时,会看到OpenStack登录界面,使用用户名admin和密码OpenStack进行登录,如图2-2所示。
screenshot

在Keystone中创建Member角色,因为Horizon中会用到这个角色,其代码如下:

# keystone role-create --name Member
相关文章