搭建 OpenStack(Q 版)基础环境

简介

  • 基于 Ubuntu/CentOS 系统,搭建 OpenStack(Q 版)基础环境

Hardware requirements

Network layout

操作系统

  • Ubuntu 16.04
  • CentOS 7.5

在所有的节点

配置静态 IP 地址

具体的网络接口名称和 IP 需要根据实际情况做调整。

Ubuntu 系统

  • 配置网络接口
1
$ vim /etc/network/interfaces
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 回环网络接口
auto lo
iface lo inet loopback
# 网络接口的名称
auto eth0
# 将 dhcp 修改为 static
iface eth0 inet static
# 静态 IP 地址,除默认网关以外的有效 IP 地址
address 192.168.10.100
# 子网掩码
netmask 255.255.255.0
# 广播地址
broadcast 192.168.10.255
# 默认网关
gateway 192.168.10.2
# DNS 服务器
dns-nameservers 8.8.8.8
dns-nameservers 223.5.5.5

CentOS 系统

  • 配置网络接口
1
$ vim /etc/sysconfig/network-scripts/ifcfg-{NAME}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 网络接口对应的设备名
DEVICE={NAME}
# 网络接口的名称
NAME={NAME}
# 网络类型
TYPE=Ethernet
# UUID(唯一标识)
UUID=7b32e2d7-66ed-47e1-a21c-c1b22faebbeb
# 指定网络接口是否启用
ONBOOT=yes
# 引导协议,dhcp(动态分配,默认),static(静态分配)
BOOTPROTO=static
# IP 地址
IPADDR=192.168.10.100
# 子网掩码
NETMASK=255.255.255.0
# 默认网关
GATEWAY=192.168.10.2
# 主要的 DNS
DNS1=223.5.5.5
# 备用的 DNS
DNS2=8.8.8.8

Ubuntu/CentOS 系统

  • 重启网络接口
1
2
3
4
5
6
# 禁用网络接口
$ ifdown eth0
# 启用网络接口
$ ifup eth0
# 查看网络接口的信息
$ ifconfig eth0

配置主机名

  • 清空原文件内容,自定义主机名;
1
$ vim /etc/hostname
1
2
# 文件内容(首行)
controller

配置主机名解析

  • 根据实际节点进行配置
1
$ vim /etc/hosts
1
2
3
4
5
6
7
# 将每个节点均要写入该配置文件,格式:<IP 地址 主机名> 
192.168.10.100 controller
192.168.10.200 compute
# object 节点(可选)
192.168.10.110 object
# block 节点(可选)
192.168.10.120 block

测试操作

  • 主机之间相互进行 ping 操作测试是否能 ping 通
1
2
3
4
$ ping -c 4 controller
$ ping -c 4 compute
$ ping -c 4 object
$ ping -c 4 block

配置国内源及安装必要软件

安装 NTP 服务

  • 所有节点都要安装;

Ubuntu 系统

  • 安装 chrony 软件
1
$ apt install chrony
  • 更改配置文件
1
$ vim /etc/chrony/chrony.conf
1
2
3
4
5
6
7
8
# 请注释掉其他 server
# controller 节点
server cn.pool.ntp.org iburst
# 其他节点(同步 controller 节点)
server controller iburst

# Allow NTP client access from local network. 取消这一行的注释并更换 ip 为自己子网配置
allow 192.168.1.0/24
  • 重启 NTP 服务
1
$ service chrony restart

CentOS 系统

  • 安装 chrony 软件
1
$ yum install chrony
  • 更改配置文件
1
$ vim /etc/chrony.conf
1
2
3
4
5
6
7
8
# 文件内容,请注释掉其他 server
## controller 节点
server cn.pool.ntp.org iburst
## 其他节点(同步 controller 节点)
server controller iburst

# Allow NTP client access from local network. 取消这一行的注释并更换 ip 为自己子网配置
allow 192.168.1.0/24
  • 启动 NTP 服务并设置开机自启
1
2
3
4
# 随系统开机自启
$ systemctl enable chronyd.service
# 启动 NTP 服务
$ systemctl start chronyd.service

测试操作

  • 核对时间
1
2
3
4
5
# 查看时间同步源
$ chronyc sources

# 查看系统的时间
$ date

重启主机

  • 重启主机,使配置生效
1
$ shutdown -r now

添加 Q 版的软件源

  • 所有节点都需要添加

Ubuntu 系统

  • 添加软件源
1
2
$ apt-get install software-properties-common
$ add-apt-repository cloud-archive:queens
  • 更新软件包

如果 upgrade 过程中有内核更新,请重启电脑以激活新内核

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

CentOS 系统

  • 添加软件源
1
$ yum install centos-release-openstack-queens
  • 更新软件包

如果 upgrade 过程中有内核更新,请重启电脑以激活新内核

1
$ yum upgrade

安装 OpenStack 客户端

  • 所有节点都要安装

Ubuntu 系统

  • 安装客户端
1
$ apt install python-openstackclient

CentOS 系统

  • 安装客户端
1
$ yum install python-openstackclient
  • 若未关闭 SELinux ,则需安装 OpenStack-SELinux
1
$ yum install openstack-selinux

在 Controller 节点

SQL 服务

