Nova内部组件详解

一 nova架构介绍——简单架构
1 简单架构
单点服务
无负载均衡
无高可靠
2 复杂架构
负载均衡
高可用

二 nova-api服务
1 接收和响应用户的API请求
api接口调用与命令行调用相区别
举例:查询虚拟机列表的两种调用方式:
API接口:curl –H “X-Auth-Token:” http://192.134.3.2:8774/v2//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 | -               |
+------------------+-------------+----------+---------+-------+----------------------------+-----------------+


你可能感兴趣的:(Openstack)