PS:本文保证,你只要是按照我的步骤一步步来的,保证可以搭建成功!
Q版OpenStack安装
一、官方文档
首先将官方文档放上来,本文安装流程是以官方文档为准,因为我也是按照官方文档一步步搭建的,所以搭建环境的时候打开官方文档对照着查看还是有必要的。
PS:官方文档还是看默认英文的吧,如果你切换成中文的就会发现只有M版和L版,
默认英文状态下你就可以看到Q版的官方文档了,甚至还有最新的U版的,
二、基础环境
首先介绍下基础环境,这个是非常重要的,如果你基础环境都准备不好,那么你在搭建OpenStack各个服务的时候会遇到各种奇葩的问题。后期搭建服务的时候出问题大部分都是前面的基础操作没有做好,比如主机名、本地DNS解析、selinux没关、防火墙firewalld没有设置开机自动关闭等等。
虚机硬件:
我使用的是vmware的虚机,操作系统是centos7.4版本,准备两台,
——》一个作为controller控制节点;
——》一个作为compute数据节点;
1、配置信息:
角色 | 主机名 | 硬件配置 |
---|---|---|
controller | vlinx144010 | 1 cpu 4Gmem 20Gdisk |
conpute | vlinx144011 | 1 cpu 4Gmem 20Gdisk |
这个根据你的实际情况来进行划分,上面这个只是通过OpenStack官方文档建议的最小的配置来设置的,因为两台机器用途是不同的,
——》controller 控制节点,上面会安装很多的软件启动很多的服务,甚至数据库都在他上面,内存可以给多点;
——》compute数据节点,他主要是用来提供硬件资源,启动虚机的,他本身启动的服务就是个nova、neutron和我复用在上面的cinder,他主要就是为创建的虚机来提供硬件资源,所以在搭建过程中不需要给太大
在部署的初期的时候controller控制节点上面2CPU 4G内存足够了,而在compute节点上2CPU2G内存绰绰有余,当你环境搭建好之后可以在手动的给compute节点来提升资源。
这是我后期部署好之后两台机器的配置:
controller节点:
compute节点:
2、网络配置
注意,基础环境的网络配置是非常重要的,非常重要的,非常重要,敲黑板!!!
根据官方文档中的介绍,
“所有节点都需要互联网访问,用于管理目的,如包安装、安全更新、DNS和NTP。 在大多数情况下,节点应该通过管理网络接口获得互联网接入。 为了突出网络分离的重要性,示例体系结构为管理网络使用私有地址空间,并假设物理网络基础设施通过NAT或其他方法提供Internet访问。”
而在基础配置的时候说准备两块网卡:
——》一块网卡配置10.0.0.0/24网络地址作为管理网络来使用;
——》另外一块网卡,连接外网,不配置地址,留着后面创建neutron的时候使用;
我的配置也是两块网卡:
——》一块网卡配置192.168.144.0/24网段地址,作为管理网络来使用,在vmware中设置为仅主机模式;
——》另一块网卡设置为NAT模式,IP地址自动划分,网段是192.168.223.0/24,通过他连接外网,后期neutron使用的也是这块网卡;
官方文档第二块网卡也就是连接外网的网卡是不需要配置地址的设置为none模式,等着neutron服务使用就可以了,但是前期安装软件的时候就是需要来进行联网的,所以我又加了一块桥接模式的网卡,通过他联网来进行软件的安装,而且我按照配置走了一遍到后期的时候创建provider网络是没法分配地址的,导致创建虚机无法连接外网。
索性我就将连接外网的这块网卡设置为NAT模式通过vmware自带的DHCP划分地址来进行使用,前面上网安装软件,后期提供neutron服务使用都是他。
2.1、为什么不将网卡模式设置为桥接模式呢?
NAT模式可以连接外网但是桥接模式模式也是可以连接外网啊!为什么使用NAT模式呢?
——》首先桥接模式连接往外的方式是找外界的路由器获取一个地址,配置在自己的网卡上来进行外网通信,但是你不确定你的外网路由器的情况是什么样子的,他是不可测的;
比如:路由器的DHCP地址池有多少个地址、你每次得到的地址是不是同一个、当你在创建provider网络时是需要占用路由器作为DHCP网段的一部分地址分配给虚机的,你没法确定他的范围!
——》接着NAT模式,他是通过SNAT源地址和DNAT目的地址解析,使用的IP地址还是本地的网络,没有申请新的外网路由器的地址,只是在数据包出去的时候改下源地址,数据包回来的时候改下目标地址,以这样的方式来进行外网访问,
主要就是NAT模式下分配给虚机的网段是vmware自己分配的,我们可以自己定义,后期再创建provider网络的时候可以随便给,
下面是我虚机中NAT网络的配置:
完成
两个虚机创建好的后截图,
controller虚机:
配置:2CPU+4Gmem+20Gdisk
compute虚机:
配置:2cpu+2Gmem+20disk
PS1:这里我们在cpu部分将半虚拟化打开,这个是配置nova的时候需要设置的,提前设置好。
PS2:这里我们多添加了一块硬盘5G的,这个是给cinder组件来使用的,现在添加上来就好。
虚机软件
1、配置主机名设置本地DNS解析
controller:
这里主要是将主机名设置好,因为后期通过xshell连接的时候就是通过他来判断自己到底是在哪台主机上面。
还有就是在本地DNS解析文件中将192.168.144.10的主机名解析多加一个controller,设置好这个在配置文件中就不用了写IP地址了,一个主机名就可以了。
最后测试下能够通过controller主机名ping通就可以了。
# hostname
vlinx144010.com
# cat /etc/hosts
192.168.144.10 vlinx144010.com vlinx144010 controller
192.168.144.11 vlinx144011.com vlinx144011
# ping -c2 controller
compute:
在compute节点上一样的操作就是主机名是vlinx144011.com
hostname
2、关闭selinux和firewalld
controller和compute两台机器上都要执行,
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
getenforce
systemctl disable firewalld
systemctl stop firewalld
systemctl status firewalld
3、时间同步
OpenStack的节点时间是需要进行同步的,但是我使用的是两台机器,而且都是可以进行联网的,完全可以都通过网络源来进行时间同步,但是我还是将controller和网络源同步时间,然后compute 和controller同步时间。
controller:
yum install chrony.x86_64
vim /etc/chrony.conf
3 server 0.centos.pool.ntp.org iburst #将四个网络源留下一个就好
27 allow 192.168.144.0/24 #配置允许访问的客户端列表
31 local stratum 10 #本地的优先级
查看时间同步并设置开机启动:
chronyc sources -v
systemctl enable --now chronyd
compute:
compute上安装软件并指定时间同步源是controller节点,
yum install chrony.x86_64
vim /etc/chrony.conf
server controller iburst
启动服务并查看时间同步:
systemctl start chronyd
systemctl enable --now chronyd
chronyc sources -v
4、配置yum源
下载yum源到本地,controller和compute都要执行
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum repolist
接着安装Q版的仓库
yum install centos-release-openstack-queens.noarch
安装Q版仓库可以查看下,
5、更新内核
我查看了下内核的参数,我现在是安装好之后是没有进行update更新的状态,看内核版本安装Q版本是可以的,所以我没有进行更新,
如果你的内核版本低于这个就需要进行update更新了!
cat /etc/centos-release
然后安装OpenStack客户端,验证下能否正常安装软件:(两个节点都要安装)
yum install python-openstackclient -y
必要软件:
1、MySQL数据库(controller)
在OpenStack环境中使用mysql数据库来存储各个服务的基础数据,
因为mysql已经商用默认源中是没有他的软件包的,所以可以使用mariadb,mariadb和mysql没啥区别,他是开源的,就在我们的centos7源中有软件包直接安装就可以了。
数据库服务通常运行在控制器节点上。
安装MySQL软件
yum install mariadb mariadb-server python2-PyMySQL
编辑配置文件
创建一个[mysqld]部分,并将bind-Address键设置为控制器节点的管理IP地址,以使其他节点能够通过管理网络访问。
设置附加键以启用有用的选项和UTF-8字符集:
vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.144.10
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
设置开机自动启动并启动服务查看状态
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl status mariadb.service
通过运行mysql_secure_installation脚来对数据库进行初始化操作。
执行这个脚本会依次询问你:
- 是否设置root密码?——》Y,直接设置root密码——》Xylong_000
- 是否删除匿名用户?——》Y,
- 不允许root用户远程登录?——》Y,
- 是否删除测试数据库?——》Y,
- 是否重新加载授权表?——》Y,
PS:我认为这个脚本最方便的就是可以直接修改root密码,剩下的知道干啥就行,一路Y就可以了。
验证:
2、安装rabbitMQ消息队列(controller)
在OpenStack环境中各个服务的操作和状态都是通过rabbitMQ来协调的,有的时候当我们无法正常执行命令的时候,可以尝试重启下rabbitMQ服务,也许有效果。
因为我们的控制节点、数据节点、存储节点,相互之间是需要进行通信的,通信的时候需要借用些消息的传递,rabbitMQ就是为他们提供消息的传递,节点之前传递消息的时候会存放到rabbitMQ中,其他节点再到rabbitMQ中调取消息。
消息队列服务通常运行在控制器节点上。
OpenStack支持的消息队列有很多,包括Rabbit MQ、Qpid和Zero MQ。 但是,包OpenStack的大多数发行版都支持特定的消息队列服务。
安装软件
yum install rabbitmq-server
设置开机启动并启动服务
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
对于rabbitMQ的配置就是创建一个用户设置好权限,这里为了好记密码设置的是123,后面创建OpenStack服务的时候,密码也都是123,
rabbitmqctl add_user openstack 123
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
验证
我们可以启动rabbitMQ的web管理,通过页面访问来查看rabbitMQ的状态,
rabbitmq-plugins list
rabbitmq-plugins enable rabbitmq_management
浏览器地址:http://controller:15672/
用户名和密码都是:guest
3、memcache(controller)
在OpenStack环境中keystone服务颁布的令牌就是使用memcache来缓存的,也就是缓存用户的验证信息。
memcached服务通常运行在控制器节点上。
安装软件
yum install memcached python-memcached
配置服务使用控制器节点的管理IP地址。 这是为了使其他节点能够通过管理网络访问:
vim /etc/sysconfig/memcached
设置开机启动并启动服务
systemctl enable memcached.service
systemctl start memcached.service
systemctl status memcached.service
验证:
通过配置文件可以知道它开启的是11211端口,看下端口是否启动
4、etcd(controller)
OpenStack服务可以使用ETCd,这是一个分布式的可靠的键值存储,用于分布式密钥锁定、存储配置、跟踪服务的动态性和其他场景。
在控制器节点上运行etcd服务。
yum install etcd
编辑/etc/etcd/etcd.conf文件,并将ETCD_INITIAL_CLUSTER,ETCD_INITIAL_ADVERTISE_PEER_URLS,ETCD_ADVERTISE_CLIENT_URLS设置为控制器节点的管理IP地址,以使其他节点能够通过管理网络访问:
vim /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://controller:2380"
ETCD_LISTEN_CLIENT_URLS="http://controller:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://controller:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://controller:2379"
ETCD_INITIAL_CLUSTER="controller=http://controller:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
设置开机启动并启动服务
systemctl enable etcd
systemctl start etcd
报错:
启动服务失败,通过journal -xe命令查看无法访问http://controller:2380
error verifying flags, expected IP in URL for binding (http://controller:2380). See ‘etcd --help’.
估计是配置文件中得写入IP地址,写入设置的主机名是不生效的,回配置文件修改下,
vim /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.144.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.144.10:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.144.10:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.144.10:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.144.10:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
接着在启动服务就没问题了,
systemctl start etcd
systemctl status etcd
验证:
查看etcd服务的端口是打开的,
总结:
现在基础环境就都安装完成了,大体说下做了什么操作,
- 首先是准备好两个centos7.4的虚机,根据担当的角色不同分为controller和compute,controller上面会跑大量的服务所以内存可以大一点,compute会在上面启动虚机,所以对CPU的要求大一些,
- 然后网络方面两台机器都是需要两块网卡,一块是是仅主机模式作为控制网络也作为内部通信;一块设置为NAT模式,前期用来连接外网进行软件包安装,后期用来neutron服务使用,创建实例想联通外网都是需要通过他做的。
- 接着是基础设置,配置网络、设置主机名、添加本地的DNS解析,安装chrony服务用于时间同步,关闭selinux和firewalld防火墙
- 最后安装必要的软件,mariadb数据库、rabbitMQ详细队列、memcache缓存服务、etcd存储键值对
systemctl is-active chronyd mariadb.service rabbitmq-server.service memcached.service etcd.service
现在基础环境就搭建好了,我们可以重启下看看服务会不会自动启动,然后可以做个快照作为备份,避免后面的误操作导致环境损坏而需要重新搭建,可以直接恢复快照从这一步开始,安装软件还是比较依赖网络的,在安装mariadb的时候一个mariadb.server的包安装灰常的慢,简直让我怀疑人生。
三、节点部署
OpenStack中的必须节点有keystone、glance、nova、neutron四个节点,
首先,keystone应该是第一个进行安装的节点,其他节点进行通信的时候都是需要通过keystone节点;
接着,glance节点,负责image镜像,启动实例的时候提供镜像服务,负责存储各个不同操作系统的镜像;
接着,nova节点,负责管理实例,创建、删除、管理等操作;
最后,neutron节点,负责网络,二层和三层网络,通过linuxbridge网桥来镜像连接;
其实最小化的OpenStack环境这四个节点都完全足够了,有他们就可以创建出来一个实例了,
接着,dashboard就是提供一个图形界面,只要在web页面上点点就可以启动一个实例,创建网络等等操作;
最后,cinder节点,提供一个额外的volume存储卷,启动实例的时候可以创建卷给他绑定上去,自己搭建的玩,有没有都行;