Part 5 - 安装 Nova 计算服务

2021-03-03
7分钟阅读时长

【版本】

当前版本号v20230313

版本修改说明
v20230313增加后台进程(服务)说明
v20230307修正一个命令 openstack service list
v20220309增加提醒service和endpoint不能重复创建
v20220208修正相关步骤
v20210308修改计算节点步骤4 nova.conf 的配置
v20210305增加环境变量的运行命令;修正一些拼写错误
v20210303初始化版本

【实验名称】

云计算部署实战 Part 5 - 安装 nova 计算服务

【实验目的】

  • 掌握搭建 Openstack Nova 组件

【实验环境】

  • 内存:至少4G
  • 硬盘:至少空余40G
  • 操作系统: 64位 Windows系统。

【实验资源】

  • FinalShell
  • CentOS 7 系统镜像
  • VirtualBox
  • Openstack 源

【实验原理】

  • nova-api:接受并响应所有的计算服务请求,管理虚拟机(云主机)生命周期
  • nova-compute(多个):真正管理虚拟机
  • nova-scheduler:nova调度器(挑选出最合适的nova-compute来创建虚机)
  • nova-conductor:帮助nova-compute代理修改数据库中虚拟机的状态
  • nova-network:早期openstack版本管理虚拟机的网络(已弃用,已被 neutron 取代)
  • nova-consoleauth和nova-novncproxy:web版的vnc来直接操作云主机
  • novncproxy:web版 vnc客户端
  • nova-api-metadata:接受来自虚拟机发送的元数据请求

【实验步骤】

控制节点实验步骤

  1. 使用Root用户登录控制节点(Controller)。输出 Hostname ,确认所在节点时控制节点。
hostname

结果:

controller+你的学号后3位
注意以下步骤在控制节点(Controller)上执行!

控制节点创建 nova 相关库

  1. 使用 root 用户登录 MariaDB 数据库,密码为123456。创建 nova_apinova库,nova 用户和授权。
mysql -u root -p
CREATE DATABASE nova_api;
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
exit;

控制节点创建 nova 用户

  1. 在 Keystone 创建系统用户 nova,并关联 admin 角色
source /etc/keystone/admin-openrc
openstack user create --domain default \
  --password NOVA_PASS nova
openstack role add --project service --user nova admin

控制节点创建 nova service 和 endpoint

  1. 在 Keystone 上创建 Nova Service 和 Endpoint。注意替换你的学号
source /etc/keystone/admin-openrc
openstack service create --name nova \
  --description "OpenStack Compute" compute
openstack endpoint create --region RegionOne \
  compute public http://controller+你学号后3位:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
  compute internal http://controller+你学号后3位:8774/v2.1/%\(tenant_id\)s  
openstack endpoint create --region RegionOne \
  compute admin http://controller+你学号后3位:8774/v2.1/%\(tenant_id\)s

注意这里的 service 不能重复创建,运行命令openstack service list应该只能查看到1个 Nova 的 service,如果有多个可以用 openstack service delete '替换为service ID'命令删除

注意这里 endpoint 不能重复创建,运行命令openstack endpoint list应该只能查看到3个 Nova 的 endpoint,如果有多个可以用 openstack endpoint delete '替换为endpoint ID'命令删除

控制节点安装 nova 相关软件并进行配置

  1. 安装 Nova 服务相应软件包
yum install openstack-nova-api openstack-nova-conductor \
  openstack-nova-console openstack-nova-novncproxy \
  openstack-nova-scheduler -y
  1. 备份 Nova 的配置文件。
cp /etc/nova/nova.conf{,.bak}
grep '^[a-Z\[]' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
  1. 修改相应服务的配置文件。注意替换你的学号。
