【版本】
当前版本号v20240318
版本 | 修改说明 |
---|---|
v20240318 | 增加修改IP的步骤说明 |
v20240314 | 新增日志查看说明和命令结果展示 |
v20240310 | 增加了查看进程状态脚本,修正了memcached启动失败的问题 |
v20240304 | 增加了ping步骤的说明,增加chrony安装说明,修改了hosts修改说明 |
v20230701 | 文档基于 RockyLinux8 和 Openstack Yoga 开发 |
任务2.1 复制并配置计算节点
【任务目的】
- 掌握虚拟机的克隆和配置
- 掌握 Openstack 计算节点
【任务环境】
- 内存:至少4G
- 硬盘:至少空余40G
- 操作系统: 64位 Windows系统。
【任务资源】
- FinalShell
- RockyLinux 8 系统镜像
- VirtualBox 7 或 VMWare Workstation
【任务说明】
- 计算节点配置说明
项目 | 值 |
---|---|
主机名(hostname) | computer+你的学号后3位 |
IP地址 | 10.0.0.31 |
虚拟机内存建议 | 2G |
虚拟CPU核心数建议 | 2 |
【任务步骤】
复制模板机为计算节点
- 通过复制(克隆) Part1 的
openstack_tmpl
模板镜像,新创建一个计算节点镜像。
虚拟机名称命名为
Computer+你的学号后3位
。启动计算节点,并在 FinalShell 配置 root 用户进行登录。此处过程略。
设置 hostname 和 hosts
- 设置计算节点主机名,注意替换学号。例如你的学号是221,则主机名为
computer221
。
hostnamectl set-hostname computer+你的学号后3位
- 输出hostname 查看是否修改成功。
hostname
- 修改计算节点IP为10.0.0.31。(VirtualBox 的默认网卡名位enp0s3,如果使用VMWare,网卡默认名一般为ens33)
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
IPADDR=10.0.0.31
- 修改完以后重启网络管理器
systemctl restart NetworkManager
使用命令
ip a
可以查看到网卡名称
重启计算节点,并使用 root 用户进行SSH登录。
编辑hosts文件,在文件末增加以下代码,把节点名称映射到相应IP。注意替换学号。
vim /etc/hosts
10.0.0.11 controller+你的学号后3位
10.0.0.31 computer+你的学号后3位
- 验证 hosts 和 hostname 配置是否正确。注意:这一步需要完成任务2.2,并启动控制节点的情况下,才能正常连通。
ping controller+你的学号后3位 -c 4
- 正常应该返回类似以下内容
64 bytes from controller999 (10.0.0.11): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from controller999 (10.0.0.11): icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from controller999 (10.0.0.11): icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from controller999 (10.0.0.11): icmp_seq=4 ttl=64 time=0.050 ms
设置时间同步服务 chrony
- 打开时间同步配置文件,在文件最后增加以下代码,保存退出。
vim /etc/chrony.conf
server 10.0.0.11 iburst
注意:如果打开该文件为空,可能你未安装chrony。需要先把
/etc/chrony.conf
文件删除,运行dnf install chrony -y
安装chrony,再进行配置。
- 重启时间同步服务
systemctl restart chronyd
计算节点验证
重启
计算节点
虚拟机。增加一个脚本用于查看
计算节点
的 OpenStack 进程状态。
vim /usr/local/bin/opst-proc-show.sh
- 输入以下脚本内容
#!/usr/bin/env bash
systemctl -a |grep -E "UNIT|chronyd|memcached|rabbitmq|mariadb|glance|httpd\.s|etcd|nova|neutron|libvirtd\.ser"
- 增加脚本执行权限。
chmod u+x /usr/local/bin/opst-proc-show.sh
- 在
计算节点
上执行脚本命令。查看以下服务是否是 active 的状态,注意是 active,不是 activing。关于服务的状态可以查看 系统服务状态解释
opst-proc-show.sh
任务2.2 复制并配置控制节点
【任务目的】
- 掌握虚拟机的克隆和配置
- 掌握 Openstack 控制节点的配置
【任务环境】
- 内存:至少4G
- 硬盘:至少空余40G
- 操作系统: 64位 Windows系统。
【任务资源】
- FinalShell
- RockyLinux 8 系统镜像
- VirtualBox 7 或 VMWare Workstation
【任务说明】
- 控制节点配置说明
项目 | 值 |
---|---|
主机名(hostname) | controller+你的学号后3位 |
IP地址 | 10.0.0.11 |
虚拟机内存建议 | 4G或以上 |
虚拟CPU核心数建议 | 2 |
【任务步骤】
复制模板机为控制节点
- 复制 Part1 制作模板镜像,新创建一个控制节点镜像。
设置 hostname 和 hosts
- 启动控制节点,并使用 root 用户进行登录。设置控制节点主机名,注意替换学号(不符合要求不给分)。
hostnamectl set-hostname controller+你的学号后3位
- 输出hostname 查看是否修改成功。
hostname
- 重启控制节点。
reboot
- 修改计算节点IP为10.0.0.11。(VirtualBox 的默认网卡名位enp0s3,如果使用VMWare,网卡默认名一般为ens33)
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
IPADDR=10.0.0.11
- 编辑hosts文件,在文件末增加以下代码,把节点名称映射到相应IP。注意替换学号。
vim /etc/hosts
10.0.0.11 controller+你的学号后3位
10.0.0.31 computer+你的学号后3位
- 验证 hosts 和 hostname 配置是否正确。
ping controller+你的学号后3位 -c 4
- 正常应该返回类似以下内容
64 bytes from controller999 (10.0.0.11): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from controller999 (10.0.0.11): icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from controller999 (10.0.0.11): icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from controller999 (10.0.0.11): icmp_seq=4 ttl=64 time=0.050 ms
ping computer+你的学号后3位 -c 4
- 正常应该返回类似以下内容
64 bytes from computer999 (10.0.0.31): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from computer999 (10.0.0.31): icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from computer999 (10.0.0.31): icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from computer999 (10.0.0.31): icmp_seq=4 ttl=64 time=0.050 ms
设置时间同步
- 打开时间同步配置文件,大约在26行,修改 allow 相关代码,保存退出。
vim /etc/chrony.conf
# Allow NTP client access from local network.
allow 10/8
注意:如果打开该文件为空,可能你未安装chrony。需要先把
/etc/chrony.conf
文件删除,运行dnf install chrony -y
安装chrony,再进行配置。
- 重启
chronyd
进程
systemctl restart chronyd
systemctl enable chronyd
安装 Openstack 客户端和 openstack-selinux
- 安装 Openstack 客户端和 openstack-selinux
dnf install python3-openstackclient openstack-selinux -y
安装和设置 MariaDB
MariaDB 是非常流行的开源关系型数据库。 Openstack 各个组件都可以使用 MariaDB 来存储数据。
- 安装配置 MariaDB
dnf install mariadb mariadb-server python2-PyMySQL -y
- 修改 MariaDB 的配置。
echo '[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8' >/etc/my.cnf.d/openstack.cnf
- 设置 MariaDB 为开机启动
systemctl start mariadb
systemctl enable mariadb
- 开始 MariaDB 安全配置和初始化。
mysql_secure_installation
- 修改 MariaDB 的
root
用户密码为123456
。
Enter current password for root (enter for none): ->回车
Set root password? [Y/n] -> 输入y
New password: -> 输入123456
Re-enter new password: -> 输入123456
Remove anonymous users? [Y/n] -> 输入y
Disallow root login remotely? [Y/n] -> 输入y
Remove test database and access to it? [Y/n] -> 输入y
Reload privilege tables now? [Y/n] -> 输入y
安装和设置 RabbitMQ
RabbitMQ 是 Advanced Message Queuing Protocol (AMQP,高级消息队列协议)开放标准的实现,是比较流行的开源消息代理组件。 Openstack 使用 RabbitMQ 作为底层组件来实现不同模块之间的远程调用(RPC)。
- 安装 RabbitMQ
dnf install rabbitmq-server -y
- 启动 RabbitMQ,并设置为开机启动
systemctl start rabbitmq-server.service
systemctl enable rabbitmq-server.service
- 新增 RabbitMQ 用户。用户名为
openstack
,密码为RABBIT_PASS
。
rabbitmqctl add_user openstack RABBIT_PASS
正常应该返回 Creating user “openstack” …
- 设置 RabbitMQ 用户 openstack 的权限。
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
正常应该返回 Setting permissions for user “openstack” in vhost “/” …
- RabbitMQ 启用
rabbitmq_management
插件。
rabbitmq-plugins enable rabbitmq_management
正常应该返回类似以下信息
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@controller999... started 6 plugins.
安装和设置 Memcached
Memcached 是一个基于内存的,开源的分布式对象缓存系统。 Openstack 会使用 Memcached 存储一些短期的对象,例如令牌等。
- 安装 Memcached
dnf install memcached python3-memcached -y
- 修改 Memcached 的配置。
echo 'PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 10.0.0.11 -U 0 -vv "'>/etc/sysconfig/memcached
echo 命令可以配合 > 来把引号内的内容,覆盖写入到指定文件。
- 修改 Memcached 的服务参数,避免开机时启动失败。
vim /usr/lib/systemd/system/memcached.service
- 选项
After=network.target
修改为After=network-online.target
- 重启 Memcached,并设置为开机启动。
systemctl restart memcached
systemctl enable memcached
- 查看 Memcached 进程是否为
Active
。
systemctl status memcached
安装和设置 etcd
etcd 是一个强一致性,分布式的键值对存储服务。
- 安装 etcd
dnf install etcd -y
- 配置 etcd
vim /etc/etcd/etcd.conf
- 修改以下选项
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_NAME="controller999"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_INITIAL_CLUSTER="controller999=http://10.0.0.11:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
注意这里配置文件前面的
#
号表示注释,要启用选项一定要去掉行首的#
符号。
- 设置开机启动。
systemctl enable etcd
systemctl start etcd
- 测试 etcd 存储功能。例如学号
001
对应的学生名字为zhangsan
,我们可以把这个键值对存储到 etcd。
etcdctl --endpoints="http://10.0.0.11:2379" set 001 zhangsan
- 正常会返回
zhangsan
- 测试 etcd 读取功能。读取学号
001
。
etcdctl --endpoints="http://10.0.0.11:2379" get 001
- 正常会返回
zhangsan
控制节点验证
重启
控制节点
虚拟机。增加一个脚本用于查看
计算节点
的 OpenStack 进程状态。
vim /usr/local/bin/opst-proc-show.sh
- 输入以下脚本内容
#!/usr/bin/env bash
systemctl -a |grep -E "UNIT|chronyd|memcached|rabbitmq|mariadb|glance|httpd\.s|etcd|nova|neutron|libvirtd\.ser"
- 增加脚本执行权限。
chmod u+x /usr/local/bin/opst-proc-show.sh
- 在
控制节点
执行脚本,查看以下服务是否是 active 的状态。
opst-proc-show.sh
- 正常应该出现5个服务 active。注意不是
activing
,activing
表示服务正在激活中。
UNIT LOAD ACTIVE SUB DESCRIPTION
chronyd.service loaded active running NTP client/server
etcd.service loaded active running Etcd Server
mariadb.service loaded active running MariaDB 10.3 database server
memcached.service loaded active running memcached daemon
rabbitmq-server.service loaded active running RabbitMQ broker
如果某个服务状态不是
active
,可以使用命令systemctl restart 服务名称
来尝试重启。
【常见问题FAQ】
【后台进程(服务)说明】
如果某个后台进程(服务)无法启动,需要查看日志,可以使用以下命令,日志文件路径在下表有描述。
tail -100 日志文件
服务名称 | 日志目录 | 说明 |
---|---|---|
chronyd | /var/log/chrony | chrony是网络时间协议(NTP)的实现。它可以替代ntpd,实现服务器 |
etcd | Etcd是一个强一致性,分布式的键值对存储服务。 | |
rabbitmq-server | /var/log/rabbitmq | RabbitMQ 是高级消息队列协议(AMQP)开放标准的实现,常用于服务器之间的消息通讯,Openstack 使用 RabbitMQ 作为底层组件来实现不同模块之间的远程调用(RPC)。 |
mariadb | /var/log/mariadb | MariaDB 是非常流行的开源关系型数据库,它能够兼容MySQL |
memcached | /var/log/messages | Memcached 是一个基于内存的,开源的分布式对象缓存系统。 Openstack 会使用 Memcached 存储一些短期的对象,例如令牌等。 |
思考和探索
- 为什么服务器的时间需要同步?
- 上面提到的一些组件,包括chrony、MariaDB、RabbitMQ、Memcached、etcd,你都知道他们的主要功能吗?