Ubuntu 系统

  • 安装 SQL 服务
1
$ apt install mariadb-server python-pymysql
  • 配置 SQL 服务
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ vim /etc/mysql/mariadb.conf.d/99-openstack.cnf
打开是一个空文件,粘贴以下代码
# 文件内容
[mysqld]
bind-address = <controller 节点的 IP 地址>
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
  • 重启 SQL 服务 #为注释 $后为命令,需要执行
1
2
# 重启 MySQL 服务
$ service mysql restart
  • 安全初始化 SQL 服务

注意,初始化时问题的答案最好按顺序为 n Y Y Y Y ,否则后面容易出现授权问题,无法同步数据库

1
2
# 输入 MySQL 密码(已设置),然后回答问题即可
$ mysql_secure_installation

CentOS 系统

  • 安装 SQL 服务
1
$ yum install mariadb mariadb-server python2-PyMySQL
  • 配置 SQL 服务
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ vim /etc/mysql/conf.d/openstack.cnf

# 文件内容
[mysqld]
bind-address = <controller 节点的 IP 地址>
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
  • 启动 SQL 服务并设置开机自启
1
2
3
4
# 设置随系统开机自启
$ systemctl enable mariadb.service
# 启动 SQL 服务
$ systemctl start mariadb.service
  • 安全初始化 SQL 服务

注意,初始化时问题的答案最好按顺序为 n Y Y Y Y ,否则后面容易出现授权问题,无法同步数据库

1
2
# 输入 MySQL 密码(已设置),然后回答问题即可
$ mysql_secure_installation

消息队列服务

Ubuntu 系统

  • 安装消息队列服务
1
$ apt install rabbitmq-server
  • 添加用户
1
2
# <RABBIT_PASS>为自定义密码
$ rabbitmqctl add_user openstack RABBIT_PASS
  • 设置权限
1
$ rabbitmqctl set_permissions openstack ".*" ".*" ".*"

CentOS 系统

  • 安装消息队列服务
1
$ yum install rabbitmq-server
  • 启动消息队列服务并设置开机自启
1
2
3
4
# 设置随系统开机自启
$ systemctl enable rabbitmq-server.service
# 启动消息队列服务
$ systemctl start rabbitmq-server.service
  • 添加用户
1
2
# <RABBIT_PASS>为自定义密码
$ rabbitmqctl add_user openstack RABBIT_PASS
  • 设置权限
1
$ rabbitmqctl set_permissions openstack ".*" ".*" ".*"

高速缓存服务

Ubuntu 系统

  • 安装高速缓存服务
1
$ apt install memcached python-memcache
  • 配置高速缓存服务
1
$ vim /etc/memcached.conf
1
2
# 文件内容
-l <Controller 节点的 IP 地址>
  • 重启高速缓存服务
1
$ service memcached restart

CentOS 系统

  • 安装高速缓存服务
1
$ yum install memcached python-memcached
  • 编辑 memcached 配置,将服务配置为使用控制器节点 IP 地址,方便其他节点通过网络进行访问
1
$ vim /etc/sysconfig/memcached
1
2
# 修改 OPTIONS 为如下
OPTIONS="-l 127.0.0.1,::1,controller"
  • 启动高速缓存服务并设置开机自启
1
2
3
4
# 设置随系统开机自启
$ systemctl enable memcached.service
# 启动高速缓存服务
$ systemctl start memcached.service

Etcd 服务

Ubuntu 系统

  • 安装 Etcd 服务
1
$ apt install etcd
  • 配置 Etcd 服务,将 ETCD_INITIAL_CLUSTER, ETCD_INITIAL_ADVERTISE_PEER_URLS, ETCD_ADVERTISE_CLIENT_URLS, ETCD_LISTEN_CLIENT_URLS 中的 IP 更换为控制节点的 IP
1
$ vim /etc/default/etcd
1
2
3
4
5
6
7
8
9
ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://<Controller 节点的 IP 地址>:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://<Controller 节点的 IP 地址>:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://<Controller 节点的 IP 地址>:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://<Controller 节点的 IP 地址>:2379"
  • 启动 Etcd 服务并设置开机自启
1
2
3
4
# 设置随系统开机自启
$ systemctl enable etcd
# 启动 Etcd 服务
$ systemctl start etcd

CentOS 系统

  • 安装 Etcd 服务
1
$ yum install etcd
  • 配置 Etcd 服务,将 ETCD_INITIAL_CLUSTER, ETCD_INITIAL_ADVERTISE_PEER_URLS, ETCD_ADVERTISE_CLIENT_URLS, ETCD_LISTEN_CLIENT_URLS 中的 IP 更换为控制节点的 IP
1
$ vim /etc/etcd/etcd.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://<Controller 节点的 IP 地址>:2380"
ETCD_LISTEN_CLIENT_URLS="http://<Controller 节点的 IP 地址>:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://<Controller 节点的 IP 地址>:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://<Controller 节点的 IP 地址>:2379"
ETCD_INITIAL_CLUSTER="controller=http://<Controller 节点的 IP 地址>:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
  • 启动 Etcd 服务并设置开机自启
1
2
3
4
# 设置随系统开机自启
$ systemctl enable etcd
# 启动 Etcd 服务
$ systemctl start etcd

参考链接