openstack-config --set /etc/nova/nova.conf  DEFAULT enabled_apis  osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf  DEFAULT rpc_backend  rabbit
openstack-config --set /etc/nova/nova.conf  DEFAULT auth_strategy  keystone
openstack-config --set /etc/nova/nova.conf  DEFAULT my_ip  10.0.0.11
openstack-config --set /etc/nova/nova.conf  DEFAULT use_neutron  True
openstack-config --set /etc/nova/nova.conf  DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf  api_database connection  mysql+pymysql://nova:NOVA_DBPASS@controller+你学号后3位/nova_api
openstack-config --set /etc/nova/nova.conf  database  connection  mysql+pymysql://nova:NOVA_DBPASS@controller+你学号后3位/nova
openstack-config --set /etc/nova/nova.conf  glance api_servers  http://controller+你学号后3位:9292
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  auth_uri  http://controller+你学号后3位:5000
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  auth_url  http://controller+你学号后3位:35357
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  memcached_servers  controller+你学号后3位:11211
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  auth_type  password
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  project_domain_name  default
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  user_domain_name  default
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  project_name  service
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  username  nova
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  password  NOVA_PASS
openstack-config --set /etc/nova/nova.conf  oslo_concurrency lock_path  /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf  oslo_messaging_rabbit   rabbit_host  controller+你学号后3位
openstack-config --set /etc/nova/nova.conf  oslo_messaging_rabbit   rabbit_userid  openstack
openstack-config --set /etc/nova/nova.conf  oslo_messaging_rabbit   rabbit_password  RABBIT_PASS
openstack-config --set /etc/nova/nova.conf  vnc vncserver_listen  '$my_ip'
openstack-config --set /etc/nova/nova.conf  vnc vncserver_proxyclient_address  '$my_ip'
  1. 同步数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova

控制节点检查 nova 数据库

  1. 进入 MariaDB 查看是否有表格出现。密码为NOVA_DBPASS。如果有则表示数据库同步成功。
mysql -u nova -p
use nova;
show tables;
use nova_api;
show tables;
  1. 退出 MariaDB 。
exit

控制节点检查 nova 服务(守护进程)状态

  1. 启动 Nova 服务,并设置为开机启动。
systemctl enable openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl restart openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service
  1. 查看 Nova 服务状态是否已启用(active)。
systemctl status openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service
  1. 验证 Compute 服务是否和步骤4生成的一致。
openstack compute service list

计算节点实验步骤

  1. 使用Root用户登录计算节点(Compute)。输出 Hostname ,确认所在节点是计算节点。
hostname

结果:

compute+你的学号后3位
注意以下步骤在计算节点(Computer)上执行!
  1. 安装 Nova 和 Openstack-utils。
yum install openstack-nova-compute -y
yum install openstack-utils.noarch -y
  1. 备份 Nova 的配置文件。
cp /etc/nova/nova.conf{,.bak}
grep '^[a-Z\[]' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
  1. 修改相应服务的配置文件。注意替换你的学号。
openstack-config --set /etc/nova/nova.conf  DEFAULT enabled_apis  osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf  DEFAULT rpc_backend  rabbit
openstack-config --set /etc/nova/nova.conf  DEFAULT auth_strategy  keystone
openstack-config --set /etc/nova/nova.conf  DEFAULT my_ip  10.0.0.31
openstack-config --set /etc/nova/nova.conf  DEFAULT use_neutron  True
openstack-config --set /etc/nova/nova.conf  DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf  glance api_servers  http://controller+你的学号后3位:9292
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  auth_uri  http://controller+你的学号后3位:5000
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  auth_url  http://controller+你的学号后3位:35357
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  memcached_servers  controller+你的学号后3位:11211
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  auth_type  password
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  project_domain_name  default
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  user_domain_name  default
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  project_name  service
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  username  nova
openstack-config --set /etc/nova/nova.conf  keystone_authtoken  password  NOVA_PASS
openstack-config --set /etc/nova/nova.conf  oslo_concurrency lock_path  /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf  oslo_messaging_rabbit   rabbit_host  controller+你的学号后3位
openstack-config --set /etc/nova/nova.conf  oslo_messaging_rabbit   rabbit_userid  openstack
openstack-config --set /etc/nova/nova.conf  oslo_messaging_rabbit   rabbit_password  RABBIT_PASS
openstack-config --set /etc/nova/nova.conf  vnc enabled  True
openstack-config --set /etc/nova/nova.conf  vnc vncserver_listen  0.0.0.0
openstack-config --set /etc/nova/nova.conf  vnc vncserver_proxyclient_address  '$my_ip'
openstack-config --set /etc/nova/nova.conf  vnc novncproxy_base_url  http://10.0.0.11:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf  libvirt cpu_mode none
openstack-config --set /etc/nova/nova.conf  libvirt virt_type qemu
  1. 启动 libvirtd 服务,并设置为开机启动。此处需要启动你的控制节点,否则无法正常启动openstack-nova-compute.service
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service

控制节点验证

  1. 查看以下服务是否是 active 的状态,正常应该出现12个服务 active。
