az: availability zone 可用区,在openstack内主要作为容灾使用
AZ没有数据表,,不在nova库中的service表,AZ这个信息可以被创建,这个az信息被放到aggregate中的metadata中,我们平时增删改az,可以通过nova aggregate去修改。
az在openstack中其实是nova-scheduler来决定的,当创建vm(虚机)的时候,会指定一个az, 然后schedule 会在这个az的范围内选一台适合的compute去创建。az是用户可见的,用户手动的来指定vm运行在哪个az上。
root@controller:~# nova boot --image image-id --flavor large --availability-zone zone-name
root@controller:~# nova availability-zone-list #查看现有的availability zone,默认有两个az,当新建了一个az,而没有主机加入,这命令执行完不会显示新建的az
internel: nova服务
nova: 默认计算节点az
root@controller:~# nova aggregate-details AZ#00
| Id | Name | Availability Zone |Hosts | Metadata |
+----+---------+-------------------+-------+---------------------------
| 1 | | | |'availability_zone=AZ#00' |
root@controller:~# nova aggregate-list
+----+---------+-------------------+
| Id | Name | Availability Zone |
+----+---------+-------------------+
root@controller:~# nova availability-zone-list
+----------------------------------+----------------------------------------+
| Name | Status |
+---------------------+--------------------+
root@controller:~# nova aggregate-add-host 2 compute # 将compute节点加入AZ#001(2为AZ id,通过nova aggregate-list 查的)
root@controller:~# nova aggregate-remove-host 2 compute # 将compute节点移出AZ#001(2为AZ id,通过nova aggregate-list 查的)
root@controller:~# nova help aggregate-create
usage: nova aggregate-create <name> [<availability-zone>]
Create a new aggregate with the specified details.
Positional arguments:
<name> Name of aggregate.
<availability-zone> The availability zone of the aggregate (optional).
root@controller:~#nova aggregate-create aggregate-name az-name #创建aggregate的时候会关联az;一般aggregate-name和az-name一样
comment:创建完aggregate后通过nova availability-zone-list不会显示新创建的az,因为没有主机添加到新的az;通过nova aggregate-list可以查到自己新建的az
主机一旦加到aggregate中,nova compute 会自动使用aggregate中的az信息,主机会自动关联az
root@controller: nova availability-zone-list
root@controller: nova service-list
上面两条命令的数据是一样的,nova availability-zone-list的信息是nova service-list重组的
schedule主要有两个步骤:通过过滤器filter去过滤出有哪些主机符合要求;通过权重weight去做个排序,选择一台主机
虚机调度服务,负责决定在哪个计算节点上运行虚机。创建 虚机时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor 中,用户只需要指定用哪个 flavor 就可以了
filters是在/etc/nova/nova.conf下的
scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,
RetryFilter 的作用是刷掉之前已经调度过的节点;eg,例如已经选出3台节点ABC,当最终选择A去操作的时候,执行中由于某种原因,A失败,重新过滤的时候,会把A去除;默认次数为3(nova.conf:scheduler_max_attempts=3)
AvailabilityZoneFilter,提高容灾性和提供隔离服务,可以将计算节点划分到不同的Availability Zone中,先选择az
RamFilter 将内存不满足要求的compute过滤掉
超过的程度是通过 nova.conf 中 ram_allocation_ratio 这个参数来控制的,默认值为 1.5
root@controller:~# cat /etc/nova/nova.conf | grep -v "^#\|^$" | grep ram_all
ram_allocation_ratio=1.0
其含义是:如果计算节点的内存有 20GB,OpenStack 则会认为它有 30GB(20*1.5)的内存。
DiskFilter 将不满足flavor磁盘需求的计算节点过滤掉(设置在nova.conf 中 disk_allocation_ratio)
CoreFilter 将不满足flavor vCPU需求的计算节点过滤掉(设置在nova.conf 中 cpu_allocation_ratio,默认值为 16)
cpu_allocation_ratio = 16.0
也就是说一个 4 vCPU 的计算节点,nova-scheduler 在调度时认为它有 64 个 vCPU。nova-scheduler 默认使用的 filter 并没有包含 CoreFilter
ComputeFilter 只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。
ComputeCapabilitiesFilter 根据计算节点的特性来筛选
例如有x86_64和ARM架构的,如果想将 Instance 指定部署到 x86_64架构的节点上,就可以用ComputeCapabilitiesFilter,应该在flavor中指定
ImagePropertiesFilter 根据所选 image 的属性来筛选匹配的计算节点。image也有 metadata,用于指定其属性。
root@controller:~# nova service-list
+-----+------------------+-------------------------------+----------+----------+-------+----------------------------+-----------------+
| Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+-----+------------------+-------------------------------+----------+----------+-------+----------------------------+-----------------+
| 1 | nova-cert | controller.domain.tld | internal | enabled | up | 2022-04-23T12:57:23.000000 | - |
这些信息可以去nova库中,services表中去查看--去控制节点登录数据库
Zone\Status\State在表中不存在
Status是指的如nova-compute这个服务是否可用,也就是说是否开启要往这个server调度
States:Up/Down,,这是nova-api去检查的
nova-compute stop/waiting----服务停掉之后,nova服务也是down
当systemctl status rebbitmq-server状态不正常的时候,也会down
当nova-compute所在的server关机,就可以看到Status为disable,并且nova-compute服务也停了,也变成down
当想使nova-compute变成disable,可以通过关闭(shutdown)所在的server,或者通过nova service-disable
nova service-disable compute-1 nova-compute --reason maintenance
Binary:二进制名; nova-cert -
nova-scheduler
nova-consoleauth
nova-conductor
mysql> describe services;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
| deleted_at | datetime | YES | | NULL | |
| id | int(11) | NO | | NULL | |
| host | varchar | YES | | NULL | |
| binary | varchar | YES | | NULL | |
| topic | varchar | YES | | NULL | |
| report_count | int(11) | NO | | NULL | |
| disabled | tinyint(1) | YES | | NULL | |
| deleted | int(11) | YES | | NULL | |
| disabled_reason | varchar | YES | | NULL | |
| last_seen_up | datetime | YES | | NULL | |
| forced_down | tinyint(1) | YES | | NULL | |
| version | int(11) | YES | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
nova-compute 经常需要更新数据库,比如更新和获取虚机的状态。 出于安全性和伸缩性的考虑,nova-compute 并不会直接访问数据库,而是将这个任务委托给 nova-conductor。
这样做有两个显著好处:
Nova 创建虚拟机(VM-instance)过程:
1、用户通过界面或命令行(CLI)通过RESTful API向keystone获取认证信息。
2、keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
3、用户在界面或命令行(CLI)通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
4、nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
5、keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
6、通过认证后nova-api和数据库通讯。
7、初始化新建虚拟机的数据库记录。
8、nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
9、nova-scheduler进程侦听消息队列,获取nova-api的请求。
10、nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
11、对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
12、nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
13、nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
14、nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
15、nova-conductor从消息队队列中拿到nova-compute请求消息。
16、nova-conductor根据消息查询虚拟机对应的信息。
17、nova-conductor从数据库中获得虚拟机对应信息。
18、nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19、nova-compute从对应的消息队列中获取虚拟机信息消息。
20、nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
21、glance-api向keystone认证token是否有效,并返回验证结果。
22、token验证通过,nova-compute获得虚拟机镜像信息(URL)。
23、nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
24、neutron-server向keystone认证token是否有效,并返回验证结果。
25、token验证通过,nova-compute获得虚拟机网络信息。
26、nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
27、cinder-api向keystone认证token是否有效,并返回验证结果。
28、token验证通过,nova-compute获得虚拟机持久化存储信息。
29、nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
简单描述nova-*各个子服务之间的协同工作流程
客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个虚机”
API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个虚机”
Scheduler(nova-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A
Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个虚机”
计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler 发给它的消息,然后在本节点的 Hypervisor 上启动虚机。
在虚机创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向 Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。
运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid
我正在开发一个包含大约10个不同功能组件的Sinatra应用程序。我们希望能够将这些组件混合并匹配到应用程序的单独实例中,完全从config.yaml文件配置,如下所示:components:-route:'/chunky'component_type:FoodListercomponent_settings:food_type:baconmax_items:400-route:'places/paris'component_type:Mappercomponent_settings:latitude:48.85387273165654longitude:2.340087890625-
我正在为需要有条件地设置cookie的Rails应用编写Rack中间件组件。我目前正在尝试设置cookie。通过谷歌搜索,这似乎应该可行:classRackAppdefinitialize(app)@app=appenddefcall(env)@status,@headers,@response=@app.call(env)@response.set_cookie("foo",{:value=>"bar",:path=>"/",:expires=>Time.now+24*60*60})[@status,@headers,@response]endend它不会给出错误,但也不会设置coo
我正在linux机器上学习rubyonrails并磨练我的VIM技能(skillz?)。当我在使用C++的时候开始使用VIM时,我有一个friend有一个很棒的vimfiles文件夹,里面有很多东西可以开始使用。从头开始,vim很棒,但感觉它还可以做得更好。我目前有:vim-rubybufferexplorerxml-edit(虽然我目前没有它可以处理erb文件)我知道这只是一些更有经验的vim/ruby开发人员所拥有的东西的皮毛(包括vim.rc文件中的一次性)。在某个地方是否有一个列表(或者我们可以创建一个)使ruby(和rails)编程更有趣所需的一堆标准vim配置?是否有一
前提:当我们要修改vant组件库中Tabbar图标大小的样式(原图标是字体图标,大小由font-size控制)。 字体图标字体大小由css变量(--van-tabbar-item-icon-size)控制, 1.插槽方法结论:当你想要自定义使用插槽时,插入自己的元素,那么可以直接在当前作用域直接修改元素的样式。自定义img{height:28px}传入图片,用height属性控制图片大小,达到与字体图标相同效果2.全局定义变量结论:全局定义一个变量,覆盖它默认变量的值定义变量缺点:全局修改。 :root{--van-tabbar-item-icon-size:30px!important;/
记个笔记以免遗忘,建议还是查看Element-UI提供的官方文档学习,自己摸索比较难受官方文档:Element-UI组件TableElement-UI官网提供了许多Table格式,这里以一个带有筛选器的表格为例表格的官网显示效果:直接将官方提供的示例代码贴入.vue文件中即可使用显示的数据是通过data()方法提供的假数据。方法见下:data(){return{tableData:[{date:'2016-05-02',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-04',name:'王小虎',address:'上海市普陀区金沙江路1
先给大家看看最终效果首先我们来定义数据data(){ return{ lsit:[ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic118.nipic.com%2Ffile%2F20161216%2F24271963_122609717000_2.jpg&refer=http%3A%2F%2Fpic118.nipic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1656923017&t=183ece148b13b64e9dd503afd1b15c91'
有些奇怪的事情发生了,我一直在阅读React文档,他们讨论了生命周期以及如何在渲染组件之前做一些事情。我正在尝试,但我尝试的一切都失败了,总是组件首先进行渲染,然后调用componenWillMount、..didMount等。在调用这些函数之后,渲染再次发生。我需要先加载数据以填充状态,因为我不希望初始状态为null,我希望它包含自初始呈现以来的数据。我正在使用Flux和Alt,这是Action@createActions(flux)classGetDealersActions{constructor(){this.generateActions('dealerDataSuccess
在ember中为组件类指定位置参数时,您必须重新打开该类(如下所示),这样它才能工作,您不能将它包含在初始声明中(至少从我所看到的示例和我自己的经验)。importEmberfrom'ember';constcomponent=Ember.Component.extend({});component.reopenClass({positionalParams:['post'],});exportdefaultcomponent;如果你在单个声明中这样做(如下所示)它将不起作用importEmberfrom'ember';exportdefaultEmber.Component.exte
调试React网站时,我可以使用ReactDeveloperTools查看组件层次结构:我如何在ReactNative中做同样的事情?rageshake菜单包含一个“检查器”,但它似乎只能让我通过点击它来检查单个元素-我看不到任何浏览完整组件层次结构的方法。 最佳答案 不幸的是,从react-native0.12版本开始,Devtools的“React”选项卡不再起作用。这是aknownissue.有一个quiteactivediscussiononGithub已经开放了一段时间,但还没有解决方案。更新Devtools“React”