OpenStack Newton 开源云平台构建

OpenStack Newton 单节点配置

OpenStack-Node-Tables
OpenStack-VMSoft
首先新建一个虚拟机,并配置网络适配器为桥接网络,如上图所示。
点击开启虚拟机按钮,准备安装操作系统,如图所示:
OpenStack-VMInstall-1
等待系统初始化完成,并出现系统界面后,选择你的语言,并选择安装Ubuntu,在此界面中,选择安装Ubuntu时下载更新以获取最新的软件包,如图所示:
OpenStack-VMInstall-2
此处可以勾选安装Ubuntu时下载更新以及安装第三方软件。可根据个人喜好勾选。
OpenStack-VMInstall-3
完成点选后,点击继续按钮,出现如下的界面,可根据个人喜好分区:
OpenStack-VMInstall-4
点击现在安装按钮,系统自动默认选择上海地区,可以直接点击继续按钮继续安装:
OpenStack-VMInstall-5
在此处可以选择当前系统的键盘布局,输入相应的文字进行测试,并点击继续:
OpenStack-VMInstall-6
点击继续按钮后,输入个人相关信息资料,点击继续,开始安装操作系统……
OpenStack-VMInstall-7
OpenStack-VMInstall-8
OpenStack-VMInstall-9
OpenStack-VMInstall-10
当系统安装完成后,重新启动,看到如下界面,为系统安装成功:
OpenStack-VMInstall-11
OpenStack-VMInstall-12
待系统安装完成后,会自动重启,重启后,当出现如下界面时,Ubuntu安装成功:
OpenStack-VMInstall-13
安装成功后,进入系统,刚刚安装完成系统,需要执行系统软件源更新操作,命令如下:

$ sudo apt-get update && sudo apt-get dist-upgrade

执行完成后,准备OpenStack Newton版本的配置。
首先需要进行网络配置。虚拟机需要增加两块网卡,如图所示。两个网络适配器都使用桥接模式连接网络,设置桥接网络需要手动配置IP地址,需更改文件/etc/network/interfaces文件,如图所示:
OpenStack-VMSetting
OpenStack-NetworkConfig
更改后的/etc/network/interfaces文件内容如下:

root@Fa1c0n-OpenStack-Newton:\~# cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
     auto lo
     iface lo inet loopback
     auto ens33
     iface ens33 inet static
      address   59.69.0.158
      netmask   255.255.0.0
      broadcast 59.69.255.255
      gateway   59.69.40.1
      dns-nameservers 114.114.114.114
     auto ens38
     iface ens38 inet static
      address 192.168.0.1
      netmask   255.255.255.0
      network   192.168.0.0
      broadcast 192.168.0.255

更改完成后,使用命令:

$ sudo /etc/init.d/networking restart

命令重新启动网络服务,生效后,使用ifconfig命令查看,如上图所示。
更改完成后,网络配置完毕。接下来配置NTP时间服务器,NTP是用来使用系统和一个精确的时间源保持时间同步的协议。由于本次使用OpenStack Newton版本,所以,此处使用chrony。使用命令:

$ sudo apt-get install chrony

会安装好chrony服务,编辑文档/etc/chrony/chrony.conf文件并添加权限:

allow 59.69.0.0/24
server *ntp.ubuntu.com* iburst

保存退出后,使用下面的命令重启chrony服务:

$ sudo service chrony restart

注意:若使用了chrony服务,则不能再安装ntp服务。ntp与chrony冲突。
Chrony-Install
Chrony-Setting
执行完上面的操作后,为验证chrony是否工作正常,可以使用如下命令来验证:

$ sudo chronyc sources

如图所示,即为工作正常:
Chrony-Status
接下来开始安装OpenStack Packages,OpenStack Packages中包含了OpenStack运行必须的公共属性列表以及版本确定相关的内容。一共使用如下几条命令共同完成安装Openstack Packages:

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository cloud-archive:newton
$ sudo apt-get install python-openstackclient
$ sudo apt-get update && sudo apt-get dist-upgrade

命令执行过程如下图所示,
待安装完成后,建议使用命令reboot/init 6执行重启操作,方便后续命令的执行。
Software-Properties-Common
接下来是数据库的安装,此处的数据库选择使用与MySQL数据库相似的MariaDB,MariaDB使用的引擎(InnoDB)在执行效率上高于MySQL(MyISAM),故此处选用MariaDB进行安装。
使用如下的命令开始安装MariaDB:

$ sudo apt-get install mariadb-server python-pymysql

输入以下命令创建MariaDB数据库配置文件:

$ touch /etc/mysql/mariadb.conf.d/99-openstack.cnf

在安装完成MariaDB后,配置/etc/mysql/mariadb.conf.d/99-openstack.cnf文件新增[mysqld]部分,并添加如下内容:

$ sudo vi /etc/mysql/mariadb.conf.d/99-openstack.cnf
[mysqld]
bind-address = 59.69.0.158
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

MariaDB-Setup
MariaDB-Settings
在上面的配置参数中,bind-address是管理端的IP地址,并设置了服务器端默认的字符集为UTF-8.
在完成配置后,使用命令:

$ service mysql restart

重新启动mariadb,此处可以选择使用mysql_secure_installation命令执行mysql安装部署。可以为数据库root用户设置一个合适的、安全的密码。

接下来开始安装消息队列服务。消息队列服务默认使用rabbitmq。当然,除了RabbitMQ还有ActiveMQ和ZeroMQ。在OpenStack Newton中,官方推荐使用RabbitMQ消息队列服务,则使用如下命令安装RabbitMQ:

$ sudo apt-get install rabbitmq-server

RabbitMQ-Install
在完成安装RabbitMQ后,需要使用rabbitmqctl工具创建一个新用户。
使用下面的命令创建一个用户:

$ rabbitmqctl add_user openstack openstack

