建设官方网站企业网站宜昌市水利建设工程协会网站
web/
2025/9/29 21:49:30/
文章来源:
建设官方网站企业网站,宜昌市水利建设工程协会网站,wordpress 建站公司,建站素材图片一、nova介绍#xff1a; Nova 是 OpenStack 最核心的服务#xff0c;负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统#xff0c;虚拟机生命周期管理也就是通过 Nova 来实现的。用途与功能 :1) 实例生命周期管理2) 管理计算资源3) 网络和认证管理4)REST… 一、nova介绍 Nova 是 OpenStack 最核心的服务负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统虚拟机生命周期管理也就是通过 Nova 来实现的。 用途与功能 : 1) 实例生命周期管理 2) 管理计算资源 3) 网络和认证管理 4)REST 风格的 API 5) 异步的一致性通信 6)Hypervisor 透明支持Xen,XenServer/XCP,KVM, UML, VMware vSphere and Hyper-V 在上图中可以看到Nova 处于 Openstak 架构的中心其他组件都为 Nova 提供支持 Glance 为 VM 提供 image Cinder 和 Swift 分别为 VM 提供块存储和对象存储 Neutron 为 VM 提供网络连接。 二. Nova 架构 Nova 的架构比较复杂包含很多组件。 这些组件以子服务后台 deamon 进程的形式运行可以分为以下几类 1.API nova-api 是整个 Nova 组件的门户接收和响应客户的 API 调用。所有对 Nova 的请求都首先由 nova-api 处理。nova-api 向外界暴露若干 HTTP REST API 接口 在 keystone 中我们可以查询 nova-api 的 endponits。 客户端就可以将请求发送到 endponits 指定的地址向 nova-api 请求操作。 当然作为最终用户的我们不会直接发送 Rest AP I请求。 OpenStack CLIDashboard 和其他需要跟 Nova 交换的组件会使用这些 API。 Nova-api 对接收到的 HTTP API 请求会做如下处理 1. 检查客户端传入的参数是否合法有效 2. 调用 Nova 其他子服务的处理客户端 HTTP 请求 3. 格式化 Nova 其他子服务返回的结果并返回给客户端 nova-api 接收哪些请求 简单的说只要是跟虚拟机生命周期相关的操作nova-api 都可以响应。 大部分操作都可以在 Dashboard 上找到。打开Instance管理界面 除了提供 OpenStack 自己的APInova-api 还支持 Amazon EC2 API。 也就是说如果客户以前使用 Amazon EC2并且用 EC2 的 API 开发了些工具来管理虚机那么如果现在要换成 OpenStack这些工具可以无缝迁移到 OpenStack因为 nova-api 兼容 EC2 API无需做任何修改。 2.Compute Core 1.nova-scheduler 虚机调度服务负责决定在哪个计算节点上运行虚机。创建 Instance 时用户会提出资源需求例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor 中用户只需要指定用哪个 flavor 就可以了。 可用的 flavor 在 System-Flavors 中管理。 下面介绍 nova-scheduler 是如何实现调度的。在 /etc/nova/nova.conf 中nova 通过 driverfilter_scheduler 这个参数来配置 nova-scheduler。 driverfilter_scheduler 1 1 driverfilter_scheduler Filter scheduler Filter scheduler 是 nova-scheduler 默认的调度器调度过程分为两步 1. 通过过滤器filter选择满足条件的计算节点运行 nova-compute 2. 通过权重计算weighting选择在最优权重值最大的计算节点上创建 Instance。 Nova 允许使用第三方 scheduler配置 scheduler_driver 即可。 这又一次体现了OpenStack的开放性。Scheduler 可以使用多个 filter 依次进行过滤过滤之后的节点再通过计算权重选出最适合的节点。2.nova-compute nova-compute 是管理虚机的核心服务在计算节点上运行。通过调用Hypervisor API实现节点上的 instance的生命周期管理。 OpenStack 对 instance 的操作最后都是交给 nova-compute 来完成的。 nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。 通过Drive1r架构支持多种Hypervisor Hyp 前面大家已经看到 Nova 由很多子服务组成我们也知道 OpenStack 是一个分布式系统可以部署到若干节点上那么接下来大家可能就会问Nova 的这些服务在物理上应该如何部署呢 对于 Nova这些服务会部署在两类节点上计算节点和控制节点。 计算节点上安装了 Hypervisor上面运行虚拟机。 由此可知 1. 只有 nova-compute 需要放在计算节点上。 2. 其他子服务则是放在控制节点上的。 下面我们可以看看实验环境的具体部署情况。 通过在计算节点和控制节点上运行 ps -elf | grep nova 来查看运行的 nova 子服务 计算节点compute只运行了nova-compute子服务 来源 http://learn.yunwei.edu/openstack-learn/nova.html ervisor是计算节点上跑的虚拟化管理程序虚机管理最底层的程序。 不同虚拟化技术提供自己的 Hypervisor。 常用的 Hypervisor 有 KVMXen VMWare 等。nova-compute 为这些 Hypervisor 定义了统一的接口Hypervisor 只需要实现这些接口就可以 Driver 的形式即插即用到 OpenStack 系统中。 下面是Nova Driver的架构示意图 3.nova—conductor nova-compute 经常需要更新数据库比如更新和获取虚机的状态。 出于安全性和伸缩性的考虑nova-compute 并不会直接访问数据库而是将这个任务委托给 nova-conductor。 3.Console Interface nova-console 用户可以通过多种方式访问虚机的控制台 nova-novncproxy 基于 Web 浏览器的 VNC 访问 nova-spicehtml5proxy 基于 HTML5 浏览器的 SPICE 访问 nova-xvpnvncproxy 基于 Java 客户端的 VNC 访问 nova-consoleauth 负责对访问虚机控制台请求提供 Token 认证 nova-cert 提供 x509 证书支持 4.Database Nova 会有一些数据需要存放到数据库中一般使用 MySQL。数据库安装在控制节点上。 Nova 使用命名为 “nova” 的数据库。 5.Message Queue 在前面我们了解到 Nova 包含众多的子服务这些子服务之间需要相互协调和通信。为解耦各个子服务Nova 通过 Message Queue 作为子服务的信息中转站。 所以在架构图上我们看到了子服务之间没有直接的连线是通过 Message Queue 联系的。 三.Nova 组件如何协同工作 1.Nova 物理部署方案 前面大家已经看到 Nova 由很多子服务组成我们也知道 OpenStack 是一个分布式系统可以部署到若干节点上那么接下来大家可能就会问Nova 的这些服务在物理上应该如何部署呢 对于 Nova这些服务会部署在两类节点上计算节点和控制节点。 计算节点上安装了 Hypervisor上面运行虚拟机。 由此可知 1. 只有 nova-compute 需要放在计算节点上。 2. 其他子服务则是放在控制节点上的。 下面我们可以看看实验环境的具体部署情况。 通过在计算节点和控制节点上运行 ps -elf | grep nova 来查看运行的 nova 子服务 计算节点compute只运行了nova-compute子服务 控制节点controller运行了若干nova-*子服务 RabbitMQ 和 MySQL 也是放在控制节点上的。可能细心的同学已经发现我们的控制节点上也运行了 nova-compute。 这实际上也就意味着 devstack-controller 既是一个控制节点同时也是一个计算节点也可以在上面运行虚机 这也向我们展示了 OpenStack 这种分布式架构部署上的灵活性 可以将所有服务都放在一台物理机上作为一个 All-in-One 的测试环境 也可以将服务部署在多台物理机上获得更好的性能和高可用。 另外也可以用 nova service-list 查看 nova-* 子服务都分布在哪些节点上 2.从虚机创建流程看 nova-* 子服务如何协同工作 客户可以是 OpenStack 最终用户也可以是其他程序向 APInova-api发送请求“帮我创建一个虚机” API 对请求做一些必要处理后向 MessagingRabbitMQ发送了一条消息“让 Scheduler 创建一个虚机” Schedulernova-scheduler从 Messaging 获取到 API 发给它的消息然后执行调度算法从若干计算节点中选出节点 A Scheduler 向 Messaging 发送了一条消息“在计算节点 A 上创建这个虚机” 计算节点 A 的 Computenova-compute从 Messaging 中获取到 Scheduler 发给它的消息然后在本节点的 Hypervisor 上启动虚机。 在虚机创建的过程中Compute 如果需要查询或更新数据库信息会通过 Messaging 向 Conductornova-conductor发送消息Conductor 负责数据库访问。 四.Nova的配置文件 [DEFAULT] my_ip172.16.254.63 use_neutron True firewall_driver nova.virt.firewall.NoopFirewallDriver enabled_apisosapi_compute,metadata transport_url rabbit://openstack:admincontroller [api] auth_strategy keystone [api_database] connection mysqlpymysql://nova:NOVA_DBPASScontroller/nova_api [barbican] [cache] [cells] [cinder] os_region_name RegionOne [cloudpipe] [conductor] [console] [consoleauth] [cors] [cors.subdomain] [crypto] [database] connection mysqlpymysql://nova:NOVA_DBPASScontroller/nova [ephemeral_storage_encryption] [filter_scheduler] [glance] api_servers http://controller:9292 [guestfs] [healthcheck] [hyperv] [image_file_url] [ironic] [key_manager] [keystone_authtoken] auth_uri http://controller:5000 auth_url http://controller:35357 memcached_servers controller:11211 auth_type password project_domain_name default user_domain_name default project_name service username nova password nova [libvirt] virt_typeqemu [matchmaker_redis] [metrics] [mks] [neutron] url http://controller:9696 auth_url http://controller:35357 auth_type password project_domain_name default user_domain_name default region_name RegionOne project_name service username neutron password neutron service_metadata_proxy true metadata_proxy_shared_secret METADATA_SECRET [notifications] [osapi_v21] [oslo_concurrency] lock_path/var/lib/nova/tmp [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_messaging_zmq] [oslo_middleware] [oslo_policy] [pci] [placement] os_region_name RegionOne auth_type password auth_url http://controller:35357/v3 project_name service project_domain_name Default username placement password placement user_domain_name Default [quota] [rdp] [remote_debug] [scheduler] [serial_console] [service_user] [spice] [ssl] [trusted_computing] [upgrade_levels] [vendordata_dynamic_auth] [vmware] [vnc] enabledtrue vncserver_listen$my_ip vncserver_proxyclient_address$my_ip novncproxy_base_url http://172.16.254.63:6080/vnc_auto.html [workarounds] [wsgi] [xenserver] [xvp] 五.Nova服务的搭建 1.建立Nova数据库 mysql -u root -p
MariaDB [(none)] CREATE DATABASE nova_api; # 建立nova_api库
MariaDB [(none)] CREATE DATABASE nova; #建立Nova数据库
MariaDB [(none)] CREATE DATABASE nova_cell0; # 建立安全认证的库
#用Nova库宣告权限
GRANT ALL PRIVILEGES ON nova_api.* TO novalocalhost \
IDENTIFIED BY NOVA_DBPASS;
MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_api.* TO nova% \IDENTIFIED BY NOVA_DBPASS;
MariaDB [(none)] GRANT ALL PRIVILEGES ON nova.* TO novalocalhost \IDENTIFIED BY NOVA_DBPASS;
MariaDB [(none)] GRANT ALL PRIVILEGES ON nova.* TO nova% \IDENTIFIED BY NOVA_DBPASS;MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_cell0.* TO novalocalhost \IDENTIFIED BY NOVA_DBPASS;
MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_cell0.* TO nova% \IDENTIFIED BY NOVA_DBPASS; x 1 mysql -u root -p 2 MariaDB [(none)] CREATE DATABASE nova_api; # 建立nova_api库 3 MariaDB [(none)] CREATE DATABASE nova; #建立Nova数据库 4 MariaDB [(none)] CREATE DATABASE nova_cell0; # 建立安全认证的库 5 #用Nova库宣告权限 6 GRANT ALL PRIVILEGES ON nova_api.* TO novalocalhost \ 7 IDENTIFIED BY NOVA_DBPASS; 8 MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_api.* TO nova% \ 9 IDENTIFIED BY NOVA_DBPASS; 10 MariaDB [(none)] GRANT ALL PRIVILEGES ON nova.* TO novalocalhost \ 11 IDENTIFIED BY NOVA_DBPASS; 12 MariaDB [(none)] GRANT ALL PRIVILEGES ON nova.* TO nova% \ 13 IDENTIFIED BY NOVA_DBPASS; 14 15 MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_cell0.* TO novalocalhost \ 16 IDENTIFIED BY NOVA_DBPASS; 17 MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_cell0.* TO nova% \ 18 IDENTIFIED BY NOVA_DBPASS; 2.宣告环境变量 source openrc 3. 创建Nova用户 openstack user create --domain default --password-prompt nova 4.添加管理员为Nova数据库 openstack role add --project service --user nova admin 5.建立Nova的服务 openstack service create --name nova \--description OpenStack Compute compute 1 openstack service create --name nova \ 2 --description OpenStack Compute compute 检查服务列表 openstack service list 6. 建立Nova的服务端点 openstack endpoint create --region RegionOne \ compute public http://controller:8774/v2.1 openstack endpoint create --region RegionOne \ compute internal http://controller:8774/v2.1 openstack endpoint create --region RegionOne \ compute admin http://controller:8774/v2.1 注意controller 替换成本机的主机名 7.建立user为placement的普通用户 openstack user create --domain default --password-prompt placement 8 把placement 也设为user 的管理员 openstack role add --project service --user placement admin 9 建立api 服务 openstack service create --name placement --description Placement API placement 10.宣告placement 的服务端点 openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778 11.安装服务 yum install openstack-nova-api openstack-nova-conductor \ openstack-nova-console openstack-nova-novncproxy \ openstack-nova-scheduler openstack-nova-placement-api 12 编辑/etc/nova/nova.conf 配置文件 建议 mv nova.conf nova.conf.bak 然后可以直接复制Nova的配置文件 vim noca.conf 加入Nova的配置文件 详情四 注意 my_ip 更改为自己的IP 末行模式%s/controller/yun/g 其中一些内容的含义 use_neutron ture 是否使用网络 firewall_dirver 防火墙的驱动 enabled-apis 是否打开apis transport_url rabbitmq的地址 [api] auth_strategy keystone 验证方式 [api_database] nova_api的数据库的地址 [cinder] 处在哪一个region域负责后端存储的 [database] nova的数据库的地址 [glance] api的地址 [keystone_authtoken] 认证的地址 memcached_servers缓存服务 auth_type password验证类型密码 project_domain_name default 项目的名字 user_domain_name default用户所在的域 project_name service 项目名称 [libvirt] virt_typeqemu 后台调用的虚拟化使用kvm做的写qemu也可能用kvm [neutron] service_metadata_proxy true 是否开启metadata源数据代理 metadata_proxy_shared_secret METADATA_SECRET 数据代理验证的密码 [vnc] vncserver_listen$my_ip 监听的地址 vncserver_proxyclient_address$my_ip 客户端的监听地址 novncproxy_base_url http://192.168.124.128:6080/vnc_auto.html 提供的服务地址 编辑http服务的配置文件 vim /etc/httpd/conf.d/00-nova-placement-api.conf 添加 Directory /usr/bin IfVersion 2.4 Require all granted /IfVersion IfVersion 2.4 Order allow,deny Allow from all /IfVersion /Directory 重启http服务 systemctl restart httpd 同步nova数据库 su -s /bin/sh -c nova-manage api_db sync nova 会弹出一些内容是正常情况 su -s /bin/sh -c nova-manage cell_v2 map_cell0 nova su -s /bin/sh -c nova-manage cell_v2 create_cell --namecell1 --verbose nova su -s /bin/sh -c nova-manage db sync nova 查看一下验证的名字 nova-manage cell_v2 list_cells 启动开机自启 systemctl enable openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service 启动服务 systemctl start openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service 查看状态 systemctl status openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service 如果状态出现 则查看一下nova服务的运行情况 nova service-list 我们看到状态是down说明服务没起来 查看日志 cd /var/log/nova/ vim nova-consoleauth.log 进去后看最后一条日志发现ERROR和AMQPLAIN两个关键词 查看AMQ相关 rabbitmqctl list_users 发现rabbitmq里边openstack用户没有了 重新添加用户 rabbitmqctl add_user openstack admin rabbitmqctl set_permissions openstack .* .* .* rabbitmqctl set_user_tags openstack administrator 重启服务 systemctl restart openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service 再查看一下状态 nova service-list 如果没有启动失败的情况则继续下边的步骤 安装openstack-nova-compute服务 yum install openstack-nova-compute 安装的时候会提示缺少y依赖 这时我们解压家目录的压缩包openstack_app.tar.gz cd openstack-ocata cd openstack-compute-yilai/ 本地安装 yum localinstall -y * 这时我们再安装openstack-nova-compute服务 yum install openstack-nova-compute 配置计算节点的配置文件 因为本次配置计算节点与控制节点在同一台虚拟机上 所以将不同于控制节点的计算节点的内容添加到控制节点的配置文件即可 [libvirt] virt_typeqemu 要先打开libvirtd服务然后再启动nova-conpute服务 systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service 计算节点只需要启动这两个服务 再查看一下服务列示 nova service-list 用openstack命令查看计算节点服务与nova service-list作用相同 openstack compute service list 查看一下nova用的hypervisor的类型 openstack hypervisor list 可以看到类型是qemu运行在192.168.124.128的节点上状态是开启的 wiz_tmp_tag idwiz-table-range-border contenteditablefalse styledisplay: none; 来自为知笔记(Wiz) 转载于:https://www.cnblogs.com/18513387476-com/p/e64a5d92260442ffc81f841393a9ac77.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84108.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!