Part 2 -配置计算节点和控制节点

2023-07-01
7分钟阅读时长

【版本】

当前版本号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

【任务步骤】

复制模板机为计算节点

  1. 通过复制(克隆) Part1 的openstack_tmpl模板镜像,新创建一个计算节点镜像。
复制要确保虚拟机处于关闭的状态

  1. 虚拟机名称命名为Computer+你的学号后3位

  2. 启动计算节点,并在 FinalShell 配置 root 用户进行登录。此处过程略。

设置 hostname 和 hosts

  1. 设置计算节点主机名,注意替换学号。例如你的学号是221,则主机名为computer221
hostnamectl set-hostname computer+你的学号后3位
  1. 输出hostname 查看是否修改成功。
hostname
  1. 修改计算节点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可以查看到网卡名称

  1. 重启计算节点,并使用 root 用户进行SSH登录。

  2. 编辑hosts文件,在文件末增加以下代码,把节点名称映射到相应IP。注意替换学号。

这里注意是在文件末新起一行,增加内容,不要删除原有内容!
vim /etc/hosts
10.0.0.11 controller+你的学号后3位
10.0.0.31 computer+你的学号后3位

  1. 验证 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

  1. 打开时间同步配置文件,在文件最后增加以下代码,保存退出。
vim /etc/chrony.conf
server 10.0.0.11 iburst

注意:如果打开该文件为空,可能你未安装chrony。需要先把/etc/chrony.conf文件删除,运行dnf install chrony -y安装chrony,再进行配置。

  1. 重启时间同步服务
systemctl restart chronyd

计算节点验证

  1. 重启计算节点虚拟机。

  2. 增加一个脚本用于查看计算节点的 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"
  1. 增加脚本执行权限。
chmod u+x /usr/local/bin/opst-proc-show.sh
  1. 计算节点上执行脚本命令。查看以下服务是否是 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

【任务步骤】

复制模板机为控制节点

  1. 复制 Part1 制作模板镜像,新创建一个控制节点镜像。

  1. 虚拟机名称命名为Controller+你的学号后3位。参考以上步骤1步骤2

  2. 修改控制节点内存为2G(如果内存足够尽可能分配3G或以上)。

注意以下命令是在控制节点下执行!

设置 hostname 和 hosts

  1. 启动控制节点,并使用 root 用户进行登录。设置控制节点主机名,注意替换学号(不符合要求不给分)。
hostnamectl set-hostname controller+你的学号后3位
  1. 输出hostname 查看是否修改成功。
hostname
  1. 重启控制节点。
reboot
  1. 修改计算节点IP为10.0.0.11。(VirtualBox 的默认网卡名位enp0s3,如果使用VMWare,网卡默认名一般为ens33)
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
IPADDR=10.0.0.11

  1. 编辑hosts文件,在文件末增加以下代码,把节点名称映射到相应IP。注意替换学号。
vim /etc/hosts
10.0.0.11 controller+你的学号后3位
10.0.0.31 computer+你的学号后3位

  1. 验证 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

设置时间同步

  1. 打开时间同步配置文件,大约在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,再进行配置。

  1. 重启chronyd进程
systemctl restart chronyd
systemctl enable chronyd

安装 Openstack 客户端和 openstack-selinux

  1. 安装 Openstack 客户端和 openstack-selinux
dnf install python3-openstackclient openstack-selinux -y

安装和设置 MariaDB

MariaDB 是非常流行的开源关系型数据库。 Openstack 各个组件都可以使用 MariaDB 来存储数据。

  1. 安装配置 MariaDB
dnf install mariadb mariadb-server python2-PyMySQL -y
  1. 修改 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
  1. 设置 MariaDB 为开机启动
systemctl start mariadb
systemctl enable mariadb
  1. 开始 MariaDB 安全配置和初始化。
mysql_secure_installation
  1. 修改 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)。

  1. 安装 RabbitMQ
dnf install rabbitmq-server -y
  1. 启动 RabbitMQ,并设置为开机启动
systemctl start rabbitmq-server.service
systemctl enable rabbitmq-server.service
  1. 新增 RabbitMQ 用户。用户名为openstack,密码为RABBIT_PASS
rabbitmqctl add_user openstack RABBIT_PASS

正常应该返回 Creating user “openstack” …

  1. 设置 RabbitMQ 用户 openstack 的权限。
rabbitmqctl set_permissions openstack ".*" ".*" ".*"

正常应该返回 Setting permissions for user “openstack” in vhost “/” …

  1. 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 存储一些短期的对象,例如令牌等。

  1. 安装 Memcached
dnf install memcached python3-memcached -y
  1. 修改 Memcached 的配置。
echo 'PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 10.0.0.11 -U 0 -vv "'>/etc/sysconfig/memcached

echo 命令可以配合 > 来把引号内的内容,覆盖写入到指定文件。

  1. 修改 Memcached 的服务参数,避免开机时启动失败。
vim /usr/lib/systemd/system/memcached.service
  • 选项After=network.target修改为After=network-online.target

  1. 重启 Memcached,并设置为开机启动。
systemctl restart memcached
systemctl enable memcached
  1. 查看 Memcached 进程是否为Active
systemctl status memcached

安装和设置 etcd

etcd 是一个强一致性,分布式的键值对存储服务。

  1. 安装 etcd
dnf install etcd -y
  1. 配置 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"

注意这里配置文件前面的#号表示注释,要启用选项一定要去掉行首的#符号。

  1. 设置开机启动。
systemctl enable etcd
systemctl start etcd
  1. 测试 etcd 存储功能。例如学号001对应的学生名字为zhangsan,我们可以把这个键值对存储到 etcd。
etcdctl --endpoints="http://10.0.0.11:2379" set 001 zhangsan
  • 正常会返回zhangsan
  1. 测试 etcd 读取功能。读取学号001
etcdctl --endpoints="http://10.0.0.11:2379" get 001
  • 正常会返回zhangsan

控制节点验证

  1. 重启控制节点虚拟机。

  2. 增加一个脚本用于查看计算节点的 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"
  1. 增加脚本执行权限。
chmod u+x /usr/local/bin/opst-proc-show.sh
  1. 控制节点执行脚本,查看以下服务是否是 active 的状态。
opst-proc-show.sh
  • 正常应该出现5个服务 active。注意不是activingactiving表示服务正在激活中。
  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】

常见问题FAQ

【后台进程(服务)说明】

如果某个后台进程(服务)无法启动,需要查看日志,可以使用以下命令,日志文件路径在下表有描述。

tail -100 日志文件
服务名称日志目录说明
chronyd/var/log/chronychrony是网络时间协议(NTP)的实现。它可以替代ntpd,实现服务器
etcdEtcd是一个强一致性,分布式的键值对存储服务。
rabbitmq-server/var/log/rabbitmqRabbitMQ 是高级消息队列协议(AMQP)开放标准的实现,常用于服务器之间的消息通讯,Openstack 使用 RabbitMQ 作为底层组件来实现不同模块之间的远程调用(RPC)。
mariadb/var/log/mariadbMariaDB 是非常流行的开源关系型数据库,它能够兼容MySQL
memcached/var/log/messagesMemcached 是一个基于内存的,开源的分布式对象缓存系统。 Openstack 会使用 Memcached 存储一些短期的对象,例如令牌等。

思考和探索

  1. 为什么服务器的时间需要同步?
  2. 上面提到的一些组件,包括chrony、MariaDB、RabbitMQ、Memcached、etcd,你都知道他们的主要功能吗?

扫码或长按识别访问