创建完成后,设置OpenStack的读取权限,使用如下命令:

$ rabbitmqctl set_permissions openstack “.*” “.*” “.*”

如上图所示,rabbitmq配置完成。接下来配置memcached。memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。执行下面的命令安装memcached:

$ sudo apt-get install memcached python-memcache

编辑/etc/memcached.conf文件并设置其IP为127.0.0.1或59.69.0.158,命令为:

-l 59.69.0.158

保存退出后,重新启动memcached服务,命令如下:

$ sudo service memcached restart

Memcached-Setup
完成后,如图所示。到此处,OpenStack的环境准备工作已经结束。接下来开始安装核心验证组件:KeyStone。
首先使用root用户登录MariaDB数据库,使用的命令如下:

$ mysql -u root -p

并创建keystone数据库:

mysql> CREATE DATABASE KEYSTONE;

并将权限赋给keystone数据库:

mysql> GRANT ALL PRIVILEGES ON KEYSTONE.* TO ‘keystone’@‘localhost’ IDENTIFIED BY ‘openstack’;
mysql> GRANT ALL PRIVILEGES ON KEYSTONE.* TO ‘keystone’@‘%’ IDENTIFIED BY ‘openstack’;

在完成数据库的配置后,可以开始安装Keystone组件,使用如下命令安装Keystone组件:

$ sudo apt-get install keystone

等待keystone组件安装完成后,开始配置keystone组建。安装及
数据库操作如下图所示:
Keystone-Database-Setup
编辑文件/etc/keystone/keystone.conf文件,修改[database]下的connection部分,并在token部分添加provider为fernet:

[database]
...
connection = mysql+pymysql://keystone:openstack@localhost/KEYSTONE
[token]
...
provider = fernet

执行完毕后,保存退出。输入命令:

$ su -s /bin/sh -c “keystone-manage db_sync” keystone

此处安装时出现了一个错误,提示拒绝数据库连接,解决办法:
更改connection为:
connection = mysql+pymysql://keystone:openstack@59.69.0.158/KEYSTONE
更换后重新执行数据库同步,即可成功。

执行成功后,如图所示:
Keystone-Database-Sync
接下来配置Fernet Token:首先加载fernet key repositories:

$ keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
$ keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

并且为keystone添加bootstrap:

$ keystone-manage bootstrap --bootstrap-password openstack --bootstrap-admin-url http://controller:35357/v3/ --bootstrap-internal-url http://controller:35357/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne

配置完成后,如图所示:
Keystone-Manage-Setup
接下来配置Apache HTTP服务器。编辑文件/etc/apache2/apache2.conf文件并添加如下代码:

ServerName controller

注:即使此处配置了ServerName为controller,仍然建议在后面的配置中有controller的部分依然按照IP地址配置,否则极容易出现404.

完成后,重启apache服务器,并删除sqlite数据库,输入如下代码以完成:

$ service apache2 restart
$ rm -rf /var/lib/keystone/keystone.db

完成后,输出账户信息到当前配置环境中:

$ export OS_USERNAME=admin
$ export OS_PASSWORD=openstack
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3

执行效果如图所示:
Apache2-Setting
认证服务为每项OpenStack服务都提供了认证。认证服务使用了域、项目、用户和角色的组合。

创建一个Service项目为每项提供服务添加到环境中。创建Service项目输入以下命令:

$ openstack project create —-domain default —-description “Service Project” service

通常非管理员任务需要使用普通权限的账户和用户,创建demo项目和用户使用下面的命令:

$ openstack project create --domain default --description "Demo Project" demo

执行效果如下图所示:
OpenStack-Project-Create

创建一个demo用户:

$ openstack user create --domain default --password-prompt demo

创建user角色:

$ openstack role create user

把用户demo添加到demo项目中:
OpenStack-User-Create

$ openstack role add --project demo --user demo user

出于安全考虑,需要禁用临时密码验证机制(明文密码),编辑/etc/keystone/keystone-paste.ini文件并移除[pipeline:public_api], [pipeline:admin_api],[pipeline:api_v3]中的admin_token_auth,并使用如下命令取消OS_AUTH_URL和OS_PASSWORD环境变量设置:

$ unset OS_AUTH_URL OS_PASSWORD

对于admin用户,请求一个认证密钥:

$ openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
Password: openstack

对于demo用户,请求一个认证密钥:

$ openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name demo --os-username demo token issue
Password: openstack

命令使用demo用户的密码并且API端口为5000只提供非admin用户访问keystone API.
OpenStack-RoleAdd
接下来需要创建admin和demo项目、用户的客户端环境脚本。以后会部分引用这些脚本以加载客户机操作的适当认证凭据。
创建admin-openrc文件并添加如下内容:

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

创建demo-openrc文件并添加如下内容:

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

启动特定的项目和用户的客户端,可以加载特定的脚本内容:

$ . admin-openrc

请求一个认证密钥可以使用如下命令:

$ openstack token issue

OpenStack-TkIssue

在配置过程中,若直接使用. admin-openrc命令执行,使用命令export | grep OS_ 查看会发现脚本执行后并没有执行对应的export。
实际上,由于export命令在脚本中执行,Linux执行脚本会启动子shell执行脚本命令,故此处若直接执行,在子shell中export生效后,脚本执行完毕,子shell退出。回到执行处shell查看export仍没有变化就是这个原因。
解决方案:由于直接执行不能生效,可以使用source命令加载脚本文件即可生效。如上图所示。

至此,keystone认证组件配置完毕。接下来配置glance(镜像管理)。

配置glance首先需要创建glance数据库,首先进入数据库,执行如下命令:

$ mysql -u root -p

并创建glance数据库:

mysql> CREATE DATABASE GLANCE;

为glance数据库赋予权限:

