一 nova架构介绍——简单架构
1 简单架构
单点服务
无负载均衡
无高可靠
2 复杂架构
负载均衡
高可用
二 nova-api服务
1 接收和响应用户的API请求
api接口调用与命令行调用相区别
举例:查询虚拟机列表的两种调用方式:
API接口:curl –H “X-Auth-Token:<Token ID>” http://192.134.3.2:8774/v2/<Tenant ID>/servers
命令行:nova list
可以这样的理解:命令行是对API接口的一种封装,最终调用还是Nova的API
2 服务启动脚本(devstack VS packstack)
Devstack:/usr/bin/nova-api
Packstack:/etc/init.d/openstack-nova-api
针对Devstack重启的方式:先kill对应服务的进程号,再运行启动脚本。
3 服务监听端口
有三个端口:8773,8774和8775
4 扩展型
服务入口是否会成为瓶颈,比如单个服务无法处理大量并发请求
ps aux|grep nova-api (devstack方式部署)
发现启动了13个nova-api进程,其中一个主进程,实际为12个nova-api服务进程。
启动多少个nova-api服务进程是由谁控制
Nova.conf中的默认配置(devstack方式部署)
Nova.conf中的默认配置(packstack方式部署)
devstack方式部署时nova.conf的自动生成
devstack/lib/nova中的函数create_nova_conf
三个配置项必须要>=1
思考:在packstack部署时,ec2_works和metadata_works都没有配置,前面可以看到ec2_worker2=24,那么此时有多少个nova-api服务进程?
三 nova-scheduler服务-调度器
1 虚拟机调度,即创建虚拟机时,根据物理机的资源使用情况,虚拟机应该被分配到哪台物理机上运行。
2 服务启动(devstack vs packstack)
针对devstack:/usr/bin/nova-scheduler –config-file /etc/nova/nova.conf
针对packstack:/etc/init.d/openstack-nova-scheduler start
3 监听端口
思考:为什么nova-scheduler没有固定的端口?
答:nova-scheduler只对内部组件提供服务,并不对外提供服务
4 调度算法,即选出最佳物理机算法,主要包括过滤算法和权重算法两个阶段。
目前支持的过滤算法(23种左右)
默认加载以下算法: RetryFilter、AvailablilityZoneFilter、RamFilter、ComputeFilter、ComputeCapabilitiesFilter、ImagePropertiesFilter、CoreFilter
5 常用过滤算法
RetryFilter
如果虚拟机调度失败,重新调度的次数(scheduler_max_attempts=3)
AvailablilityZoneFilter
是否支持虚拟机选择availability zone
RamFilter
选择能够满足虚拟机内存要求的物理机,如果不指定默认,不判断内存资源。
指定内存超分比率,ram_allocation_ratio=1.5
ComputeCapabilitiesFilter
选择具有某些特定属性的物理机。以namespace:key的格式来执行属性,比如AZ1:node1
ImagePropertiesFilter
根据镜像中指定的某一个属性(properties)来过滤物理机
Glance image-update img-uuid –peoperty architecture=arm –property hypervisor_type=qemu
以这个镜像创建虚拟机,只能选择体现结构为arm,hypervisor是qemu的主机
CoreFilter
选择哪些能够满足虚拟机cpu要求的那些物理机
如果不设置,单个虚拟机的核数可以超过物理机的核数
可以指定cpu超分比率,cpu_allocation_ratio=16
思考:如果一台4核的物理机,cpu_allocation_ratio=2,那么最大可以创建多少核的虚拟机
6 过滤算法图解
7 权重算法图解
8 权重算法
ram_weight_multiplier(内存权重系数)
  • 正数:选出内存最大的物理机->虚拟机在所有物理机上平铺(spreading)
  • 负数:选出内存最小的物理机->虚拟机在部分物理机上堆叠(stacking)
scheduler_host_subset_size
  • 如果有N个机器的优先级相同,则随机选择scheduler_host_subset_size个
  • scheduler_host_subset_size=1(默认)
scheduler_weight_classes(权重计算算法选择类)
  • RamWeigher:内存权重排序算法,默认算法
  • MetricsWeigher:自定义的权重排序算法

四 Nova-conductor——数据库访问代理
防止计算节点直接访问数据库
  • 计算节点相对不可行,高风险的
  • 负载均衡,可扩展性好
不能与nova-compute部署在同一节点上
如果不想使用nova-conductor,在nova.conf中增加配置项:
  • use_local=True
五 noVNC
1 noVNC由两个服务组成
  • nova-novncproxy
  • nova-consoleauth
2 nova-novncproxy的功能
将公网(public network)和私网(private network)隔离
  • vnc client运行在公网上,vnc server运行在私网上
  • Vnc proxy作为连接两者的桥梁
通过token对vnc client进行验证
可以同时支持多种vnc client
  • novnc,基于html5 websockets,Canvas和JavaScripts实现
  • Spice,redhat虚拟桌面技术
3 nova-consoleauth服务
用于进行token的验证
4 访问原理
nova-novncproxy监听6008端口
作为用户vnc访问的一道大门,处理用户的vnc访问请求。
5 Nova VNC服务流程图
6 noVNC访问原理
  • 一个用户试图从浏览器里面打开连接到虚拟机VNC Client
  • 浏览器向nova-api发送请求,要求返回vnc的url
  • nova-api调用nova-compute的get_vnc_console方法,要求返回连接VNC的信息
  • nova-compute调用libvirt的get_vnc_console函数
  • libvirt会通过解析虚拟机的配置文件/instance-0000001.xml获取VNC Server信息
  • libvirt将host,port等信息以json格式返回给nova-compute
  • nova-compute会随机生成一个UUID作为Token
  • nova-api会调用nova-consoleauth的authorize_console函数
  • nova-api将connect_info中的access url信息返回给浏览器
  • 当浏览器试图打开这个链接时,会将请求发给nova-novncproxy
  • nova-novncproxy调用nova-consoleauth的check_token函数
  • nova-consoleauth验证这个token,将这个instance对应的connect_info返回给nova-novncproxy
  • nova-nonvncproxy通过connect_info中的host,port等信息,连接compute节点上的VNC Server,从而开始了proxy的工作。
  • nova-compute将libvirt返回的信息以及配置文件中的信息综合成connect_info返回给nova-api
