【声明】
欢迎转载,转载本文请注明作者和出处
https://www.zybuluo.com/ncepuwanghui/note/389373
http://blog.csdn.net/ncepuwanghui/article/details/52034515
PDF格式下载链接:OpenStack Mitaka for Ubuntu 16.04 LTS 部署指南.pdf本文主要参考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
1. 硬件服务器
- 名称:浪潮P8000工作站
- CPU:Intel Xeon CPU E5-2620 v3 2.40GHz * 2,共12个物理核,24个逻辑核
- 内存:16 * 8 = 128GB
- 存储:SAS 300GB * 3 = 900GB
- 网络:千兆网卡 * 6
- 操作系统:Windows Server 2012 R2 DataCenter
2. OpenStack部署分析及规划
2.1 目的
- 部署一个OpenStack测试环境
- 硬件虚拟化,提供一个Infrastructure-as-a-Service (IaaS)解决方案
- 基于OpenStack云计算平台提供Hadoop MapReduce、Spark等计算服务
- 提供OpenStack开源云计算学习平台
2.2 OpenStack网络模型选择
官方文档中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网络模型设计
2.3 OpenStack节点硬件需求
2.4 OpenStack服务组件选择
本文选择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
2.5 OpenStack节点网络设计
OpenStack官方文档建议网络布局如下:
本文采用如下网络设计
总共3个子网:
① 互联网连接/对外出口(External)
② Openstack管理网络(Management)
③ VM虚拟机内网连接(Data)
注:此外,本文将Block Storage Node和Object Storage Node加入Management Network。
2.6 OpenStack节点服务器规划
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官方文档
2.7 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 各节点功能可参考下图
注:仅供参考理解,具体根据实际情况而定
2.8 用户、密码、地址、端口信息登记
注:
① 请提前设计好所需密码并登记存档,并及时登记用到的服务地址&端口信息。
② 根据实际情况,将下面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
3. 环境准备
3.1 物理主机基本配置
物理机基本配置
① 开启物理主机虚拟化功能
② 在物理主机上安装VMware Workstation 12.1 ProVMware虚拟机配置
① 配置虚拟机网络
虚拟机网络连接方式图解:
打开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节点:
3.2 节点系统安装
在VMware中创建虚拟机,安装Ubuntu 16.04 LTS
- 创建虚拟机,设置CPU核心数、内存大小、存储大小。
- 添加两块(或三块)虚拟网卡
- 加载Ubuntu Server 16.04 LTS系统镜像
- 启动系统,选择时区、语言,设置主机名和用户名、密码。
Partition disks
配置步骤:
① 单独设置分区/dev/sda1
,大小200MB
,用于挂载/boot
选择手动配置–>选择硬盘–>创建新的分区表–>选择空闲空间–>新建分区–>设置大小200MB–>选择主分区–>选择开始位置–>设置文件系统格式Ext4
–>设置挂载点/boot
–>设置分区。
② 设置LVM,方便扩展存储,挂载/
和swap
配置逻辑卷LVM–>将修改写入磁盘并配置LVM–>新建卷组–>卷组名称:vg_system
–>按空格键选中剩余空闲空间/dev/sda
–>将修改写入磁盘并配置LVM–>新建逻辑卷–>选择卷组vg_system
–>逻辑卷名:lv_root–>设置逻辑卷大小:91GB–>新建逻辑卷–>选择卷组vg_system
–>逻辑卷名:lv_swap
–>设置逻辑卷大小为剩余空间–>完成。
③ 分别对每一个逻辑卷进行配置
磁盘格式:lv_root选择ext4,lv_swap选择swap area。
挂载点:lv_root选择”/”。
最后选择完成分区并将更改写入磁盘,点击确定即可。- 选择服务器默认安装软件包
空格键选择OpenSSH Server,方便使用SSH传输文件。 - 安装Grub。
按照上述步骤,创建其他节点服务器并安装Ubuntu 16.04 LTS系统
3.3 节点系统基本环境配置
启用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
注:若在系统安装时已设置正确时区,可跳过该步骤。
4. OpenStack节点服务配置
4.1 OpenStack基本配置
统一时间源,安装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
① 安装MariaDBsudo 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
① 安装MongoDBsudo 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
① 安装RabbitMQsudo 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
① 安装Memcachedsudo 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
,查看上面几种服务端口监听是否正常。
4.2 身份服务配置(Identity Service - Keystone)
Identity服务采用RESTful设计,使用REST API提供Web服务接口。
注:常见的Web Service
方式有SOAP
、WSDL
、REST
。
部署节点:Controller Node
在MariaDB(MySQL)中创建Keystone数据库
① 以root用户登录MySQLmysql -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_TOKENopenssl 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