systemctl -a |grep -E "UNIT|chronyd|memcached|rabbitmq|mariadb|glance|httpd|nova"
  1. 运行以下命令,检查openstack-nova-compute服务是否运行在控制节点,如果此服务 active,说明你实验环境有错,把计算节点的命令运行在了控制节点上。
systemctl status openstack-nova-compute
  1. 验证nova.conf配置文件里面 controller 出现的次数。注意替换为你的个人学号。
grep -o controller+你学号后3位 /etc/nova/nova.conf|wc -l

验证结果:

7
  1. 查询 nova service,表里应该只有一行记录。
source /etc/keystone/admin-openrc
openstack service list |grep -E "ID|nova"

类似结果:

| ID                               | Name     | Type     |
| 58dd2fdf5e624592919302df11e8b74f | nova     | compute  |
  1. 查询 nova endpoint,表里应该有3行记录。
source /etc/keystone/admin-openrc
openstack endpoint list |grep -E "ID|nova"

类似结果:

| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                                           |
| 4350cc63081047e495541008324a844c | RegionOne | nova         | compute      | True    | internal  | http://controller9999:8774/v2.1/%(tenant_id)s |
| 56211f55db4f4d928660e8415bc85efb | RegionOne | nova         | compute      | True    | public    | http://controller9999:8774/v2.1/%(tenant_id)s |
| 5ae3985f807c41359d8b7d2901a06066 | RegionOne | nova         | compute      | True    | admin     | http://controller9999:8774/v2.1/%(tenant_id)s |
  1. 查询 nova user,表里应该有1行记录。
source /etc/keystone/admin-openrc
openstack user list |grep -E "ID|nova"

类似结果:

| ID                               | Name    |
| c5a480d3f8ba41458926135609074b3c | nova    |

计算节点验证

  1. 查看以下服务是否是 active 的状态,正常应该出现3个服务 active。
systemctl -a |grep -E "UNIT|chronyd|nova|libvirtd"
  1. 验证nova.conf配置文件里面 controller 出现的次数。注意替换为你的个人学号。
grep -o controller+你学号后3位 /etc/nova/nova.conf|wc -l

验证结果:

5

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

服务名称日志目录/路径说明
chronyd/var/log/chronychrony是网络时间协议(NTP)的实现。它可以替代ntpd,实现服务器
rabbitmq-server/var/log/rabbitmqRabbitMQ 是高级消息队列协议(AMQP)开放标准的实现,常用于服务器之间的消息通讯,Openstack 使用 RabbitMQ 作为底层组件来实现不同模块之间的远程调用(RPC)。
mariadb/var/log/mariadbMariaDB 是非常流行的开源关系型数据库,它能够兼容MySQL
memcached/var/log/messagesMemcached 是一个基于内存的,开源的分布式对象缓存系统。 Openstack 会使用 Memcached 存储一些短期的对象,例如令牌等。
httpd/var/log/httpdApache Web 服务器,对外提供 HTTP 等协议的 Web 访问服务
openstack-glance-api/var/log/glance/api.log提供Glance API调用服务,对应配置文件/etc/glance/glance-api.conf,进程端口9292
openstack-glance-registry/var/log/glance/registry.log提供镜像(images)注册等服务,对应配置文件 /etc/glance/glance-registry.conf,进程端口9191
openstack-nova-api/var/log/nova-api.log提供Nova API 调用服务,对应配置文件 /etc/nova/nova.conf
openstack-nova-consoleauth/var/log/nova-consoleauth.logNova控制台认证服务,对应配置文件 /etc/nova/nova.conf
openstack-nova-scheduler/var/log/nova-scheduler.logNova调度器,根据调度算法从可用资源池中恰当地选择计算节点,对应配置文件 /etc/nova/nova.conf
openstack-nova-conductor.service/var/log/nova-conductor.logNova指挥器,负责数据库的访问,对应配置文件 /etc/nova/nova.conf
openstack-nova-novncproxy.service/var/log/nova-novncproxy.logNova 提供 noVNC 远程连接协议的代理服务,对应配置文件 /etc/nova/nova.conf
openstack-nova-compute.service/var/log/nova-compute.logNova计算节点进程,对应配置文件 /etc/nova/nova.conf

【思考和探索】

  1. systemctl 启动、停止、启用、禁用、查看状态的命令分别是?