OpenStack U版双机部署 + 创建实例
前言:
之前安装过一套Q版的OpenStack,在查看官方文档的时候发现最新版本已经出到U版了,那么就再装一套吧,经过查看U版本的OpenStack需要centos8操作系统上进行安装,那么首先就是部署环境了。
根据官方文档中的描述,U版的需要在centos8系统上,之前的可以在centos7系统上进行安装,下面是官方文档中的描述:
OpenStack Ussuri is available for both CentOS 8 and RHEL 8. OpenStack Train and earlier are available on both CentOS 7 and RHEL 7.
看这里官方的安装文档在这里!!!
我安装的操作都是依据官方文档的步骤,只是启动的一些小的部分有变化。
一、基础环境
准备两台虚机,操作系统是centos8的
controller节点话,两块网卡,
——》第一块设置为NAT模式,前期连接外网下载软件,后期给neutron使用;
——》另一块是仅主机模式,作为内部通信,管理网络,4Gmem 2CPU,
controller节点上会安装大量的服务所以内存给的大一点,
compute节点,两块网卡,第一块NAT前期用来连接外网,后期给neutron使用,第二块仅主机模式,用于内部连接作为管理网络,2Gmem 4CPU,CPU要打开虚拟化,还要添加一块5G硬盘作为后期cinder来使用,
compute节点是用来启动实例的,所以可以多分配几个CPU
1、网络配置
两台机器,controller和compute节点上,都是两块网卡,第一块NAT模式,第二块仅主机模式
20是controller节点,eth0外面是NAT模式,eth1是仅主机
注意,这里我使用的网络配置和官方文档中的差别不大但是也有自己的改动,比如网段都是我自己平时使用的,比如网卡模式也是我自己理解出来的,所以你照我这么做是没有问题的。
修改下本地DNS解析文件,我们在配置OpenStack节点的时候会频繁使用到,
验证
现在我们将两台虚机的基础网络配置完成了,本地的DNS解析文件也进行了修改,那么我们要确定两点:
——》第一,确定可以访问外网,我们后期使用的软件都是需要通过网络来进行安装的
——》第二,确定可以通过主机名来访问两台机器,就是将本地DNS解析文件中设置的主机名都ping一遍,看看能不能通。
# ping -c3 www.baidu.com
# ping -c3 controller
# ping -c3 compute1
注意,这里controller管理节点的主机名必须能够正常的ping通,在后面的配置文件中为了省事我们不写IP地址都是controller的主机名,敲黑板!
2、安装网络源
虚机准备好之后,yum源是默认配置的外网源,而外网是非常不稳定的,比较看脸,要是脸黑安装个mariadb的软件都是几kb几kb蹦,非常不方便,所以我们修改下将网络源更换成国内的源来进行软件的安装,
国内的网络源是非常多的,你可以按照自己的习惯来进行选择,
——》我这里使用的是阿里云的,
注意,配置网络源的前提条件是你的虚机要能够连接外网,你要不能联网那都是白扯
下载centos8专属的yum源仓库,
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
下载完成后我们可以到yumyuan仓库中查看下,说白就是下载这么一个文件,
PS:我这里是将默认的网络源文件都放到了test目录中了,yum.repo文件是我自己配置的通过挂载ISO镜像的本地源。
加载下yum源,
通过命令可以查看到centos8的源中有两个OpenStack的安装仓库分别是T版的和U版的,
我们安装U版的
# yum install centos-release-openstack-ussuri.noarch
同样的在compute节点上,安装yum源和仓库操作都是要执行的,
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
# yum repolist
# yum install centos-release-openstack-ussuri.noarch -y
3、时间同步
OpenStack环境是多节点的环境,那么就涉及到一个时间同步的问题,因为日志的输出是有时间戳的,如果节点之间时间不同步,那么你查看日志的时候乐子就大了。
现在我的环境是两台机器,都是可以连接外网的,那么可以直接安装chrony软件和外网源来进行时间同步就可以了,
但是我还是希望做的严谨一点的,那就是在两台机器上都安装chrony软件进行时间同步,但是在controller节点上和外网源进行时间同步,然后compute节点和controller节点来进行时间同步,
如果是为了简单两台机器都和网络上的时间源进行同步也可以,也是可行的,没问题。
两台机器都是需要安装软件
yum install chrony
时间同步
我是两台机器所以设置为controller节点联网作为源,另外一台同步controller节点时间
经过查看发现默认centos8安装了chrony软件,没有使用yum安装
# rpm -qa | grep chron
boost-chrono-1.66.0-6.el8.x86_64
chrony-3.5-1.el8.x86_64
controller节点
修改配置文件,设置网络源、指定可以同步时间的网段、指定本地的优先级
# vim /etc/chrony.conf
3 pool 2.centos.pool.ntp.org iburst
24 allow 192.168.144.0/16
28 local stratum 10
重启服务查看状态
# systemctl restart chronyd
# systemctl status chronyd
chrony服务的端口是323,查看已经开启了
# netstat -tunpl | grep chrony
udp 0 0 0.0.0.0:123 0.0.0.0:* 2840/chronyd
udp 0 0 127.0.0.1:323 0.0.0.0:* 2840/chronyd
udp6 0 0 ::1:323 :::* 2840/chronyd
这里就和centos7不同了,在7里面chrony配置文件中是指定四个网络源我们可以自己进行选择,
但是在centos8中网络源是指定一个pool池子,里面有很多的时间服务器,我们获取的是一些时间服务器的列表,系统从中选择一个来进行时间同步
# chronyc sources -v
210 Number of sources = 4
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 119.28.206.193 2 6 17 19 -3136us[-3136us] +/- 77ms
^* 203.107.6.88 2 6 17 20 +2690us[+7531us] +/- 46ms
^? tick.ntp.infomaniak.ch 0 6 0 - +0ns[ +0ns] +/- 0ns
^? tick.ntp.infomaniak.ch 1 6 24 19 -3674us[-3674us] +/- 161ms
查看当前的同步状态
# chronyc sourcestats -v
210 Number of sources = 1
.- Number of sample points in measurement set.
/ .- Number of residual runs with same sign.
| / .- Length of measurement set (time).
| | / .- Est. clock freq error (ppm).
| | | / .- Est. error in freq.
| | | | / .- Est. offset.
| | | | | | On the -.
| | | | | | samples. \
| | | | | | |
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
vlinx144020.com 13 8 589 -0.027 1.668 -413ns 284us
手动同步一次时间
# chronyc -a makestep
200 OK
显示系统时间信息
# chronyc tracking
Reference ID : C0A89014 (vlinx144020.com)
Stratum : 4
Ref time (UTC) : Mon Oct 26 03:45:21 2020
System time : 0.000000000 seconds fast of NTP time
Last offset : -0.000048724 seconds
RMS offset : 0.000388516 seconds
Frequency : 10.291 ppm fast
Residual freq : -0.027 ppm
Skew : 1.820 ppm
Root delay : 0.079217099 seconds
Root dispersion : 0.006792955 seconds
Update interval : 64.4 seconds
Leap status : Normal
系统查看时间信息
# timedatectl
Local time: Mon 2020-10-26 11:46:22 CST
Universal time: Mon 2020-10-26 03:46:22 UTC
RTC time: Mon 2020-10-26 03:46:22
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
timedatectl
compute节点:
查看软件包是否安装?
# rpm -qa | grep chrony
chrony-3.5-1.el8.x86_64
编辑配置文件
# vim /etc/chrony.conf
#将原有网络源注释掉,执行controller节点为网络源
#pool 2.centos.pool.ntp.org iburst
pool controller iburst
尝试是否通过主机名ping通controller节点
# ping -c3 controller
PING vlinx144020.com (192.168.144.20) 56(84) bytes of data.
64 bytes from vlinx144020.com (192.168.144.20): icmp_seq=1 ttl=64 time=0.393 ms
64 bytes from vlinx144020.com (192.168.144.20): icmp_seq=2 ttl=64 time=0.292 ms
64 bytes from vlinx144020.com (192.168.144.20): icmp_seq=3 ttl=64 time=3.05 ms
--- vlinx144020.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 82ms
rtt min/avg/max/mdev = 0.292/1.245/3.051/1.277 ms
重启服务并查看状态
# systemctl restart chronyd
# systemctl status chronyd
查看端口323已经开启了
# netstat -tunpl | grep 323
udp 0 0 127.0.0.1:323 0.0.0.0:* 1941/chronyd
udp6 0 0 ::1:323 :::* 1941/chronyd
查看chronyd服务状态
# chronyc sources -v
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* vlinx144020.com 3 6 17 5 +3222ns[ -24us] +/- 47ms
在centos8中配置chrony服务的时候因为不熟悉还查看了下官方文档,也就一起放在这了。
4、安装OpenStack软件
两个节点上都是要执行的,
安装U版仓库并启用PowerTools存储库
# yum install centos-release-openstack-ussuri
# yum config-manager --set-enabled PowerTools
安装OpenStack客户端:(两个节点上都要执行的)
# yum install python3-openstackclient
查看系统的信息
根据官方文档的顺序现在该更新系统了,但是这个比较耗费时间,我也想看下不更新会有什么报错,所以这里我只是查看下内核信息,
# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
# uname -r
4.18.0-147.el8.x86_64
# uname -a
Linux vlinx144020.com 4.18.0-147.el8.x86_64 #1 SMP Wed Dec 4 21:51:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
5、安装数据库
大多数OpenStack服务使用SQL数据库来存储信息。
数据库通常运行在控制器节点上。
安装软件
# yum install mariadb mariadb-server python2-PyMySQL
如那件安装成功之后我们是需要自己来编写一个cnf文件里面当你诡异了IP地址,使用的默认存储库,最大连接数,编码格式等等;
还有就是启动服务并且设置为自动启动,这个很重要,别没有设置自动启动,你重启了下节点,MySQL没启动,那你所有服务状态都不正常了;
最后可以使用mariadb提供的一个脚本来对mariadb数据库进行些初始化的设置,下面是我街区出来的修改数据库密码的;
# vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.144.20
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
# mysql_secure_installation
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
验证:
现在数据库已经安装好了,我们可以通过登录数据库来验证下,看下能否正常登录
6、安装rabbitMQ
Open Stack使用rabbitMQ消息队列来协调服务之间的操作和状态信息。
消息队列服务通常运行在控制器节点上。
Open Stack支持几个消息队列服务,包括Rabbit MQ、Qpid和Zero MQ。 但是,包Open Stack的大多数发行版都支持特定的消息队列服务。
# yum install rabbitmq-server
软件安装完成之后我们启动服务就好 ,然后创建一个用户然后设置下权限,
这里其实还可以开启一个模块然后通过web页面查看的,但是这里我没有安装,感兴趣的可以到我Q版的博客种找下,有详细的过程。
# systemctl enable rabbitmq-server.service
# systemctl start rabbitmq-server.service
# rabbitmqctl add_user openstack 123
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
7、安装memcache
服务的身份服务认证机制使用Memcached缓存令牌。
memcached服务通常运行在控制器节点上。
# yum install memcached python3-memcached
接着编辑下memcache配置文件将controller地址添加进去,这里写IP和主机名都可以,
# vim /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,controller"
如果写的是主机名那么你就需要保证可以ping通他了,
# ping -c3 controller
最后启动服务并设置为自动启动
# systemctl enable memcached.service
# systemctl start memcached.service
8、安装etcd
Open Stack服务可以使用ETCd,这是一个分布式的可靠的键值存储,用于分布式密钥锁定、存储配置、跟踪服务的动态性和其他场景。
安装软件
# yum install etcd
修改下配置文件,
# vim /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.144.20:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.144.20:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.144.20:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.144.20:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.144.20:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
最后启动服务并设置开机自启
# systemctl enable etcd
# systemctl start etcd
总结:
到这里OpenStack两个节点的基础环境搭建就完成了,
- 首先我做了网络的基础配置,这个是非常重要的,这里配置好后面再安装neutron的时候才会少走弯路;
- 接着更换网络源,这是为了方便我们来安装软件,你可以不更换但是默认的源网络情况不可预测,所以还是建议更换的;
- 接着时间同步,两台机器搭建你就必须时间同步,这是必须的,你可以不按照我的方法来搭建,直接两台机器都联网和网络时间源同步时间就好了,没问题的;
- 最后就是安装必须的软件了,数据库存储数据、rabbitMQ消息队列、memcache缓存,etcd我是按照官方文档的顺序安装了但是感觉没使用上,
因为我使用的是Vmware虚机创建的所以现在就可以做一个快照了,方便以后操作损坏了环境之后没法恢复还得从新安装。