mysql> GRANT ALL PRIVILEGES ON GLANCE.* TO 'glance'@'localhost' IDENTIFIED BY 'openstack';
mysql> GRANT ALL PRIVILEGES ON GLANCE.* TO ‘glance'@'%' IDENTIFIED BY 'openstack';

执行成功后,退出数据库。
此时若使用了.demo-openrc文件请执行下面的命令切换至admin环境:

$ .admin-openrc

创建一个glance用户:

$ openstack user create --domain default --password-prompt glance
User Password: openstack
Repeat User Password: openstack

Glance-Database-Create
为glance用户和service项目添加admin角色:

$ openstack role add --project service --user glance admin

创建glance服务实体:

$ openstack service create --name glance --description "OpenStack Image" image

创建镜像服务API:

$ openstack endpoint create --region RegionOne image public http://controller:9292
$ openstack endpoint create --region RegionOne image internal http://controller:9292
$ openstack endpoint create --region RegionOne image admin http://controller:9292

OpenStack-Endpoint-Create
配置完成后,开始安装glance:

$ sudo apt-get install glance

Glance-Package-Install
编辑/etc/glance/glance-api.conf文件并修改[database]部分:

[database]
…
connection = mysql+pymysql://glance:openstack@controller/GLANCE

在[keystone_authtoken]和[paste_deploy]部分,配置认证访问服务:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = openstack

[paste_deploy]
...
flavor = keystone

在[glance_store]部分,配置系统本地存储镜像的目录:

[glance_store]
...
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

编辑/etc/glance/glance-registry.conf文件:
在[database]区域,配置数据库访问权限:

[database]
...
connection = mysql+pymysql://glance:openstack@controller/GLANCE

在[keystone_authtoken]和[paste_deploy]区域,配置

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = openstack

[paste_deploy]
...
flavor = keystone

配置修改完成后,同步至数据库,使用如下命令:

# su -s /bin/sh -c "glance-manage db_sync" glance

如下图所示:
Glance-DBSync
要完成glance安装,重新启动glance服务,命令如下:

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

glance配置完成,接下来验证glance配置是否正确。
加载admin权限脚本:

$ . admin-openrc

此处可以使用本文档使用的测试镜像(很小)也可以使用自行制作的qcow2镜像或img镜像。
小文件镜像方便测试,所以此处使用cirroslinux,使用如下命令下载cirrosLinux镜像:

$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

使用openstack脚本添加一个镜像服务,命令如下:

$ openstack image create "cirros"  --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare  --public

如图所示:
Cirros-Download
创建完毕后,可以使用如下命令检查镜像状态是否处于active:

$ openstack image list

至此,glance组件配置完毕。
OpenStack-Image-Create
接下来开始配置compute service(核心计算组件)。
到compute service开始,分为单节点和多节点安装。文档的前半部分配置为单节点配置,后半部分有多节点配置的说明。
安装nova组件,首先创建nova组件所需的数据库,输入如下命令进入数据库:

$ mysql -u root -p

创建两个数据库,一个是nova,一个是nova_api:

mysql> CREATE DATABASE nova_api;
mysql> CREATE DATABASE nova;

为两个数据库赋予访问权限:

mysql> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
mysql> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'openstack';

若此时使用demo-openrc,将环境切换至admin环境下:

$ . admin-openrc

配置nova服务访问权限,首先创建nova用户:

$ openstack user create --domain default  --password-prompt nova
User Password: openstack
Repeat User Password: openstack

如图所示:
OpenStack-User-Create
并添加nova用户到admin角色中:

$ openstack role add --project service --user nova admin

创建nova服务实体:

$ openstack service create --name nova  --description "OpenStack Compute" compute

创建计算服务API:

$ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s

如图所示:
Nova-Endpoint-Create
创建完成后,开始安装nova核心组件,使用apt-get命令安装nova:

# sudo apt install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler

Nova-Core-Install
编辑/etc/nova/nova.conf文件:
在[api_database]和[database]区域,配置数据库访问URI:

[api_database]
...
connection = mysql+pymysql://nova:openstack@controller/nova_api

[database]
...
connection = mysql+pymysql://nova:openstack@controller/nova

在[DEFAULT]区域,配置RabbitMQ消息队列访问权限:

[DEFAULT]
...
transport_url = rabbit://openstack:openstack@controller

在[DEFAULT]区域和[keystone_authtoken]区域,配置keystone访问权限:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack

同时,在[DEFAULT]区域,配置my_ip选项为管理控制节点的IP地址,此处设为当前IP:

[DEFAULT]
...
my_ip = 59.69.0.158
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

在[vnc]部分,配置vnc代理:

[vnc]
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

在[glance]部分,配置glance api地址:

[glance]
...
api_servers = http://controller:9292

并配置nova的临时文件路径:

