本文主要参考OpenStack官方文档
OpenStack Documentation for Mitaka : Installation Guide for Ubuntu 14.04 (LTS)
若只是想搭建OpenStack平台,可参考以下链接,通过脚本自动化部署
① OpenStack Training Labs : An Automated Way To Deploy OpenStack
② 深入理解OpenStack自动化部署
③ compass4nfv
git clone https://gerrit.opnfv.org/gerrit/compass4nfv
官方文档中OpenStack提供了两种网络模型架构
Provider Networks
OpenStack最简单的部署方式,主要利用二层网络服务
(Layer-2 Services)(通过网桥和交换机连接不同网络)和VLAN划分
,其本质上是将虚拟机网络
(Virtual Networks)通过桥接
到物理网络
(Physical Networks)并利用物理网络
设施提供三层网络服务
(Layer-3 Services);此外,通过DHCP
服务向虚拟网络实例提供IP地址。
注:该方式不支持私有自服务网络
(Private Self-Service Networks),如三层路由服务
(Layer-3 Routing Services)。
Self-Service Networks
该方式和Provider Networks
方式相比,通过诸如VXLAN
方式在自服务网络
中支持三层路由服务
。
本文采用Provider Networks网络模型设计
本文选择OpenStack Mitaka版本
Compute-Focused OpenStack Design
根据OpenStack官方文档,以计算服务为主的OpenStack私有云计算平台可选取以下组件:
For a compute-focused OpenStack design architecture, the following components may be present:
Identity (keystone)
Dashboard (horizon)
Compute (nova)
Object Storage (swift)
Image (glance)
Networking (neutron)
Orchestration (heat)
OpenStack服务组件选择:
注:本文选择MariaDB(MySQL的一个分支,完全兼容MySQL)开源数据库为OpenStack组件提供后端数据访问服务。
Service Name | Component Name | Brief Description |
---|---|---|
Identity Service | Keystone | 身份服务,提供单点集成方式管理身份认证、授权、服务目录服务 |
Image Service | Glance | 镜像服务 |
Compute Service | Nova | 计算服务 |
Networking Service | Neutron | 网络服务 |
Dashboard Service | Horizon | 仪表盘,访问OpenStack服务的图形化接口 |
Block Storage Service | Cinder | 块存储服务 |
Shared File Systems Service | Manila | 共享文件系统服务,用于文件存储 |
Object Storage Service | Swift | 对象存储服务,用于对象存储和检索 |
Orchestration Service | Heat | 编排服务,基于模板创建管理云资源 |
Telemetry Data Collection Service | Ceilometer | 计量服务 |
Telemetry Alarming Service | Aodh | 警报服务 |
Database Service | Trove | 数据库服务,用于云部署关系型和非关系性数据库引擎 |
Data Processing Service | Sahara | 数据处理服务,提供一个数据处理框架,如Hadoop、Spark、Storm |
OpenStack官方文档建议网络布局如下:
本文采用如下网络设计
总共3个子网:
① 互联网连接/对外出口(External)
② Openstack管理网络(Management)
③ VM虚拟机内网连接(Data)
注:此外,本文将Block Storage Node和Object Storage Node加入Management Network。
6台Ubuntu 16.04 LTS:
① Cotroller:用于整个集群的控制,高可靠性要求。承载数据库(MySQL)、队列服务器(RabbitMQ)、和最终的web入口(Apache+Memcache)。设置一块虚拟硬盘。要求网卡eth0接External Network,eth1接Management Network子网。
② Network:网络控制节点,高网络吞吐型节点。设置一块虚拟硬盘。要求3网卡,eth0接External Network,eth1接Management Network子网, eth2接Data Network子网。
③ Compute:计算节点,高内存+CPU+IO消耗型节点。设置一块虚拟硬盘。要求网卡eth0接External Network,eth1接Management Network子网,eth2接Data Network子网。
④ BlockStorage:块存储节点,提供块存储和共享文件系统服务。设置三块虚拟硬盘,一块安装操作系统,一块用于块存储服务,一块用于共享文件系统服务。要求网卡eth0接External Network,eth1接Management Network子网。
⑤ ObjectStorage:两个对象存储节点,提供对象存储服务。设置三块虚拟硬盘,一块安装操作系统,两块用于对象存储服务。要求网卡eth0接External Network,eth1接Management Network子网。
注:上述为了方便管理,对每个节点都添加了eth0
网络接口,实际生产环境请根据实际情况配置。
服务器配置:
Node | CPU | 内存 | 存储 |
---|---|---|---|
Controller | 4核 | 16GB | 100GB |
Network | 2核 | 8GB | 100GB |
Compute | 16核 | 64GB | 300GB |
BlockStorage | 2核 | 8GB | 100GB+100GB+100GB |
ObjectStorage1 | 2核 | 8GB | 100GB+100GB+100GB |
ObjectStorage2 | 2核 | 8GB | 100GB+100GB+100GB |
注:此处资源分配超出了实际物理资源,可根据实际分配资源。
网络配置:
Node | eth0 | eth1 | eth2 |
---|---|---|---|
External Network | Management Network | Data Network | |
Controller | 192.168.1.11 | 10.0.0.11 | |
Network | 192.168.1.21 | 10.0.0.21 | 10.0.1.21 |
Compute | 192.168.1.31 | 10.0.0.31 | 10.0.1.31 |
BlockStorage | 192.168.1.41 | 10.0.0.41 | |
ObjectStorage1 | 192.168.1.51 | 10.0.0.51 | |
ObjectStorage2 | 192.168.1.52 | 10.0.0.52 | |
Subnet Mask | 255.255.255.0 | 255.255.255.0 | 255.255.255.0 |
Gateway | 192.168.1.1 | 10.0.0.1 | 10.0.1.1 |
注:由于实际网络限制, External Network通过虚拟网卡192.168.1.1
共享主机网络来访问外网
物理主机端口映射信息:
物理机端口 | 虚拟机IP | 虚拟机端口 | 服务描述 |
---|---|---|---|
11122 | 192.168.1.11 | 22 | Controller SSH 服务 |
12122 | 192.168.1.21 | 22 | Network SSH 服务 |
13122 | 192.168.1.31 | 22 | Compute SSH 服务 |
14122 | 192.168.1.41 | 22 | BlockStorage SSH 服务 |
15122 | 192.168.1.51 | 22 | ObjectStorage1 SSH 服务 |
15222 | 192.168.1.52 | 22 | ObjectStorage2 SSH 服务 |
11180 | 192.168.1.11 | 80 | OpenStack Dashboard 服务 |
6080 | 192.168.1.11 | 6080 | OpenStack Compute Service of Nova Proxy |
注:将虚拟机SSH端口映射到物理主机特定端口,以便外网通过物理主机访问虚拟机。
物理主机端口:为方便管理,针对SSH服务,将物理主机映射端口设计如下,前三位表示对应虚拟机地址末两字节,最后两位表示对应虚拟机端口。
OpenStack服务密码要求:
根据OpenStack官方文档
节点组件信息:
Node | OpenStack Service |
---|---|
Controller | mariadb-server、mongodb-server、rabbitmq-server、memcached、keystone、apache2、glance、nova-api、nova-conductor、nova-consoleauth、nova-novncproxy、nova-scheduler、neutron-server、neutron-plugin-ml2、horizon(dashboard)、cinder-api cinder-scheduler、manila-api、manila-scheduler、python-manilaclient、swift、swift-proxy、python-swiftclient、heat-api、heat-api-cfn、heat-engine、ceilometer-api、ceilometer-collector、ceilometer-agent-central、ceilometer-agent-notification、python-ceilometerclient、python-ceilometermiddleware、aodh-api、aodh-evaluator、aodh-notifier、aodh-listener、aodh-expirer、python-trove、python-troveclient、python-glanceclient、trove-common、trove-api、trove-taskmanager、trove-conductor、sahara-api、sahara-engine、sahara-templates、sahara-wsgi-api |
Network | neutron-linuxbridge-agent、neutron-l3-agent、neutron-dhcp-agent、neutron-metadata-agent |
Compute | nova-compute、neutron-linuxbridge-agent、kvm、ceilometer-agent-compute |
BlockStorage | lvm2、cinder-volume、manila-share、neutron-plugin-linuxbridge-agent |
ObjectStorage | xfsprogs、rsync、swift、swift-account、swift-container、swift-object |
各节点功能可参考下图
注:仅供参考理解,具体根据实际情况而定
系统信息
注:可用命令uname -srpio
和lsb_release -drc
查看
Linux 4.4.0-33-generic x86_64 x86_64 GNU/Linux
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
组件版本
注:可用如下命令查看
sudo apt-get install apt-show-versions
apt-show-versions | grep -e mariadb -e mongodb -e rabbitmq -e memcached
apt-show-versions | grep -e keystone -e glance -e nova -e neutron -e horizon -e cinder -e manila -e swift -e heat -e ceilometer -e aodh -e trove -e sahara
官方版本查看:http://releases.openstack.org/mitaka/index.html
组件 | 版本 |
---|---|
mariadb | 10.0.25 |
mongodb | 2.6.10 |
rabbitmq | 3.5.7 |
memcached | 1.4.25 |
keystone | 9.0.2 |
glance | 12.0.0 |
nova | 13.1.0 |
neutron | 8.1.2 |
horizon | 9.0.1 |
cinder | 8.0.0 |
manila | 2.0.0 |
swift | 2.7.0 |
heat | 6.0.0 |
ceilometer | 6.0.0 |
aodh | 2.0.1 |
trove | 5.0.1 |
sahara | 4.0.0 |
注:
① 请提前设计好所需密码并登记存档,并及时登记用到的服务地址&端口信息。
② 根据实际情况,将下面Password
列替换为实际密码。
(若为测试环境,建议密码采用一定规则,方便记忆,但数据库等服务密码不要包含一些特殊字符,如:
、/
、+
、@
)
OpenStack节点主机用户&密码:
Node | Hostname | User | Password |
---|---|---|---|
Controller | controller | controller | your_password |
Controller | controller | root | your_password |
Network | network | network | your_password |
Network | network | root | your_password |
Compute | compute | compute | your_password |
Compute | compute | root | your_password |
BlockStorage | blockstorage | blockstorage | your_password |
BlockStorage | blockstorage | root | your_password |
ObjectStorage1 | objectstorage1 | objectstorage | your_password |
ObjectStorage1 | objectstorage1 | root | your_password |
ObjectStorage2 | objectstorage2 | objectstorage | your_password |
ObjectStorage2 | objectstorage2 | root | your_password |
OpenStack服务用户&密码:
Name | User | Password |
---|---|---|
Database_PASS(MariaDB/MySQL) | root | your_password |
RABBIT_PASS | openstack | your_password |
KEYSTONE_DBPASS | keystone | your_password |
ADMIN_PASS | admin | your_password |
DEMO_PASS | demo | your_password |
GLANCE_DBPASS | glance | your_password |
GLANCE_PASS | glance | your_password |
NOVA_DBPASS | nova | your_password |
NOVA_PASS | nova | your_password |
NEUTRON_DBPASS | nuetron | your_password |
NEUTRON_PASS | nuetron | your_password |
METADATA_SECRET | your_password | |
CINDER_DBPASS | cinder | your_password |
CINDER_PASS | cinder | your_password |
MANILA_DBPASS | manila | your_password |
MANILA_PASS | manila | your_password |
SWIFT_PASS | swift | your_password |
HASH_PATH_PREFIX | your_password | |
HASH_PATH_SUFFIX | your_password | |
HEAT_DBPASS | heat | your_password |
HEAT_PASS | heat | your_password |
HEAT_DOMAIN_PASS | heat_domain_admin | your_password |
CEILOMETER_DBPASS | ceilometer | your_password |
CEILOMETER_PASS | ceilometer | your_password |
AODH_DBPASS | aodh | your_password |
AODH_PASS | aodh | your_password |
TROVE_DBPASS | trove | your_password |
TROVE_PASS | trove | your_password |
SAHARA_DBPASS | sahara | your_password |
SAHARA_PASS | sahara | your_password |
OpenStack各节点服务地址&端口
参考:Firewalls and default ports
注:可执行sudo netstat -tnlp
查看
节点 | IP地址 | 端口 | 服务描述 |
---|---|---|---|
Controller | 192.168.1.11 | 22 | SSH |
Controller | 10.0.0.11 | 3306 | MariaDB(MySQL) |
Controller | 10.0.0.11 | 27017 | MongoDB |
Controller | 10.0.0.11 | 5672、25672 | RabbitMQ |
Controller | 10.0.0.11 | 4369 | Erlang端口映射守护进程(Erlang Port Mapper Daemon) |
Controller | 10.0.0.11 | 11211 | Memcached |
Controller | 10.0.0.11 | 35357 | OpenStack Identity Service of Apache HTTP Server(Admin) |
Controller | 10.0.0.11 | 5000 | OpenStack Identity Service of Apache HTTP Server(User) |
Controller | 10.0.0.11 | 9191 | OpenStack Image Service of Glance Registry |
Controller | 10.0.0.11 | 9292 | OpenStack Image Service of Glance API |
Controller | 10.0.0.11 | 8774、8775 | OpenStack Compute Service of Nova API |
Controller | 10.0.0.11 | 6080 | OpenStack Compute Service of Nova Proxy |
Controller | 10.0.0.11 | 9696 | OpenStack Networking Service of Neutron Server |
Controller | 10.0.0.11 | 80 | OpenStack Dashboard Service of Apache HTTP Server |
Controller | 10.0.0.11 | 8776 | OpenStack Block Storage Service of Cinder API |
Controller | 10.0.0.11 | 8786 | OpenStack Shared File Systems Service of Manila API |
Controller | 10.0.0.11 | 8080 | OpenStack Object Storage Service of Swift Proxy |
Controller | 10.0.0.11 | 8000 | OpenStack Orchestration Service of Heat API (CloudFormation) |
Controller | 10.0.0.11 | 8004 | OpenStack Orchestration Service of Heat API |
Controller | 10.0.0.11 | 8777 | OpenStack Telemetry Alarming Service of Ceilometer API |
Controller | 10.0.0.11 | 8042 | OpenStack Telemetry Alarming Service of Aodh API |
Controller | 10.0.0.11 | 8779 | OpenStack Database Service of Trove API |
Controller | 10.0.0.11 | 8386 | OpenStack Data Processing Service of Sahara API |
Network | 192.168.1.21 | 22 | SSH |
Compute | 192.168.1.31 | 22 | SSH |
Compute | 192.168.122.1 | 53 | Libvirt Dnsmasq |
BlockStorage | 192.168.1.41 | 22 | SSH |
BlockStorage | 10.0.0.41 | 3260 | OpenStack Block Storage Service of Tgtd(iSCSI target后台服务) |
ObjectStorage | 192.168.1.51/52 | 22 | SSH |
ObjectStorage | 10.0.0.51/52 | 873 | OpenStack Object Storage Service of Remote Sync |
ObjectStorage | 10.0.0.51/52 | 6000 | OpenStack Object Storage Service of Object |
ObjectStorage | 10.0.0.51/52 | 6001 | OpenStack Object Storage Service of Container |
ObjectStorage | 10.0.0.51/52 | 6002 | OpenStack Object Storage Service of Account |
物理机基本配置
① 开启物理主机虚拟化功能
② 在物理主机上安装VMware Workstation 12.1 Pro
VMware虚拟机配置
① 配置虚拟机网络
虚拟机网络连接方式图解:
打开VMware Workstation虚拟网络编辑器,添加如下虚拟网卡:
其中VMnet0用于配置External Network,VMnet1用于配置Management Network子网, VMnet2用于配置Data Network子网。如下图:
② 创建虚拟机,按前面要求设置CPU、内存大小,并新建网络适配器同时指定网络连接方式,各节点对应名称如下表:
Node | VMnet0 | VMnet1 | VMnet2 |
---|---|---|---|
Controller | 网络适配器 | 网络适配器2 | |
Network | 网络适配器 | 网络适配器2 | 网络适配器3 |
Compute | 网络适配器 | 网络适配器2 | 网络适配器3 |
BlockStorage | 网络适配器 | 网络适配器2 | |
ObjectStorage1 | 网络适配器 | 网络适配器2 | |
ObjectStorage2 | 网络适配器 | 网络适配器2 |
注:虚拟机中添加网络适配器的顺序跟系统内默认网卡名eth0
、eth1
、eth2
对应。
③ 开启虚拟机CPU虚拟化功能
对于每个虚拟机,虚拟机设置-->处理器设置-->虚拟化引擎,选择Intel VT-x/EPT或AMD-V/RVI
,如下图:
④ 各节点虚拟机配置如下图:
Controller节点:
Network节点:
Compute节点:
BlockStorage节点:
ObjectStorage1节点:
ObjectStorage2节点:
在VMware中创建虚拟机,安装Ubuntu 16.04 LTS
Partition disks
配置步骤: /dev/sda1
,大小200MB
,用于挂载/boot
Ext4
-->设置挂载点/boot
-->设置分区。 /
和swap
vg_system
-->按空格键选中剩余空闲空间/dev/sda
-->将修改写入磁盘并配置LVM-->新建逻辑卷-->选择卷组vg_system
-->逻辑卷名:lv_root-->设置逻辑卷大小:91GB-->新建逻辑卷-->选择卷组vg_system
-->逻辑卷名:lv_swap
-->设置逻辑卷大小为剩余空间-->完成。 启用root用户,设置root密码
sudo passwd root
为普通用户添加sudo权限
只需修改/etc/sudoers
文件:
切换到root用户,输入命令su -
,输入root用户密码。
输入命令vi /etc/sudoers
编辑/etc/sudoers
文件,在下面内容下添加一行your_username ALL=(ALL:ALL) ALL
,输入w!
强制保存,退出vi。
# User privilege specification
root ALL=(ALL:ALL) ALL
# controller
controller ALL=(ALL:ALL) ALL
注:如没有修改权限,则为/etc/sudoers
文件添加写权限chmod u+w /etc/sudoers
,修改后撤销权限chmod u-w /etc/sudoers
。
修改网卡命名方式
输入ifconfig -a
查看,发现网卡名称由udev管理命名为ens33
和ens38
,为了方便,将网卡名称修改为上述表格所示eth0
、eth1
、eth2
。
① sudo vi /etc/default/grub
把/etc/default/grub中
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
改成:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
② 重新生成grub文件
sudo update-grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
③ 重启系统,发现网卡名称已经改回eth0
、eth1
、eth2
命名格式。
注:以上步骤在Controller节点、Compute节点、Network节点配置方法相同
修改各节点网卡和VMware虚拟网卡绑定关系
可选环节:若网卡和虚拟网卡绑定关系不同,可手动指定
按照前面表格所示,修改各节点网卡名称为对应的eth0
、eth1
、eth2
以Controller节点为例
将默认网卡名eth0
和eth1
修改为eth0
和eth2
sudo vi /etc/udev/rules.d/70-persistent-net.rules
//如无该文件,新建一个即可
添加如下内容,其中00:0c:29:a9:66:8c
和00:0c:29:a9:66:96
为网卡MAC,可执行ifconfig -a
查看,根据情况自行设定:
# eth0
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:0c:29:a9:66:8c", NAME="eth0"
# eth2
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:0c:29:a9:66:96", NAME="eth2"
保存并重启电脑sudo reboot
。
注:配置完成后,不能在虚拟机设置-->网络适配器-->高级
中点击生成MAC,否则上面MAC地址需要修改配置。
注:Compute节点、Network节点配置方法类似
设置静态IP/DNS
以Controller节点为例
① 修改文件sudo vi /etc/network/interfaces
,将默认生成的(下面内容可能没有,可能不一样,配置时视自己情况而定):
auto ens33
iface ens33 inet dhcp
改为:
#eth0 config (connect to internet)
auto eth0
iface eth0 inet static
address 192.168.1.11 #IP地址
netmask 255.255.255.0 #子网掩码
gateway 192.168.1.1 #网关
dns-nameserver 192.168.1.1 #DNS
# eth1 config (connect to openstack management network)
auto eth1
iface eth1 inet static
address 10.0.0.11 #IP地址
netmask 255.255.255.0 #子网掩码
② 重启网卡,使配置生效:
sudo /etc/init.d/networking restart
sudo service networking restart
注:若找不到上述命令或重启无效可尝试下面命令:
sudo ifdown eth0
sudo ifdown eth1
sudo ifup eth0
sudo ifup eth1
注:若提示ifdown: interface eth0 not configured
,可换下面命令尝试:
sudo ifconfig eth0 down
sudo ifconfig eth1 down
sudo ifconfig eth0 up
sudo ifconfig eth1 up
③ 运行ifconfig -a
查看网络配置信息。
④ 通过ping www.baidu.com
测试能否正常访问外网。若不能,可sudo reboot
重启节点试试。
注:Compute节点、Network节点配置方法类似
在物理主机中为各节点SSH连接配置端口映射
可参考:windows下实现端口映射
以Controller节点为例
① 利用Windows自带的netsh
配置端口映射,打开cmd
命令行,输入:
注:下面xxx.xxx.xxx.xxx
为物理主机实际IP
//配置端口映射
netsh interface portproxy add v4tov4 listenaddress=xxx.xxx.xxx.xxx listenport=11122 connectaddress=192.168.1.11 connectport=22
//或者
netsh interface portproxy add v4tov4 listenport=11122 connectaddress=192.168.1.11 connectport=22
//查看已配置的端口映射
netsh interface portproxy show v4tov4 // all
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
xxx.xxx.xxx.xxx 11122 192.168.1.11 22
* 11122 192.168.1.11 22
//删除端口映射
netsh interface portproxy delete v4tov4 listenaddress=xxx.xxx.xxx.xxx listenport=11122
netsh interface portproxy delete v4tov4 listenport=11122
② 在系统防火墙高级设置中配置入站规则
新建规则-->端口-->特定本地端口:11122-->允许连接-->选择域/专用/公用-->名称:VMware OpenStack Controller SSH、描述:用于VMware中OpenStack云计算平台Controller节点SSH连接
③ 配置完成后,可在外网主机,通过Xshell连接Controller节点,如下图:
注:若XShell连接失败,提示Xshell no matching outgoing encryption
,可升级Xshell版本,在链接的属性(SSH-->安全性)的加密算法列表中选择aes256-ctr,mac加密列表中选择hmac-sha2-256,保存即可。
注:其他节点配置方法类似
配置hosts文件
以Controller节点为例
OpenStack要求所有的节点主机之间都是通过host互信的,编辑所有节点主机的/etc/hosts文件,注意将YOUR_HOST_NAME替换成本节点主机名称。配置完成后在每台主机上ping通3个主机名。此外,通过配置hosts文件,可在网络环境发生变化时提供可扩展性且便于迁移。
可参考:OpenStack Doc : Controller hosts文件配置
① 执行sudo vi /etc/hosts
,添加如下内容
# config all nodes
10.0.0.11 controller
10.0.0.21 network
10.0.0.31 compute
10.0.0.41 blockstorage
10.0.0.51 objectstorage1
10.0.0.52 objectstorage2
② 注释掉除127.0.0.1
之外的环回地址项,如下:
#127.0.1.1 controller`
注:其他节点配置方法类似
至此,节点网络配置完成:
① Controller、Network、Compute等节点可互相ping通;
② Controller、Network、Compute等节点均可访问外网和进行地址解析。
配置ubuntu的更新源
使用阿里云的更新源,修改配置文件sudo vi /etc/apt/sources.list
,添加:
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
更新系统
① 更新系统
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove
可能遇到的问题:
Ubuntu系统/boot容量不足引起的无法更新系统
解决方法:
查看/boot
分区容量df -h /boot
;查看当前使用内核版本号uname -a
;删除旧内核,输入sudo apt-get remove linux-image-
,接着按两下tab键,将显示所有的内核版本,把目前使用的版本之前的版本全部删除。最后执行
sudo update-grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
② 查看系统发行版本和内核版本
network@network:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04 LTS
Release: 16.04
Codename: xenial
network@network:~$ uname -srpi
Linux 4.4.0-23-generic x86_64 x86_64
服务器时区设置
① 执行sudo tzselect
-->选择亚洲(Asia)-->选择中国(China)-->选择北京(Beijing)-->
② 复制文件到/etc目录下:
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注:若在系统安装时已设置正确时区,可跳过该步骤。
统一时间源,安装NTP服务
时间服务器将为所有节点提供支持,OpenStack所有组件的时间都必须同步。本文选择安装chrony
。
Controller节点
① 安装NTP服务:sudo apt-get install chrony
② 打开文件sudo vi /etc/chrony/chrony.conf
增加以下内容,使本服务器时间与外部服务器时间同步。如果不能访问外网,NTP服务器将使用本机硬件时钟作为第二选择。
allow 10.0.0.0/24
server cn.pool.ntp.org iburst
server 127.127.1.0 iburst
③ 重启NTP使配置生效:sudo service chrony restart
注:确保网络时间服务器IP地址可以被DNS解析,如果不能,则在/etc/hosts文件中手工加入。
其他节点
① 安装NTP服务:sudo apt-get install chrony
② 打开配置文件sudo vi /etc/chrony/chrony.conf
,删除全部默认设置,只添加如下内容:
server controller iburst
③ 重启NTP服务:sudo service chrony restart
验证配置是否成功
chronyc sources -v
注:若默认配置文件误删,可执行sudo apt-get --purge remove chrony
清除式卸载chrony,再重新安装。
配置OpenStack
安装OpenStack client:
sudo apt-get install software-properties-common
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install python-openstackclient
安装SQL数据库(MySQL/MariaDB)
Controller Node
① 安装MariaDB
sudo apt-get install mariadb-server python-mysqldb
② 为MySQL的root用户设置密码Database_PASS
。(将Database_PASS
替换为前面设计的实际密码),若无输入密码提示,可执行下面命令设置root用户密码:
sudo mysqladmin -u root password Database_PASS
注:修改mysql用户密码可用以下命令
mysqladmin -u用户名 -p旧密码 password 新密码
③ 创建文件sudo vi /etc/mysql/mariadb.conf.d/openstack.cnf
,添加如下配置信息:
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
character-set-server = utf8
其中,bind-address用于绑定MySQL服务监听地址到Controller节点的Management Network网口IP,以便Compute&Network节点访问MySQL中的OpenStack配置信息。
④ 重启MySQL数据库:
sudo service mysql restart
sudo service mysql status
⑤ 查看端口监听情况。
controller@controller:~$ netstat -ntlp | grep 3306
tcp 0 0 10.0.0.11:3306 0.0.0.0:* LISTEN -
⑥ 开启MySQL安全保护措施
注:测试环境对安全要求较低可忽略该步骤
sudo mysql_secure_installation
根据提示输入当前root用户密码,根据实际需要选择后续操作。
⑦ 测试root
用户能否在本机localhost
正常登录,执行以下命令:
mysql -uroot -p
mysql -h localhost -uroot -p
若报错:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
解决方法:
sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
注:下面步骤可省略。
⑧ 测试root
用户是否具有远程登录的权限
通常,不赋予root
用户远程登录的权限,即只允许root
用户在本机localhost
上登录。可执行如下命令测试:
mysql -h controller -uroot -p
mysql -h 10.0.0.11 -uroot -p
若报错,表示当前root
用户没有远程登录权限:
ERROR 1130 (HY000): Host 'controller' is not allowed to connect to this MariaDB server
若需要赋予root
远程登录权限,可执行以下命令:
注:将Database_PASS
替换为前面设计的实际密码
mysql -uroot -p
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Database_PASS';
FLUSH PRIVILEGES;
若不报错,可正常登录,表示当前root
用户具有远程登录权限。
安装NoSQL数据库(MongoDB)
注:只有计量服务(Telemetry Service)用到
Controller Node
① 安装MongoDB
sudo apt-get install mongodb-server mongodb-clients python-pymongo
② 打开文件sudo vi /etc/mongodb.conf
,修改配置信息:
绑定MongoDB服务监听地址到Controller节点的Management Network网口IP。
bind_ip = 10.0.0.11
MongoDB数据库默认在目录/var/lib/mongodb/journal
下创建若干1GB大小的日志文件,通过添加如下配置信息,可将每个日志文件大小限制为128 MB,总的日志文件空间大小为512MB。
# Set Journal File Size
smallfiles = true
③ 删除初始日志文件,重启MongoDB服务:
sudo service mongodb stop
sudo rm /var/lib/mongodb/journal/prealloc.*
sudo service mongodb start
安装消息队列服务(RabbitMQ)
Controller Node
① 安装RabbitMQ
sudo apt-get install rabbitmq-server
② 为OpenStack添加用户openstack
sudo rabbitmqctl add_user openstack RABBIT_PASS
注:将RABBIT_PASS
替换为前面设计的实际密码
③ 为openstack
用户配置读、写访问权限:
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
安装Memcached
身份服务(Identity Service)认证机制需要使用Memcached缓存令牌(Token)
Controller Node
① 安装Memcached
sudo apt-get install memcached python-memcache
② 修改配置文件sudo vi /etc/memcached.conf
,设置Memcached服务监听地址(Controller节点的Management Network网口IP)。
-l 10.0.0.11
③ 重启Memcached服务
sudo service memcached restart
注:配置完上面几步后,再Controller
节点上执行netstat -ntlp
,查看上面几种服务端口监听是否正常。
Identity服务采用RESTful设计,使用REST API提供Web服务接口。
注:常见的Web Service
方式有SOAP
、WSDL
、REST
。
部署节点:Controller Node
在MariaDB(MySQL)中创建Keystone数据库
① 以root用户登录MySQL
mysql -u root -p
② 创建数据库keystone
CREATE DATABASE keystone;
③ 授予数据库keystone
适当的权限
注:将KEYSTONE_DBPASS
替换为前面设计的实际密码。
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
注:上述授权命令中,%
则代表了所有的host都能远程访问该mysql。但MySQL官方文档指出,%
并不包括localhost
。因此需要对localhost
和%
都进行授权。
④ 测试keystone
用户能否正常登录
mysql -hlocalhost -ukeystone -p
mysql -hcontroller -ukeystone -p
⑤ 测试Controller节点上的MariaDB能否被Compute&Network节点访问。可用telnet
测试,分别在Compute节点和Network节点上执行以下命令:
telnet controller 3306
生成临时管理身份认证令牌(ADMIN_TOKEN)
生成一个随机值,作为keystone初始配置时的ADMIN_TOKEN
openssl rand -hex 10
记住ADMIN_TOKEN:d57ea40f3a5eedcc70ef
安装Keystone和Apache HTTP Server with mod_wsgi
本文采用Apache HTTP server with mod_wsgi
监听端口5000
和35357
提供身份服务。默认keystone
服务已经监听端口5000
和35357
,为避免冲突,需首先关闭keystone
服务。
① 关闭keystone
服务
新建文件sudo vi /etc/init/keystone.override
,添加内容:manual
。
② 安装keystone
和Apache HTTP server
sudo apt-get install keystone apache2 libapache2-mod-wsgi
③ 修改配置文件sudo vi /etc/keystone/keystone.conf
在[DEFAULT]
处,修改管理令牌admin_token
为前面生成的ADMIN_TOKEN
值。
注:修改ADMIN_TOKEN
为实际Token值:d57ea40f3a5eedcc70ef
admin_token = ADMIN_TOKEN
在[database]
处,配置数据库访问连接。
注:将KEYSTONE_DBPASS
替换为前面设计的实际密码。
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
在[token]
处,配置Fernet令牌提供者。
provider = fernet
④ 将配置信息写入到身份服务数据库keystone
:
su root
su -s /bin/sh -c "keystone-manage db_sync" keystone
⑤ 初始化Fernet keys:
sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
配置Apache HTTP Server
① 修改配置文件sudo vi /etc/apache2/apache2.conf
,将服务器名称ServerName指向Controller节点的hostname,添加如下信息:
ServerName controller
② 新建文件sudo vi /etc/apache2/sites-available/wsgi-keystone.conf
,添加Apache HTTP Server配置信息,如下:
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
<Directory /usr/bin>
Require all granted
Directory>
VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
<Directory /usr/bin>
Require all granted
Directory>
VirtualHost>
③ 启用身份服务虚拟主机
sudo ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled
④ 重启Apache HTTP Server
sudo service apache2 restart
测试是否Apache HTTP Server是否正常:
在各节点(Controller、Compute、Network)上,执行telnet命令,看能否建立连接
telnet controller 35357
telnet controller 5000
⑤ 删除keystone配置信息默认数据库,Ubuntu安装包安装keystone时默认配置采用SQLite数据库存放,但本文改用MySQL数据库存储keystone配置信息,因此可删除默认SQLite数据库。
sudo rm -f /var/lib/keystone/keystone.db
创建服务实体(Service Entity)和API路径(API Endpoints)
身份服务数据库keystone
默认是空的,必须使用之前配置时生成的临时认证令牌ADMIN_TOKEN
来初始化用于身份服务的服务实体和API路径。
① 向openstack
命令传递认证令牌值和身份服务URL
有两种方式:通过openstack命令行参数--os-token
和--os-url
;或者通过设置环境变量OS_TOKEN
和OS_URL
。建议采用设置环境变量的方式,如下:
注:修改ADMIN_TOKEN
为前面生成的实际Token值:d57ea40f3a5eedcc70ef
export OS_TOKEN=ADMIN_TOKEN
export OS_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
② 创建服务实体
身份服务管理着一个OpenStack的服务目录,通过服务目录确定其他服务是否可用。创建服务实体命令如下:
openstack service create --name keystone --description "OpenStack Identity" identity
③ 创建API路径
OpenStack每个服务可使用三种API路径变体:admin
,internal
和public
。默认情况,admin
类型的API路径可修改用户(user)和租户(tenant),而internal
和public
类型的API路径不允许该操作。创建API路径命令如下:
openstack endpoint create --region RegionOne identity public http://controller:5000/v3
openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
创建域(Domain)、计划(Project)、用户(User)、角色(Role)
① 创建默认域
openstack domain create --description "Default Domain" default
② 创建管理计划、管理用户、管理角色
admin project
、admin user
、admin role
注:添加admin
用户时需设置密码ADMIN_PASS
为前面设计的实际密码。
openstack project create --domain default --description "Admin Project" admin
openstack user create --domain default --password-prompt admin
openstack role create admin
注:创建的任何角色都必须映射到OpenStack配置文件policy.json
指定的角色。
将admin
角色授予admin
计划和admin
用户:
openstack role add --project admin --user admin admin
③ 创建服务计划
本文创建的服务计划每个服务仅包含一个唯一用户,可根据实际情况调整。
openstack project create --domain default --description "Service Project" service
④ 创建示例计划、示例用户、普通用户角色
常规任务(非管理任务)应该使用非特权计划和用户。
注:添加demo
用户时需设置密码DEMO_PASS
为前面设计的实际密码。
openstack project create --domain default --description "Demo Project" demo
openstack user create --domain default --password-prompt demo
openstack role create user
将普通用户角色授予示例计划和示例用户:
openstack role add --project demo --user demo user
注:可重复执行上面步骤,创建其他需要的计划和用户。
验证Keystone组件配置是否正确
① 处于安全考虑,禁用临时身份认证令牌机制。
修改文件sudo vi /etc/keystone/keystone-paste.ini
,从[pipeline:public_api]
、[pipeline:admin_api]
,[pipeline:api_v3]
处移除admin_token_auth
配置信息。
② 取消环境变量OS_TOKEN
和OS_URL
unset OS_TOKEN OS_URL
③ 为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
输入admin
用户密码ADMIN_PASS
。(将ADMIN_PASS
替换为前面设计的实际密码)
若报错:
'NoneType' object has no attribute 'service_catalog'
可执行:export OS_AUTH_TYPE=password
可能还会报错:
__init__() got an unexpected keyword argument 'token'
在执行下面创建环境脚本后重新测试发现已解决,猜测是环境变量OS_TOKEN OS_URL
未取消,可再次执行unset OS_TOKEN OS_URL
试试。
③ 为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
输入demo
用户密码DEMO_PASS
。(将DEMO_PASS
替换为前面设计的实际密码)
注:上述设置OpenStack命令行参数的方式比较繁琐,可采用预先创建用户脚本的方式,在申请身份认证令牌时,只需执行如下命令:
source ~/.openstack/.admin-openrc
openstack token issue
或者
source ~/.openstack/.demo-openrc
openstack token issue
注:创建OpenStack客户端环境脚本方法如下
cd ~
mkdir ~/.openstack
为管理用户admin
创建OpenStack客户端环境脚本,vi ~/.openstack/.admin-openrc
,添加
注:将下面ADMIN_PASS
替换为前面设计的实际密码
# Add environment variables for admin
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_AUTH_TYPE=password
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
为示例用户demo
创建OpenStack客户端环境脚本,vi ~/.openstack/.demo-openrc
,添加
注:将下面DEMO_PASS
替换为前面设计的实际密码
# Add environment variables for demo
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_AUTH_TYPE=password
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
最后,测试Identity服务是否正常,访问http://192.168.1.11:35357/v3
或http://192.168.1.11:5000/v3
。可在各节点上安装curl
,访问服务API路径,下载查看信息,如下:
sudo apt-get install curl
curl http://192.168.1.11:35357/v3
curl http://192.168.1.11:5000/v3
curl http://controller:35357/v3
curl http://controller:5000/v3
得到如下信息:
{"version": {"status": "stable", "updated": "2016-04-04T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id": "v3.6", "links": [{"href": "http://192.168.10.3:35357/v3/", "rel": "self"}]}}
用户可使用OpenStack镜像服务提供的REST API
查询、注册、恢复虚拟机镜像。
部署节点:Controller Node
在MariaDB中创建glance数据库
① 以root
用户登录MySQL
mysql -u root -p
② 创建glance
数据库
CREATE DATABASE glance;
③ 授予glance
数据库适当权限
注:将GLANCE_DBPASS
替换为前面设计的实际密码
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
创建Glance服务实体和API路径
① 设置OpenStack中admin
用户环境变量
source ~/.openstack/.admin-openrc
② 在OpenStack中创建一个glance用户
openstack user create --domain default --password-prompt glance
输入用户glance
的密码GLANCE_PASS
(将GLANCE_PASS
替换为前面设计的实际密码)。
③ 将admin
角色授予glance
用户和service
计划
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
安装和配置Glance服务组件
① 安装Glance
sudo apt-get install glance
② 修改配置文件sudo vi /etc/glance/glance-api.conf
。
注:将GLANCE_DBPASS
和GLANCE_PASS
替换为前面设计的实际密码。
在[database]
处,配置数据库访问连接。
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
在[keystone_authtoken]
和[paste_deploy]
处,配置身份服务访问。
注:注释掉[keystone_authtoken]
处所有默认内容
[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 = GLANCE_PASS
[paste_deploy]
flavor = keystone
在`[glance_store]处配置本地文件系统存储和镜像文件存储位置。
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
③ 修改配置文件sudo vi /etc/glance/glance-registry.conf
。
注:将GLANCE_DBPASS
和GLANCE_PASS
替换为前面设计的实际密码。
在[database]
处,配置数据库访问连接。
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
在[keystone_authtoken]
和[paste_deploy]
处,配置身份服务访问。
注:注释掉[keystone_authtoken]
处所有默认内容
[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 = GLANCE_PASS
[paste_deploy]
flavor = keystone
④ 将配置信息写入glance数据库
su root
su -s /bin/sh -c "glance-manage db_sync" glance
⑥ 重启Image Service
sudo service glance-registry restart
sudo service glance-api restart
验证Glance服务组件配置是否正确
① 设置OpenStack admin
用户环境变量
source ~/.openstack/.admin-openrc
② 下载CirrOS系统镜像
注:此处采用CirrOS
镜像测试,也可自行选择其他系统镜像
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
③ 上传镜像,设置镜像参数磁盘格式QEMU Copy On Write 2 (QCOW2)
、容器格式bare
及可见性public
。
openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public
④ 确认上传是否成功,验证镜像属性。
controller@controller:~$ openstack image list
Password:
+--------------------------------------+-------------------------+--------+
| ID | Name | Status |
+--------------------------------------+-------------------------+--------+
| 6d07d4e1-3b9d-4986-b1d7-8dd92ec9bd2c | cirros | active |
+--------------------------------------+-------------------------+--------+
部署节点:Controller Node
在Controller节点上需要安装nova-api、nova-conductor、nova-consoleauth、nova-novncproxy、nova-scheduler
在MariaDB(MySQL)中创建数据库nova_api
和nova
① 以root
用户登录MySQL
mysql -u root -p
② 创建nova_api
和nova
数据库
CREATE DATABASE nova_api;
CREATE DATABASE nova;
③ 授予nova_api
和nova
数据库适当权限
注:将NOVA_DBPASS
替换为前面设计的实际密码
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
创建计算服务证书和API路径
① 设置OpenStack admin
用户环境变量
source ~/.openstack/.admin-openrc
② 在OpenStack中创建nova
用户
openstack user create --domain default --password-prompt nova
输入用户nova
的密码NOVA_PASS
(将NOVA_PASS
替换为前面设计的实际密码)。
③ 将admin
角色授予nova
用户
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组件
sudo apt-get install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler
② 修改配置文件sudo vi /etc/nova/nova.conf
。
在[DEFAULT]
处只启用compute
和metadata
APIs,将
enabled_apis=ec2,osapi_compute,metadata
修改为:
enabled_apis = osapi_compute,metadata
在[api_database]
和[database]
处配置数据库访问连接(若没有[api_database]
和[database]
标记,则手动添加)
注:将NOVA_DBPASS
替换为前面设计的实际密码
[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队里访问
注:将RABBIT_PASS
替换为前面设计的实际密码
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在[DEFAULT]
和[keystone_authtoken]
处配置身份服务访问
注:将NOVA_PASS
替换为前面设计的实际密码
注:注释或删除[keystone_authtoken]
处其他内容
[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 = NOVA_PASS
在[DEFAULT]
处配置my_ip
为Controller节点Management Network网口地址
[DEFAULT]
my_ip = 10.0.0.11
在[DEFAULT]
处启用网络服务支持
注:默认情况下,计算服务使用主机内部防火墙驱动,因此必须禁用OpenStack网络服务中的防火墙驱动。
[DEFAULT]
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
在[vnc]
处,使用Controller节点Management Network网口地址配置VNC代理(VNC proxy)。
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
在[glance]
处配置镜像服务API位置
[glance]
api_servers = http://controller:9292
在[oslo_concurrency]
处配置lock_path
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
最后,由于安装包BUG,需要在[DEFAULT]
处移除logdir
。在[DEFAULT]
处删除,以下内容
logdir=/var/log/nova
③ 将配置信息写入计算服务数据库nova
su root
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" 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
部署节点:Compute Node
在Compute节点上需要安装nova-compute。
注:以下步骤在Compute节点上执行
安装配置计算服务组件
安装nova-compute
组件
sudo apt-get install nova-compute
修改配置文件sudo vi /etc/nova/nova.conf
① 在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队列访问
注:将RABBIT_PASS
替换为前面设计的实际密码
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
② 在[DEFAULT]
和[keystone_authtoken]
处配置身份服务访问
注:将NOVA_PASS
替换为前面设计的实际密码
注:注释或删除[keystone_authtoken]
处其他内容
[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 = NOVA_PASS
在[DEFAULT]
处配置my_ip
为Compute节点Management Network网口地址
[DEFAULT]
my_ip = 10.0.0.31
在[DEFAULT]
处启用网络服务支持
[DEFAULT]
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
在[vnc]
处配置远程控制访问
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
注: VNC服务器端监听所有地址,VNC代理客户端只监听Compute节点Management Network网口地址,base URL设置Compute节点远程控制台浏览器访问地址(若浏览无法解析controller,则需替换为相应IP地址)。
在[glance]
处配置镜像服务API
[glance]
api_servers = http://controller:9292
在[oslo_concurrency]
处配置lock_path
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
最后,由于安装包BUG,需要在[DEFAULT]
处移除logdir
。在[DEFAULT]
处删除,以下内容
logdir=/var/log/nova
完成安装,重启计算服务
① 检测是否支持虚拟机硬件加速
egrep -c '(vmx|svm)' /proc/cpuinfo
若返回结果大于等于1,则支持,无需做额外配置;
若返回结果0,则不支持硬件加速,需要做以下额外配置:修改配置文件sudo vi /etc/nova/nova-compute.conf
中的libvirt
设置项,使用QEMU
代替KVM
。
[libvirt]
virt_type = qemu
② 重启计算服务
sudo service nova-compute restart
验证计算服务是否安装正确
注:以下步骤需在Controller节点执行
① 设置OpenStack admin
用户环境变量
source ~/.openstack/.admin-openrc
② 打印服务组件列表,验证每个成功启动和注册的进程。
openstack compute service list
结果如下:
+--+----------------+----------+--------+-------+-----+--------------------------+
|Id| Binary | Host | Zone |Status |State| Updated At |
+--+----------------+----------+--------+-------+-----+--------------------------+
| 4|nova-consoleauth|controller|internal|enabled| up |2016-05-29T06:28:52.000000|
| 5|nova-scheduler |controller|internal|enabled| up |2016-05-29T06:28:51.000000|
| 6|nova-conductor |controller|internal|enabled| up |2016-05-29T06:28:53.000000|
| 7|nova-compute |compute |nova |enabled| up |2016-05-29T06:28:45.000000|
+--+----------------+----------+--------+-------+-----+--------------------------+
部署节点:Controller Node
在MariaDB(MySQL)中创建neutron
数据库
① 以root用户登录MySQL
mysql -u root -p
② 创建数据库neutron
CREATE DATABASE neutron;
③ 授予数据库neutron
适当的权限
注:将NEUTRON_DBPASS
替换为前面设计的实际密码。
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
创建网络服务证书和API路径
① 设置OpenStack admin
用户环境变量
source ~/.openstack/.admin-openrc
② 在OpenStack中创建neutron
用户
openstack user create --domain default --password-prompt neutron
输入用户neutron
的密码NEUTRON_PASS
(将NEUTRON_PASS
替换为前面设计的实际密码)。
③ 将admin
角色授予neutron
用户
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-server
服务组件
① 安装neutron-server
组件
sudo apt-get install neutron-server neutron-plugin-ml2
② 修改配置文件sudo vi /etc/neutron/neutron.conf
在[database]
处配置网络服务数据库neutron
访问连接
注:将NEUTRON_DBPASS
替换为前面设计的实际密码
注:首先注释掉[database]
处已存在的默认的connection
[database]
# connection = sqlite:////var/lib/neutron/neutron.sqlite
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
在[DEFAULT]
处启用Modular Layer 2 (ML2) plug-in
、router service
和overlapping IP addresses
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队列访问
注:将RABBIT_PASS
替换为前面设计的实际密码
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在[DEFAULT]
和[keystone_authtoken]
处配置身份服务访问
注:将NEUTRON_PASS
替换为前面设计的实际密码
注:注释或删除[keystone_authtoken]
处其他配置信息
[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 = neutron
password = NEUTRON_PASS
在[DEFAULT]
和[nova]
处配置网络来通知计算节点网络拓扑变化。
注:将NOVA_PASS
替换为前面设计的实际密码
[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 = NOVA_PASS
配置Modular Layer 2 (ML2)
插件
ML2 plug-in使用Linux网桥机制为OpenStack实例建立layer-2虚拟网络设施(桥接和交换)。
修改配置文件sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
① 在[ml2]
处启用flat
、VLAN
、VXLAN
网络
注:在配置ML2
插件后,移除type_drivers设置项的部分值,将导致数据库不一致。
[ml2]
type_drivers = flat,vlan,vxlan
② 在[ml2]
处启用VXLAN self-service
网络
[ml2]
tenant_network_types = vxlan
③ 在[ml2]
处启用Linux bridge
和layer-2 population
机制
[ml2]
mechanism_drivers = linuxbridge,l2population
注:Linux Bridge Agent
只支持VXLAN overlay networks
④ 在[ml2]
处启用端口安全扩展驱动
[ml2]
extension_drivers = port_security
⑤ 在[ml2_type_flat]
处配置运营商虚拟网络为flat network
[ml2_type_flat]
flat_networks = provider
⑥ 在[ml2_type_vxlan]
处配置自服务网络中的VXLAN
网络标识符范围
[ml2_type_vxlan]
vni_ranges = 1:1000
⑦ 在[securitygroup]
处启用ipset
来增强安全组规则的效率
[securitygroup]
enable_ipset = True
将配置信息写入neutron
数据库
su root
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 vi /etc/nova/nova.conf
在[neutron]
处配置访问参数,启用元数据服务代理,配置元数据代理共享密钥
注:将NEUTRON_PASS
和METADATA_SECRET
替换为前面设计的实际密码
[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 = NEUTRON_PASS
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET
重启计算服务API和网络服务
sudo service nova-api restart
sudo service neutron-server restart
部署节点:Network Node
在Network
节点上部署组件:neutron-linuxbridge-agent
、
neutron-l3-agent
、neutron-dhcp-agent
、neutron-metadata-agent
网络服务部署架构有两种方式Provider Networks
和Self-Service Networks
,在本文开头作了简要介绍。本文采用Self-Service Networks
方式部署。
参考文档:Deploy Networking Service using the Architecture of Self-Service Networks
安装网络服务组件
sudo apt-get install neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
配置公共服务组件
公共组件配置包括认证机制、消息队列。修改配置文件sudo vi /etc/neutron/neutron.conf
① 在[database]
处注释掉其他所有设置项,因为Network
节点不需要直接访问数据库。
② 在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队列访问
注:将RABBIT_PASS
替换为前面设计的实际密码
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
③ 在[DEFAULT]
和[keystone_authtoken]
处配置身份服务访问
注:将NEUTRON_PASS
替换为前面设计的实际密码
注:注释或删除[keystone_authtoken]
处其他配置信息
[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 = neutron
password = NEUTRON_PASS
配置Linux网桥代理
Linux bridge agent为实例建立了二层虚拟网络设施,而且可以管理安全组。
修改配置文件sudo vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
① 在[linux_bridge]
处将虚拟网络映射到物理网络
注:将PROVIDER_INTERFACE_NAME
替换为Network节点External Network网络接口名称eth0
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
② 在[vxlan]
处启用VXLAN overlay networks
,配置管理Overlay网络的物理网络IP地址,启用layer-2 population
注:将OVERLAY_INTERFACE_IP_ADDRESS
替换为Network节点Management Network网络接口IP地址10.0.0.21
[vxlan]
enable_vxlan = True
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = True
③ 在[securitygroup]
处启用安全组,并配置Linux bridge iptables firewall driver
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置三层网络代理
L3(Layer-3) Agent
位自服务网络提供了路由和NAT服务。
修改配置文件sudo vi /etc/neutron/l3_agent.ini
,在[DEFAULT]
处配置Linux网桥接口驱动(Linux Bridge Interface Driver)和外网网桥。
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
external_network_bridge =
注:external_network_bridge
值故意空缺,这样可使多个外部网络共用一个代理。
配置DHCP
代理
修改配置文件sudo vi /etc/neutron/dhcp_agent.ini
,在[DEFAULT]
处配置Linux bridge interface driver
和Dnsmasq DHCP driver
,启用独立的metadata
使运营商网络实例可以访问虚拟网络元信息。
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
配置元数据代理
元数据代理提供一些诸如证书之类的配置信息。
修改配置文件sudo vi /etc/neutron/metadata_agent.ini
,在[DEFAULT]
处配置元数据主机和共享密钥。
注:将METADATA_SECRET
替换为前面设计的实际密码
[DEFAULT]
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET
重启网络服务代理
sudo service neutron-linuxbridge-agent restart
sudo service neutron-dhcp-agent restart
sudo service neutron-metadata-agent restart
sudo service neutron-l3-agent restart
部署节点:Compute Node
安装网络服务组件
sudo apt-get install neutron-linuxbridge-agent
配置公共组件
公共组件配置包括认证机制、消息队列、插件。
修改配置文件sudo vi /etc/neutron/neutron.conf
① 在[database]
处注释掉其他所有设置项,因为Compute
节点不需要直接访问数据库。
② 在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ
消息队列访问
注:将RABBIT_PASS
替换为前面设计的实际密码
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
③ 在[DEFAULT]
和[keystone_authtoken]
处配置身份服务访问
注:将NEUTRON_PASS
替换为前面设计的实际密码
注:注释或删除[keystone_authtoken]
处其他项
[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 = neutron
password = NEUTRON_PASS
配置网络设置
配置Linux网桥代理,修改配置文件sudo vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
① 在[linux_bridge]
处将虚拟网络映射到物理网络
注:将PROVIDER_INTERFACE_NAME
替换为Compute节点External Network网络接口名称eth0
。
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
② 在[vxlan]
处启用VXLAN
覆盖网络,配置管理覆盖网络的物理网络接口IP地址,启用layer-2 population
注:将OVERLAY_INTERFACE_IP_ADDRESS
替换为Compute节点Management Network网络接口IP地址10.0.0.31
[vxlan]
enable_vxlan = True
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = True
③ 在[securitygroup]
处启用安全组,配置Linux bridge iptables firewall driver
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置计算服务访问网络
修改配置文件sudo vi /etc/nova/nova.conf
① 在[neutron]
处配置访问参数
注:将NEUTRON_PASS
替换为前面设计的实际密码
[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 = NEUTRON_PASS
② 重启计算服务
sudo service nova-compute restart
③ 重启Linux网桥代理
sudo service neutron-linuxbridge-agent restart
验证网络服务是否安装配置正确
① 在Controller节点上设置OpenStack管理用户admin
的环境变量
source ~/.openstack/.admin-openrc
② 列出已加载的扩展包,验证成功启动的neutron-server
进程
neutron ext-list
neutron agent-list
仪表盘是一个Web接口,可使云管理员和用户管理各种各样的OpenStack资源和服务。本文采用Apache Web Server
部署Dashboard
服务。
部署节点:Controller Node
安装Horizon
sudo apt-get install openstack-dashboard
若遇到由于openstack-dashboard-ubuntu-theme
无法安装的问题,可执行如下命令:
dpkg --remove --force-remove-reinstreq openstack-dashboard-ubuntu-theme
修改配置文件sudo vi /etc/openstack-dashboard/local_settings.py
① 在controller
节点上配置horizon
使用OpenStack Service
。
OPENSTACK_HOST = "controller"
② 配置允许所有主机都可以访问horizon
ALLOWED_HOSTS = ['*', ]
③ 配置memcached session storage service
注:注释掉其他session storage
配置信息
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
④ 启用Identity API version 3
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"
⑨ 配置时区
注:该步骤可选配置
TIME_ZONE = "Asia/Shanghai"
重新加载Apache服务
sudo service apache2 reload
验证Dashboard
服务是否部署成功
http://controller/horizon
在物理主机中为Dashboard外网访问配置端口映射
① 利用Windows自带的netsh
配置端口映射,打开cmd
命令行,输入:
netsh interface portproxy add v4tov4 listenport=11180 connectaddress=192.168.1.11 connectport=80
② 在系统防火墙高级设置中配置入站规则
新建规则-->端口-->特定本地端口:11180
-->允许连接-->选择域/专用/公用-->名称:VMware OpenStack Dashboard HTTP Service
、描述:用于VMware中OpenStack云计算平台Dashboard服务的Web访问
③ 利用Windows自带的netsh
配置端口映射,打开cmd
命令行,输入:
netsh interface portproxy add v4tov4 listenport=6080 connectaddress=192.168.1.11 connectport=6080
④ 在系统防火墙高级设置中配置入站规则
新建规则-->端口-->特定本地端口:6080
-->允许连接-->选择域/专用/公用-->名称:VMware OpenStack Compute Service of Nova Proxy
、描述:用于VMware中OpenStack云计算平台Nova Proxy服务的Web访问
部署节点:Controller Node
在MariaDB(MySQL)中创建数据库cinder
① 以root
用户登录MySQL
mysql -u root -p
② 创建cinder
数据库
CREATE DATABASE cinder;
③ 授予cinder
数据库适当权限
注:将CINDER_DBPASS
替换为前面设计的实际密码
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';
创建Cinder服务实体和API路径
① 设置OpenStack中admin
用户环境变量
source ~/.openstack/.admin-openrc
② 在OpenStack中创建一个cinder
用户
openstack user create --domain default --password-prompt cinder
输入用户cinder
的密码CINDER_PASS
(将CINDER_PASS
替换为前面设计的实际密码)。
③ 将admin
角色授予cinder
用户
openstack role add --project service --user cinder admin
④ 创建cinder
和cinderv2
服务实体
openstack service create --name cinder --description "OpenStack Block Storage" volume
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
⑤ 创建块存储服务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服务组件
① 安装Cinder
sudo apt-get install cinder-api cinder-scheduler
② 修改配置文件sudo vi /etc/cinder/cinder.conf
。
注:将CINDER_DBPASS
、CINDER_PASS
和RABBIT_PASS
替换为前面设计的实际密码。
在[database]
处配置数据访问连接:
[database]
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队列访问:
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在[DEFAULT]
和[keystone_authtoken]
处配置认证服务访问:
注:注释或删除[keystone_authtoken]
处其他默认设置。
[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 = cinder
password = CINDER_PASS
在[DEFAULT]
处配置my_ip
为Controller节点Management Networ网络接口地址:
[DEFAULT]
my_ip = 10.0.0.11
在[oslo_concurrency]
处配置lock_path
:
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
③ 将配置信息写入块存储服务数据库cinder
su root
su -s /bin/sh -c "cinder-manage db sync" cinder
配置计算服务调用块存储服务
修改配置文件sudo vi /etc/nova/nova.conf
,添加如下信息:
[cinder]
os_region_name = RegionOne
重启计算服务API和块存储服务
sudo service nova-api restart
sudo service cinder-scheduler restart
sudo service cinder-api restart
部署节点:BlockStorage Node
安装配置LVM
① 安装LVM:
sudo apt-get install lvm2
② 创建LVM物理卷/dev/sdb
:
sudo pvcreate /dev/sdb
③ 创建LVM卷组cinder-volumes
sudo vgcreate cinder-volumes /dev/sdb
④ 配置只有OpenStack实例才可以访问块存储卷
修改配置文件sudo vi /etc/lvm/lvm.conf
,在devices
处添加一个过滤器,使OpenStack实例只允许访问/dev/sdb
。
filter = [ "a/sdb/", "r/.*/"]
注:如果块存储节点操作系统磁盘也使用了逻辑卷管理LVM,则在过滤器中必须将操作系统磁盘LVM所在设备/dev/sda
也添加到允许访问列表。例如本文各节点系统磁盘均采用LVM,则应添加下面过滤器:
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
注:如果Compute节点操作系统磁盘(如/dev/sda
)也使用LVM,则必须在Compute节点上修改配置文件sudo vi /etc/lvm/lvm.conf
,将操作系统磁盘添加到过滤器允许访问列表。如下:
filter = [ "a/sda/", "r/.*/"]
安装配置块存储服务组件
① 安装cinder
sudo apt-get install cinder-volume
② 修改配置文件sudo vi /etc/cinder/cinder.conf
注:将CINDER_DBPASS
、CINDER_PASS
和RABBIT_PASS
替换为前面设计的实际密码。
在[database]
处配置数据库访问连接:
[database]
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队列访问服务:
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在[DEFAULT]
和[keystone_authtoken]
处配置身份认证服务访问:
注:注释或删除[keystone_authtoken]
处其他默认配置信息
[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 = cinder
password = CINDER_PASS
在[DEFAULT]
处配置my_ip
为BlockStorage节点Management Networ网络接口地址:
[DEFAULT]
my_ip = 10.0.0.41
在[lvm]
处添加LVM后端驱动、卷组、iSCSI协议和服务,如下:
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = tgtadm
在[DEFAULT]
处配置LVM后端名称(可任意设置,为了简单,本文设置为lvm):
[DEFAULT]
enabled_backends = lvm
在[DEFAULT]
处配置镜像服务API路径:
[DEFAULT]
glance_api_servers = http://controller:9292
在[oslo_concurrency]
处配置lock_path
:
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
③ 重启块存储服务
sudo service tgt restart
sudo service cinder-volume restart
验证块存储服务是否安装配置正确
① 在Controller节点上设置OpenStack管理用户admin
的环境变量
source ~/.openstack/.admin-openrc
② 列出块存储服务组件,验证成功启动的cinder
进程
cinder service-list
共享文件系统服务可以提供对共享文件系统或分布式文件系统的访问。
部署节点:Controller Node
在MariaDB(MySQL)中创建数据库manila
① 以root
用户登录MySQL
mysql -u root -p
② 创建manila
数据库
CREATE DATABASE manila;
③ 授予manila
数据库适当权限
注:将MANILA_DBPASS
替换为前面设计的实际密码
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'localhost' IDENTIFIED BY 'MANILA_DBPASS';
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'%' IDENTIFIED BY 'MANILA_DBPASS';
创建Manila服务实体和API路径
① 设置OpenStack中admin
用户环境变量
source ~/.openstack/.admin-openrc
② 在OpenStack中创建一个manila
用户
openstack user create --domain default --password-prompt manila
输入用户manila
的密码MANILA_PASS
(将MANILA_PASS
替换为前面设计的实际密码)。
③ 将admin
角色授予manila
用户
openstack role add --project service --user manila admin
④ 创建manila
和manilav2
服务实体
openstack service create --name manila --description "OpenStack Shared File Systems" share
openstack service create --name manilav2 --description "OpenStack Shared File Systems" sharev2
⑤ 创建共享文件系统服务API路径
openstack endpoint create --region RegionOne share public http://controller:8786/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne share internal http://controller:8786/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne share admin http://controller:8786/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne sharev2 public http://controller:8786/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne sharev2 internal http://controller:8786/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne sharev2 admin http://controller:8786/v2/%\(tenant_id\)s
安装和配置Manila服务组件
① 安装Manila
sudo apt-get install manila-api manila-scheduler python-manilaclient
② 修改配置文件sudo vi /etc/manila/manila.conf
。
注:将MANILA_DBPASS
、MANILA_PASS
和RABBIT_PASS
替换为前面设计的实际密码。
在[database]
处配置数据访问连接:
[database]
connection = mysql+pymysql://manila:MANILA_DBPASS@controller/manila
在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队列访问:
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在[DEFAULT]
处添加如下配置信息:
default_share_type = default_share_type
rootwrap_config = /etc/manila/rootwrap.conf
在[DEFAULT]
和[keystone_authtoken]
处配置认证服务访问:
注:注释或删除[keystone_authtoken]
处其他默认设置。
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
memcached_servers = controller:11211
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = manila
password = MANILA_PASS
在[DEFAULT]
处配置my_ip
为Controller节点Management Networ网络接口地址:
[DEFAULT]
my_ip = 10.0.0.11
在[oslo_concurrency]
处配置lock_path
:
[oslo_concurrency]
lock_path = /var/lib/manila/tmp
③ 将配置信息写入块存储服务数据库manila
su root
su -s /bin/sh -c "manila-manage db sync" manila
重启共享文件系统服务
sudo service manila-scheduler restart
sudo service manila-api restart
部署节点:BlockStorage Node
安装共享文件系统服务组件
① 安装manila
sudo apt-get install manila-share python-pymysql
② 修改配置文件sudo vi /etc/manila/manila.conf
注:将MANILA_DBPASS
、MANILA_PASS
和RABBIT_PASS
替换为前面设计的实际密码。
在[database]
处配置数据库访问连接:
[database]
connection = mysql+pymysql://manila:MANILA_DBPASS@controller/manila
在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ消息队列访问服务:
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在[DEFAULT]
处添加如下配置信息:
default_share_type = default_share_type
rootwrap_config = /etc/manila/rootwrap.conf
在[DEFAULT]
和[keystone_authtoken]
处配置身份认证服务访问:
注:注释或删除[keystone_authtoken]
处其他默认配置信息
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
memcached_servers = controller:11211
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = manila
password = MANILA_PASS
在[DEFAULT]
处配置my_ip
为BlockStorage节点Management Networ网络接口地址:
[DEFAULT]
my_ip = 10.0.0.41
在[oslo_concurrency]
处配置lock_path
:
[oslo_concurrency]
lock_path = /var/lib/manila/tmp
安装配置共享服务器管理
① 针对两种不同的网络模式(provider和self-service),共享文件系统服务支持两种模式:
不需要驱动器支持的共享服务器管理:不需要安装任何驱动,默认使用LVM和NFS服务方式,支持NFS和CIFS协议,通过在共享服务器创建共享卷,利用NFS为虚拟机提供共享服务。
需要驱动器支持的共享服务器管理:需要计算(Nova),网络(Neutron)和块存储管理(Cinder)服务管理共享服务器。用于创建共享服务器的信息被配置为共享网络。这种模式使用通用驱动程序,并需要启用驱动控制共享服务器(DHSS), 还需要连接到公共网络路由器。本指南采用第二种模式。
② 安装网络服务组件
sudo apt-get install neutron-plugin-linuxbridge-agent
③ 配置网络服务公共组件
公共组件配置包括认证机制、消息队列、插件。修改配置文件sudo vi /etc/neutron/neutron.conf
在[database]
处注释掉其他所有设置项,因为BlockStorage
节点不需要直接访问数据库。
在[DEFAULT]
和[oslo_messaging_rabbit]
处配置RabbitMQ
消息队列访问
注:将RABBIT_PASS
替换为前面设计的实际密码
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在[DEFAULT]
和[keystone_authtoken]
处配置身份服务访问
注:将NEUTRON_PASS
替换为前面设计的实际密码
注:注释或删除[keystone_authtoken]
处其他项
[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 = neutron
password = NEUTRON_PASS
④ 配置网络设置
配置Linux网桥代理,修改配置文件sudo vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
在[linux_bridge]
处将虚拟网络映射到物理网络
注:将PROVIDER_INTERFACE_NAME
替换为BlockStorage节点External Network网络接口名称eth0
。
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
在[vxlan]
处启用VXLAN
覆盖网络,配置管理覆盖网络的物理网络接口IP地址,启用layer-2 population
注:将OVERLAY_INTERFACE_IP_ADDRESS
替换为BlockStorage节点Management Network网络接口IP地址10.0.0.41
[vxlan]
enable_vxlan = True
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = True
在[securitygroup]
处启用安全组,配置Linux bridge iptables firewall driver
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
⑤ 修改配置文件sudo vi /etc/manila/manila.conf
在[DEFAULT]
处启用generic
和NFS/CIFS
协议:
注:下面共享后端名称可任意设置,本指南设置为驱动名称。
[DEFAULT]
enabled_share_backends = generic
enabled_share_protocols = NFS,CIFS
在[neutron]
、[nova]
和[cinder]
处启用这些服务的认证信息:
注:将NEUTRON_PASS
、NOVA_PASS
和CINDER_PASS
替换为前面设计的实际密码
[neutron]
url = http://controller:9696
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
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
[nova]
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
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
[cinder]
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
region_name = RegionOne
project_name = service
username = cinder
password = CINDER_PASS
在[generic]
处配置generic
驱动:
[generic]
share_backend_name = GENERIC
share_driver = manila.share.drivers.generic.GenericShareDriver
driver_handles_share_servers = True
service_instance_flavor_id = 100
service_image_name = manila-service-image
service_instance_user = manila
service_instance_password = manila
interface_driver = manila.network.linux.interface.BridgeInterfaceDriver
⑥ 重启服务
sudo service manila-share restart
sudo service neutron-linuxbridge-agent restart
验证共享文件系统服务和网络服务代理是否安装配置正确
① 在Controller节点上设置OpenStack管理用户admin
的环境变量
source ~/.openstack/.admin-openrc
② 列出共享文件系统服务组件,验证成功启动的manila
进程
manila service-list
③ 列出网络服务代理
neutron agent-list
注:在OpenStack Mitaka发行版中Horizon中不包括Manila,需要安装额外的插件manila-ui
才能在Horizon中显示Share菜单。
安装Manila UI
查看列表:http://tarballs.openstack.org/manila-ui/
sudo pip install 'http://tarballs.openstack.org/manila-ui/manila-ui-stable-mitaka.tar.gz'
在Horizon
中启用Manila UI
查看Manila UI
安装路径:find /usr -name 'manila_ui'
cd /usr/local/lib/python2.7/dist-packages/manila_ui
sudo cp ./enabled/