7 noVNC配置项
vncserver_proxyclient_address=10.0.10.1
vncserver_listen=0.0.0.0
vnc_enabled=true
novncproxy_base_url= http://10.0.10.1:6080/vnc_auto.html
例如: http://10.0.10.10/project/instances/tyruei-34323-sdfgfe-gfdfg-fgfdsgfd/
六 nova-cert服务
X509认证服务,仅用于调用openstack兼容EC2的API时候使用
七 nova-objectstore服务
Nova对象存储接口服务,通过此服务来访问swift和S3
八 nova-computer服务
所有计算节点要运行的服务
主要处理虚拟机相关的各种操作,虚拟机的创建,删除,挂起,重启等。
可以通过nova service-list来查看当前环境下的所有nova服务
[root@controller0 ~]# nova service-list
+------------------+-------------+----------+---------+-------+----------------------------+-----------------+
| Binary           | Host        | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+------------------+-------------+----------+---------+-------+----------------------------+-----------------+
| nova-consoleauth | controller0 | internal | enabled | up    | 2018-03-17T03:20:57.000000 | -               |
| nova-conductor   | controller0 | internal | enabled | up    | 2018-03-17T03:20:56.000000 | -               |
| nova-cert        | controller0 | internal | enabled | up    | 2018-03-17T03:20:56.000000 | -               |
| nova-scheduler   | controller0 | internal | enabled | up    | 2018-03-17T03:20:58.000000 | -               |
| nova-compute     | compute0    | nova     | enabled | up    | 2018-03-17T03:20:55.000000 | -               |
+------------------+-------------+----------+---------+-------+----------------------------+-----------------+

Nova内部组件详解相关推荐

  1. spring cloud 微服务的版本介绍与内部组件详解

    转载于:https://blog.51cto.com/14185725/2370375

  2. ReactNative ViewPageAndroid组件详解

    源码传送门 在我们开发Android的时候,ViewPage这个控件的使用频率还是很高的,最简单的就是制作引导页,应用程序的主界面等,在ReactNative开发中实现该功能的组件是ViewPageA ...

  3. Android Lifecycle 生命周期组件详解

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99695779 本文出自[赵彦军的博客] 一.Lifecycle简介 为什么要引进 ...

  4. Android应用开发—Intent组件详解

    转载自:Android中Intent组件详解 Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件. Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的 ...

  5. Android基础四大组件详解

    Android四大组件详解 博主接触Android开发将近一年,从最初的JavaSE开始,到Android基础,一直学的糊糊涂涂,最近想整理一番 android基础, 顺便把自己的学习开发经验分享给大 ...

  6. Android中的四大组件详解

    Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...

  7. Streamsets组件详解

    Streamsets优化详解 一.Origin类组件详解 二.Processor类组件详解 三.Destination类组件详解 四.Executor类组件使用详解 一.Origin类组件详解 Ama ...

  8. android 广播的权限,Android四大组件详解之BroadcastReceiver广播接收者

    Android四大组件详解---BroadcastReceicer广播接收者 广播有两个角色,一个是广播发送者,另一个是广播接收者. 广播按照类型分为两种,一种是全局广播,另一种是本地广播 全局广播: ...

  9. Android笔记——四大组件详解与总结

    android四大组件分别为activity.service.content provider.broadcast receiver. -------------------------------- ...

最新文章

  1. 谁是全球最顶级AI实验室?DeepMind、OpenAI和FAIR霸榜前三
  2. mongoDB的监控工具
  3. python提高办公效率-几个可以提高工作效率的Python内置小工具
  4. CVPR 2019 Oral | 华科开源效果超群的人体姿态迁移算法
  5. Android studio 升级指定dradle
  6. JAVA学习day06
  7. [翻译svg教程]Path元素 svg中最神奇的元素!
  8. Python mysql-表的创建,删除和更新
  9. IDL实现波段运算DOIT(一)
  10. C语言I博客作业02
  11. 关于adsl上网的问题
  12. 转:高手速成android开源项目【View篇】 .
  13. java棒棒糖和皮卡丘八音盒_KFC用玩具提前要走了压岁钱
  14. 天兔(Lepus 3.8)数据库监控系统部署
  15. google大数据三大论文-中文版-英文版
  16. 扫地阿姨看完都学会了!java全栈是什么意思
  17. 牛市最容易亏钱而熊市才是真正的开始
  18. Lattice原理及在通信中的应用 2 Packing, Covering, Quantization, Modulation
  19. 人类历史上第一个推荐系统
  20. java毕业生设计斗南基地鲜花网上销售管理系统计算机源码+系统+mysql+调试部署+lw

热门文章

  1. RuleEngineListener和RuleListener区别
  2. 「以代码作画」从数据角度剖析Art Blocks生成艺术
  3. 值得收藏!20个Python奇技淫巧,让你受益匪浅!
  4. JAVAEE开发------Linux上的web服务器配置(汤姆凯特)
  5. thinkcmf,thinksns,thinkphp,onethink三者是什么关系?
  6. ubuntu server + openbox
  7. [Java]Java工程师成神之路
  8. wifi reaver
  9. Openresty实现反向代理
  10. Adobe Illustrator作图