[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp

Nova-Core-Setting
配置文件如上图及下图所示
Nova-API-Paste
配置完成后,执行数据库同步操作,输入以下命令以执行数据库同步:

# su -s /bin/sh -c "nova-manage api_db sync" nova
# su -s /bin/sh -c "nova-manage db sync" nova

NovaAPI-Manage-DBSync
Nova-Manage-DBSync
全部配置完成后,重新启动nova相关服务组件,命令如下:

# sudo service nova-api restart
# sudo service nova-consoleauth restart
# sudo service nova-scheduler restart
# sudo service nova-conductor restart
# sudo service nova-novncproxy restart

至此nova配置完毕,接下来验证nova的服务是否均正常运行:
若此时使用demo-openrc,将环境切换至admin环境下:

$ . admin-openrc

查看nova服务列表,并检查status与state是否正常,输入以下命令:

$ openstack compute service list

若全部正常,至此nova计算服务配置完毕。
Nova-Compute-Service-List
接下来配置网络服务。
安装neutron组件,首先创建neutron组件所需的数据库,输入如下命令进入数据库:

$ mysql -u root -p

创建数据库操作如下:

mysql> CREATE DATABASE NEUTRON;

为两个数据库赋予访问权限:

mysql> GRANT ALL PRIVILEGES ON NEUTRON.* TO ‘neutron'@'localhost' IDENTIFIED BY 'openstack';
mysql> GRANT ALL PRIVILEGES ON NEUTRON.* TO 'neutron'@'%'  IDENTIFIED BY 'openstack';

若此时使用demo-openrc,将环境切换至admin环境下:

$ . admin-openrc

配置neutron服务访问权限,首先创建neutron用户:

$ openstack user create --domain default --password-prompt neutron
User Password: openstack
Repeat User Password: openstack

Neutron-User-Create
并添加neutron用户到admin角色中:

$ openstack role add --project service --user neutron admin

创建neutron服务实体:

$ openstack service create --name neutron --description "OpenStack Networking" network

创建网络服务API:

$ openstack endpoint create --region RegionOne network public http://controller:9696
$ openstack endpoint create --region RegionOne network internal http://controller:9696
$ openstack endpoint create --region RegionOne network admin http://controller:9696

Neutron-Endpoint-Create
Neutron-Endpoint-Create2
截至此时,neutron的网络配置部分分为两种配置方法。
第一种方法部署了最简单的可能架构,其仅支持将实例附加到提供者(外部)网络。没有自助服务(专用)网络,路由器或浮动IP地址。只有管​​理员或其他特权用户才能管理提供商网络。
第二种方法增强了第一种方法的层3服务,支持将实例附加到自助服务网络。演示或其他非特权用户可以管理自助服务网络,包括在自助服务和提供商网络之间提供连接的路由器。此外,浮动IP地址使用来自外部网络(例如因特网)的自助服务网络提供到实例的连接。
自助服务网络通常使用覆盖网络。覆盖网络协议(如VXLAN)包括额外的报头,这增加了开销并减少了有效载荷或用户数据的可用空间。在没有虚拟网络基础设施的知识的情况下,实例尝试使用1500字节的默认以太网最大传输单元(MTU)来发送分组。网络服务通过DHCP自动向实例提供正确的MTU值。但是,某些云映像不使用DHCP或忽略DHCP MTU选项,并需要使用元数据或脚本进行配置。
由于配置示例机器使用了双网卡,故本文档使用方法2配置网络,方法1的截图不再提供,只提供方法2的截图。方法2与方法1大致部分相同,方法1较方法2而言少配置了一些内容,故方法1配置难度小于方法2。若实在需要配置方法1的截图。,请参照方法2的截图。
网络配置选项方法1:
首先安装neutron相关组件,输入下面的命令以继续:

# sudo apt-get install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

安装完成后,编辑文件/etc/neutron/neutron.conf文件:
在[database]部分,配置数据库访问权限:

[database]
...
connection = mysql+pymysql://neutron:openstack@controller/NEUTRON

配置完成后,在[DEFAULT]部分,开启ML2插件并禁用附加插件并配置RabbitMQ消息队列访问以及添加验证方法:

[DEFAULT]
...
core_plugin = ml2
service_plugins =
...
transport_url = rabbit://openstack:openstack@controller
...
auth_strategy = keystone

并配置keystone访问权限部分:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = openstack

接下来修改[DEFAULT]和[NOVA]部分:

[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True

[nova]
...
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = nova
password = openstack

配置完成后,编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
在[ml2]部分,添加并修改如下内容:

[ml2]
...
type_drivers = flat,vlan
...
tenant_network_types =
...
mechanism_drivers = linuxbridge
...
extension_drivers = port_security

并在[ml2_type_flat]部分,将网络配置为外部网络:

[ml2_type_flat]
...
flat_networks = provider

在[securitygroup]中开启防火墙以提高安全组规则的效率:

[securitygroup]
...
enable_ipset = True

接下来配置Linux网桥代理:
编辑文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件:
在[linux_bridge]部分中,配置虚拟网络接口到物理网络接口的映射:

[linux_bridge]
physical_interface_mappings = provider:eth0

在[vxlan]部分,禁用VXLAN覆盖网络:

[vxlan]
enable_vxlan = False

在[securitygroup]部分中,启用安全组并配置Linux网桥iptables防火墙驱动程序:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

配置DHCP服务:
编辑/etc/neutron/dhcp_agent.ini文件:
在[DEFAULT]部分中,配置Linux桥接网络接口驱动程序,Dnsmasq DHCP驱动程序,并启用隔离的元数据,因此虚拟机可以通过网络访问元数据信息:

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

网络配置选项方法2:
首先安装neutron相关组件,输入下面的命令以继续:

# sudo apt-get install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent

如图所示:
Neutron-Install
安装完成后,编辑文件/etc/neutron/neutron.conf文件:
在[database]部分,配置数据库访问权限:

[database]
...
connection = mysql+pymysql://neutron:openstack@controller/NEUTRON

配置完成后,在[DEFAULT]部分,开启ML2插件并禁用附加插件并配置RabbitMQ消息队列访问以及添加验证方法:

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
...
transport_url = rabbit://openstack:openstack@controller
...
auth_strategy = keystone

并配置keystone访问权限部分:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = openstack

接下来修改[DEFAULT]和[NOVA]部分:

[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True

[nova]
...
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = nova
password = openstack

配置完成后,编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
在[ml2]部分,添加并修改如下内容:

[ml2]
...
type_drivers = flat,vlan,vxlan
...
tenant_network_types = vxlan
...
mechanism_drivers = linuxbridge,l2population
...
extension_drivers = port_security

并在[ml2_type_flat]部分,将网络配置为外部网络:

[ml2_type_flat]
...
flat_networks = provider

在[ml2_type_vxlan]部分中,为自助服务网络配置VXLAN网络标识符范围:

[ml2_type_vxlan]
...
vni_ranges = 1:1000

在[securitygroup]中开启防火墙以提高安全组规则的效率:

[securitygroup]
...
enable_ipset = True

接下来配置Linux网桥代理:
编辑文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件:
在[linux_bridge]部分中,配置虚拟网络接口到物理网络接口的映射:

[linux_bridge]
physical_interface_mappings = provider:eth0

在[vxlan]部分,启用VXLAN覆盖网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层填充:

[vxlan]
enable_vxlan = True
local_ip = 59.69.0.158
l2_population = True

将59.69.0.158替换为控制器节点的管理IP地址。
在[securitygroup]部分中,启用安全组并配置Linux网桥iptables防火墙驱动程序:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

配置层-3服务:
编辑/etc/neutron/l3_agent.ini文件:
在[DEFAULT]部分,配置Linux网桥接口驱动和外部网桥:

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

配置DHCP服务:
编辑/etc/neutron/dhcp_agent.ini文件:
在[DEFAULT]部分中,配置Linux桥接网络接口驱动程序,Dnsmasq DHCP驱动程序,并启用隔离的元数据,因此虚拟机可以通过网络访问元数据信息:

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

至此,两种差异配置到此结束,无论使用上面哪种方法,接下来都继续配置:
接下来配置元数据服务:
编辑/etc/neutron/metadata_agent.ini文件:
在[DEFAULT]区域,配置元数据主机和共享密钥:

[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET

用元数据代理的合适密钥替换METADATA_SECRET。由于密钥属于私有数据,每台配置均不同,故文档中不做替换。
配置计算服务使用网络服务:
编辑/etc/nova/nova.conf文件:
在[neutron]部分,配置访问参数,并启动元数据代理,并配置密钥:

[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = openstack
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET

Neutron-DBManage-Sync1
Neutron-DBManage-Sync2
Neutron-DBManage-Sync3

用元数据代理的合适密钥替换METADATA_SECRET。由于密钥属于私有数据,每台配置均不同,故文档中不做替换。
配置完成后,接下来执行数据库同步操作:

# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

重新启动计算服务:

# sudo service nova-api restart

重新启动网络服务:

# sudo service neutron-server restart
# sudo service neutron-linuxbridge-agent restart
# sudo service neutron-dhcp-agent restart
# sudo service neutron-metadata-agent restart

如果使用了第二种方式配置网络,需要再增加一条命令重启层3服务:

# sudo service neutron-l3-agent restart

至此,neutron的配置完毕。接下来验证neutron是否正常工作。
若此时使用demo-openrc,将环境切换至admin环境下:

$ . admin-openrc

列出加载的扩展以验证中子服务器进程是否成功启动:

$ neutron ext-list

Neutron-Ext-List
至此,neutron的配置结束。
接下来配置Dashboard(Horizon)服务。
首先,安装Dashboard:

# sudo apt-get install openstack-dashboard

DashBoard-Install
编辑/etc/openstack-dashboard/local_settings.py文件:
配置Dashboard在控制节点上使用OpenStack服务:

OPENSTACK_HOST = "controller"

配置DashBoard主机访问权限:

ALLOWED_HOSTS = ['*', ]

配置memcached session存储服务:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'controller:11211',
    }
}

启用认证API v3版本服务:

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

启用域名支持:

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

配置API版本:

OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
}

将通过Dashboard创建的用户的默认域配置为Default:

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"

通过Dashboard创建的用户的默认角色设置为user:

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

如果使用了第一种方法配置网络,需要禁用所有的层3网络服务:

OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': False,
    'enable_quotas': False,
    'enable_ipv6': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': False,
}

最后配置时间区域【可选】:

TIME_ZONE = "TIME_ZONE"

此选项为可选配置,使用对应的时区替换TIME_ZONE,时区列表地址可以参考:http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
最后,重新启动apache2服务:

# service apache2 reload

至此,DashBoard配置完成。DashBoard的访问地址为:

http://controller/horizon

此处可以替换为:

http://59.69.0.158/horizon

至此DashBoard配置完成。
Apache-Server-Reload
接下来配置Cinder(块存储服务):
安装cinder组件,首先创建cinder组件所需的数据库,输入如下命令进入数据库:

$ mysql -u root -p

创建数据库操作如下:

mysql> CREATE DATABASE cinder;

为两个数据库赋予访问权限:

mysql> GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder'@'localhost' IDENTIFIED BY 'openstack';
mysql> GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder'@'%' IDENTIFIED BY 'openstack';

若此时使用demo-openrc,将环境切换至admin环境下:

$ . admin-openrc

配置cinder服务访问权限,首先创建cinder用户:

$ openstack user create --domain default --password-prompt cinder
User Password: openstack
Repeat User Password: openstack

Cinder-Database-Create
并添加cinder用户到admin角色中:

$ openstack role add --project service --user cinder admin

创建cinder和cinder2服务实体:

$ openstack service create --name cinder --description "OpenStack Block Storage" volume
$ openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

Cinder-Endpoint-Create
创建网络服务API:

$ openstack endpoint create --region RegionOne volume public http://controller:8776/v1/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne volume internal http://controller:8776/v1/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne volume admin http://controller:8776/v1/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(tenant_id\)s

Cinder-Endpoint-Create2
Cinder-Endpoint-Create3
配置完成后,接下来开始安装Cinder包:

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

Cinder-Install
Cinder-Install2
安装完成后,编辑/etc/cinder/cinder.conf文件:
在[database]区,配置数据库访问地址:

[database]
...
connection = mysql+pymysql://cinder:openstack@controller/CINDER

在[DEFAULT]区,配置RabbitMQ消息队列访问和验证方法:

[DEFAULT]
...
transport_url = rabbit://openstack:openstack@controller
...
auth_strategy = keystone

在[keystone_authtoken]区配置keystone访问权限:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = cinder
password = openstack

接下来,在[DEFAULT]区域,配置my_ip选项控制节点使用管理接口IP地址:

[DEFAULT]
...
my_ip = 59.69.0.158

在[oslo_concurrency]部分,配置临时文件路径:

[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp

接下来将cinder信息同步至数据库:

# su -s /bin/sh -c "cinder-manage db sync" cinder

效果如图所示:
Cinder-Manage-DbSync
完成后,需要配置计算服务使用块存储:
编辑/etc/nova/nova.conf文件:

[cinder]
os_region_name = RegionOne

配置完成后,保存重新启动nova-api服务以及块存储服务:

# sudo service nova-api restart
# sudo service cinder-scheduler restart
# sudo service cinder-api restart

至此,cinder服务配置完毕。接下来验证cinder服务是否正常工作:
若此时使用demo-openrc,将环境切换至admin环境下:

$ . admin-openrc

查看服务组件列表并确认是否每项进程都已正常工作:

$ openstack volume service list

配置完成后,如图所示:
Cinder-Volume-Service-List
至此,cinder块存储服务配置完成。
OpenStack中还有其余的很多服务,如Bare Metal service (ironic)、Container Infrastructure Management service (magnum)、Database service (trove)、Key Manager service (barbican)、Messaging service (zaqar)、Object Storage services (swift)、Orchestration service (heat)、Shared File Systems service (manila)、Telemetry Alarming services (aodh)、Telemetry Data Collection service (ceilometer)等服务可配置。由于其中有些服务与已配置过的服务内容冲突,加上部分服务可能暂时不需要,此处不再提及配置方法。若需要配置此服务,可以到http://docs.openstack.org/newton/install-guide-ubuntu/additional-services.html
这里查看服务配置文档。
在所需服务配置完成后,则开始启动虚拟机。
要启动虚拟机,需要执行以下几个步骤。
第一步,需要创建虚拟网络。
若使用第一种方法创建网络,则首先,需要加载admin环境:

$ . admin-openrc

创建网络:

$ openstack network create  —share --provider-physical-network provider --provider-network-type flat provider

本命令执行参数取自于以下两个文件的部分参数:

ml2_conf.ini:
      [ml2_type_flat]
      flat_networks = provider

linuxbridge_agent.ini:
      [linux_bridge]
      physical_interface_mappings = provider:eth1

创建一个网络的子网:

$ openstack subnet create --network provider --allocation-pool start=START_IP_ADDRESS,end=END_IP_ADDRESS --dns-nameserver DNS_RESOLVER --gateway PROVIDER_NETWORK_GATEWAY --subnet-range PROVIDER_NETWORK_CIDR provider

在本条命令中,使用Provider网络上子网使用的CIDR表示法地址替换掉PROVIDER_NETWORK_CIDR;将START_IP_ADDRESS和END_IP_ADDRESS替换为要为虚拟机分配的子网范围内的第一个和最后一个IP地址。 此范围不能包括任何现有的活动IP地址;将DNS_RESOLVER替换为DNS解析器的IP地址。 在大多数情况下,可以参考/etc/resolv.conf文件中的地址。将PROVIDER_NETWORK_GATEWAY替换为Provider网络上的网关IP地址。
示例:

$ openstack subnet create --network provider --allocation-pool start=203.0.113.101,end=203.0.113.250 --dns-nameserver 8.8.4.4 --gateway 203.0.113.1 --subnet-range 203.0.113.0/24 provider

若使用第二种方法创建网络,需要先创建provider网络:
首先加载admin环境:

$ . admin-openrc

创建网络:

$ openstack network create  —share --provider-physical-network provider --provider-network-type flat provider

创建参数使用依赖如下文件中的参数:

ml2_conf.ini:

[ml2_type_flat]
flat_networks = provider
linuxbridge_agent.ini:

[linux_bridge]
physical_interface_mappings = provider:eth1

创建一个子网:

$ openstack subnet create --network provider --allocation-pool start=START_IP_ADDRESS,end=END_IP_ADDRESS --dns-nameserver DNS_RESOLVER --gateway PROVIDER_NETWORK_GATEWAY --subnet-range PROVIDER_NETWORK_CIDR provider

在本条命令中,将DNS_RESOLVER替换为DNS解析器的IP地址。 在大多数情况下,可以参考/etc/resolv.conf文件中的地址。将START_IP_ADDRESS和END_IP_ADDRESS替换为要为虚拟机分配的子网范围内的第一个和最后一个IP地址。 此范围不能包括任何现有的活动IP地址;将PROVIDER_NETWORK_GATEWAY 替换为你想要在此网络上使用的网关地址。写出你想使用的子网使用的CIDR表示法地址替换掉PROVIDER_NETWORK_CIDR;
示例:

$ openstack subnet create --network provider --allocation-pool start=203.0.113.101,end=203.0.113.250 --dns-nameserver 8.8.4.4 --gateway 203.0.113.1 --subnet-range 203.0.113.0/24 provider

接下来加载demo环境:

$ . demo-openrc

创建网络:

$ openstack network create selfservice

创建参数使用依赖如下文件中的参数:

ml2_conf.ini:
[ml2]
tenant_network_types = vxlan

[ml2_type_vxlan]
vni_ranges = 1:1000

创建一个子网:

$ openstack subnet create --network self-service --dns-nameserver DNS_RESOLVER --gateway SELFSERVICE_NETWORK_GATEWAY --subnet-range SELFSERVICE_NETWORK_CIDR selfservice

在本条命令中,将DNS_RESOLVER替换为DNS解析器的IP地址。 在大多数情况下,可以参考/etc/resolv.conf文件中的地址。将SELFSERVICE_NETWORK_GATEWAY替换为你想要在此网络上使用的网关地址。写出你想使用的子网使用的CIDR表示法地址替换掉SELFSERVICE_NETWORK_CIDR;
示例:

$ openstack subnet create --network selfservice  --dns-nameserver 8.8.4.4 --gateway 172.16.1.1 --subnet-range 172.16.1.0/24 selfservice

配置完成后,接下来创建一个路由。
创建路由首先需要切换到admin环境下:

$ . admin-openrc

添加router:external到Provider网络:

$ neutron net-update provider --router:external

切换至demo环境下操作:

$ . demo-openrc

创建一个路由:

$ openstack router create router

添加self-service网络作为路由接口:

$ neutron router-interface-add router selfservice

设置一个路由网关:

$ neutron router-gateway-set router provider

接下来进行验证操作。首先切换至admin环境:

$ . admin-openrc

查看网络命名空间,应该可以看到qrouter命名空间和qdhcp命名空间:

$ ip netns

查看router的端口列表:

$ neutron router-port-list router

可以使用ping命令测试是否可以连通:

$ ping -c 4 203.0.113.102

完成网络操作后,开始创建一个模板,此处以最小模板为例:

$ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

创建完成后,需要生成一个密钥对。
要生成密钥对,首先需要切换至demo环境下:

$ . demo-openrc

使用下面的命令生成密钥对:

$ ssh-keygen -q -N ""
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

查看密钥对是否生成成功:

$ openstack keypair list

密钥对生成成功后,需要添加安全组规则
首先添加允许ICMP协议到默认安全组:

$ openstack security group rule create --proto icmp default

并且允许SSH协议:

$ openstack security group rule create --proto tcp --dst-port 22 default

接下来就可以启动虚拟机了。启动虚拟机时仍然是两种网络的操作方法不同。
若使用第一种方法创建网络,首先加载demo环境:

$ . demo-openrc

查看刚刚创建的模板(flavor):

$ openstack flavor list

查看可用的镜像列表:

$ openstack image list

查看可用的网络:

$ openstack network list

查看安全组:

$ openstack security group list

若没有问题,可以开始创建虚拟机实例:
使用如下命令创建虚拟机实例:

$ openstack server create --flavor m1.nano --image cirros --nic net-id=PROVIDER_NET_ID --security-group default --key-name mykey provider-instance

将PROVIDER_NET_ID替换为Provider网络的ID。
执行成功后,检查虚拟机执行状态:

$ openstack server list

若虚拟机的Status为Active,则证明虚拟机已启动成功。
若需要获取虚拟机控制台的访问权限,可使用如下命令查看:

$ openstack console url show provider-instance

可分别使用ping命令检查网络是否可通:

$ ping -c 4 203.0.113.1
$ ping -c 4 openstack.org
$ ping -c 4 203.0.113.103

也可直接远程访问虚拟机实例:

$ ssh cirros@203.0.113.103

若使用第二种方法创建网络,首先加载demo环境:

$ . demo-openrc

查看刚刚创建的模板(flavor):

$ openstack flavor list

查看可用的镜像列表:

$ openstack image list

查看可用的网络:

$ openstack network list

查看安全组:

$ openstack security group list

若没有问题,可以开始创建虚拟机实例:
使用如下命令创建虚拟机实例:

$ openstack server create --flavor m1.nano --image cirrus --nic net-id=SELFSERVICE_NET_ID --security-group default --key-name mykey selfservice-instance

将SELFSERVICE_NET_ID替换为self-service网络的ID。
执行成功后,检查虚拟机执行状态:

$ openstack server list

若需要获取虚拟机控制台的访问权限,可使用如下命令查看:

$ openstack console url show selfservice-instance

可分别使用ping命令检查网络是否可通:

$ ping -c 4 172.16.1.1
$ ping -c 4 openstack.org

若要配置远程访问,首先需要在Provider虚拟网络创建一个浮动IP地址:

$ openstack floating ip create provider

配置该浮动IP地址给虚拟机实例:

$ openstack server add floating ip selfservice-instance 203.0.113.104

执行成功后,检查虚拟机执行状态:

$ openstack server list

使用ping命令检查网络是否连通:

$ ping -c 4 203.0.113.104

也可直接远程访问虚拟机实例:

$ ssh cirros@203.0.113.104

若要配置cinder创建一个volume,首先需要加载demo环境:

$ . demo-openrc

创建一个1GB的卷:

$ openstack volume create --size 1 volume1

完成之后,可使用如下命令检查卷是否可用:

$ openstack volume list

若卷处于可用状态,则可以将卷挂载至指定虚拟机:

$ openstack server add volume INSTANCE_NAME VOLUME_NAME

INSTANCE_NAME替换为虚拟机实例的名称,VOLUME_NAME为要为该虚拟机挂载的卷。
示例:

$ openstack server add volume provider-instance volume1

再次查看卷列表,可以看到虚拟机绑定信息:

$ openstack volume list

可远程连接至虚拟机,输入以下命令查看卷是否已挂载成功:

$ sudo fdisk -l

上面的操作为使用命令行方式进行配置,也可以使用OpenStack Dashboard进行配置。由于作者使用Horizon配置,所以此处命令行配置没有截图。
在进入Horizon后,创建一个虚拟机实例,点击Launch按钮,则有:
Launch-Instance
配置完成后,创建一个虚拟机,配置512MB内存,1个VCPU,如图所示:
OpenStack-Dashboard
点击Console切换到控制台,可以看到cirros虚拟机已成功运行。
OpenStack-Dashboard-VM-Run
至此,OpenStack Newton单节点配置完成。

OpenStack Newton 多节点配置文档

多节点配置为在单节点配置基础上增加节点进行配置。增加的节点包括计算节点、存储节点等。本文中多节点配置仅在单节点配置成功后,另外的节点上进行配置做说明。
计算节点配置:
首先安装nova-compute组件:

# sudo apt-get install nova-compute

编辑/etc/nova/nova.conf文件:
在[DEFAULT]区域,配置RabbitMQ消息队列,认证服务访问方法,vnc设置、glance设置、防火墙、neutron等配置:

[DEFAULT]
...
transport_url = rabbit://openstack:openstack@controller
...
auth_strategy = keystone
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack

[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

[glance]
...
api_servers = http://controller:9292

[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp

MANAGEMENT_INTERFACE_IP_ADDRESS可以替换为controller的IP地址,如59.69.0.158.
完成配置后,需要检查主机是否支持虚拟化技术,可使用如下命令检查:

$ egrep -c '(vmx|svm)' /proc/cpuinfo

若存在vmx或svm技术,则编辑文件/etc/nova/nova-compute.conf:

[libvirt]
...
virt_type = qemu

完成后重启nova服务:

# service nova-compute restart

至此。计算节点的nova服务配置完毕。
接下来配置计算节点上的neutron组件:
首先安装neutron组件:

# sudo apt-get install neutron-linuxbridge-agent

编辑文件/etc/neutron/neutron.conf:
在[DEFAULT]区域,配置RabbitMQ访问权限以及认证服务访问权限等:

[DEFAULT]
...
transport_url = rabbit://openstack:openstack@controller
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = openstack

接下来开始配置网络模块。网络部分的配置仍然分为两个部分。
首先按照第一种网络的配置方法(Provider Network),修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件:
在[linux_bridge]部分,添加provider的网卡名称:

[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

替换PROVIDER_INTERFACE_NAME为物理网卡接口的名称。
在[vxlan]部分,关闭VXLAN映射网络:

[vxlan]
enable_vxlan = False

在 [securitygroup]部分,启用安全组规则并配置Linux网桥防火墙驱动:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

至此,第一种方式的网络部分配置完成。
按照第二种方式(Self-service Network)配置网络,修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件:
在[linux_bridge]部分,添加provider的网卡名称:

[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

替换PROVIDER_INTERFACE_NAME为物理网卡接口的名称。
在[vxlan]部分,打开VXLAN映射网络:

[vxlan]
enable_vxlan = True
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = True

将OVERLAY_INTERFACE_IP_ADDRESS替换为处理覆盖网络的基础物理网络接口的IP地址。 此网络结构使用管理接口将流量隧道传送到其他节点。 因此,将OVERLAY_INTERFACE_IP_ADDRESS替换为计算节点的管理IP地址。
在 [securitygroup]部分,启用安全组规则并配置Linux网桥防火墙驱动:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

至此,第二种方式的网络部分配置完成。
网络部分配置完成后,需要配置计算服务使用网络。
编辑文件/etc/nova/nova.conf:
在[neutron]部分:

[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = openstack

重启计算节点服务以及网桥服务:

# sudo service nova-compute restart
# sudo service neutron-linuxbridge-agent restart

至此,计算节点的网络服务配置完毕。
接下来开始配置存储节点,存储节点需要使用LVM(逻辑卷管理)软件:
首先安装lvm软件包:

# sudo apt-get install lvm2

创建一个LVM物理卷:

# pvcreate /dev/sdb

创建LVM卷组cinder-volumes:

# vgcreate cinder-volumes /dev/sdb

只有虚拟机实例可以访问块存储卷。 然而,底层操作系统管理与卷相关联的设备。 默认情况下,LVM卷扫描工具扫描/dev目录中包含卷的块存储设备。 如果项目在其卷上使用LVM,则扫描工具会检测这些卷并尝试缓存这些卷,这可能会对底层操作系统和项目卷造成各种问题。 必须重新配置LVM才能仅扫描包含cinder-volume卷组的设备。 编辑/etc/lvm/lvm.conf文件并完成以下操作:
在devices部分中,添加一个接受/dev/sdb设备并拒绝所有其他设备的过滤器:

devices {
...
filter = [ "a/sdb/", "r/.*/"]

过滤器数组中的每个项目都以一个for开头,或者以reject开头,并包含设备名称的正则表达式。 阵列必须以r /.*/结尾以拒绝任何剩余的设备。 可以使用vgs -vvvv命令测试过滤器。
注意:如果存储节点在操作系统磁盘上使用LVM,则还必须将关联的设备添加到过滤器。 例如,如果/dev/sda设备包含操作系统:

filter = [ "a/sda/", "a/sdb/", "r/.*/"]

类似地,如果计算节点在操作系统磁盘上使用LVM,则还必须修改这些节点上的/etc/lvm/lvm.conf文件中的过滤器,以仅包括操作系统磁盘。 例如,如果/dev/sda设备包含操作系统:

filter = [ "a/sda/", "r/.*/"]

接下来开始安装cinder核心组件:

# sudo apt-get install cinder-volume

安装完成后,编辑/etc/cinder/cinder.conf文件:
在[database]区,配置数据库访问地址:

[database]
...
connection = mysql+pymysql://cinder:openstack@controller/CINDER

在[DEFAULT]区,配置RabbitMQ消息队列访问和验证方法并启用lvm,添加glance服务器地址:

[DEFAULT]
...
transport_url = rabbit://openstack:openstack@controller
...
auth_strategy = keystone
enabled_backends = lvm
glance_api_servers = http://controller:9292

在[keystone_authtoken]区配置keystone访问权限:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = cinder
password = openstack

接下来,在[DEFAULT]区域,配置my_ip选项控制节点使用管理接口IP地址:

[DEFAULT]
...
my_ip = 59.69.0.158

在 [lvm]部分,使用LVM驱动程序,cinder-volumes卷组,iSCSI协议和适当的iSCSI服务配置LVM后端:

[lvm]
… 
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = tgtadm

在[oslo_concurrency]部分,配置临时文件路径:

[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp

配置完成后,保存重新启动服务以及块存储服务:

# service tgt restart
# service cinder-volume restart

至此,存储节点配置完毕。
双节点配置文档中目前只包含计算节点和存储节点。ceilometer、manila、swift等服务的双节点配置文档本文中不再提供。详情可查询openstack官方网站。http://docs.openstack.org/newton/install-guide-ubuntu/additional-services.html