成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenStack Nova如何支持Live Upgrade

云計(jì)算 OpenStack
OpenStack半年一個(gè)版本,升級(jí)是一個(gè)怎么也躲不開的問題,總是在想如何在復(fù)雜的OpenStack部署環(huán)境中做到業(yè)務(wù)平滑升級(jí),同時(shí)又不影響到用戶,當(dāng)前的OpenStack中又有那些特性支持live-upgrade,今天以Nova作為一個(gè)開端,看看Nova中是怎么做的。

寫在最前面:

OpenStack半年一個(gè)版本,升級(jí)是一個(gè)怎么也躲不開的問題,總是在想如何在復(fù)雜的OpenStack部署環(huán)境中做到業(yè)務(wù)平滑升級(jí),同時(shí)又不影響到用戶,當(dāng)前的OpenStack中又有那些特性支持live-upgrade,今天以Nova作為一個(gè)開端,看看Nova中是怎么做的。

代碼基線:Kilo

官方文檔

如今的OpenStack官方文檔已經(jīng)相對(duì)比較全面了,Operations Guide中就有一個(gè)章節(jié)專門描述了升級(jí)相關(guān)的指導(dǎo),并舉了幾個(gè)版本升級(jí)的例子,雖然比較簡(jiǎn)單,但是大體的框架和步驟都已經(jīng)有了。基本的思路就是:小規(guī)模驗(yàn)證 -> 備份配置文件和數(shù)據(jù)庫 -> 更新配置文件 -> 利用包管理器升級(jí)安裝包 -> 停止進(jìn)程 -> 更新數(shù)據(jù)庫 -> 啟動(dòng)進(jìn)程 -> 再次驗(yàn)證。推薦大家都仔細(xì)閱讀一下。

upgrade levels

官方文檔中專門提到了一個(gè)概念 upgrade levels,這里涉及到Nova的***個(gè)live-upgrade特性。

先稍微繞開一點(diǎn),當(dāng)前由于對(duì)象化的引入,nova中的api, scheduler, conductor, compute四個(gè)進(jìn)程都存在循環(huán)依賴,所以不可能簡(jiǎn)單的劃分出一個(gè)依賴樹,從樹的葉子節(jié)點(diǎn)開始升級(jí),從而保證API兼容性,這種升級(jí)的方式在nova中不可行。有循環(huán)依賴也就是說,從任何一端開始升級(jí),都有可能發(fā)生高版本client向低版本server發(fā)送消息的可能。這里就需要用到upgrade levels。

 

OpenStack Nova如何支持Live Upgrade

簡(jiǎn)單來說就是一個(gè)rpcapi端的版本控制機(jī)制,在升級(jí)之前,rpc client端設(shè)置一個(gè)版本閥值,當(dāng)rpcapi需要發(fā)送消息時(shí),通過can_send_version方法判斷,如果超過閥值就做自動(dòng)降級(jí)處理,沒有做降級(jí)處理的消息,會(huì)被禁止發(fā)送,具體實(shí)現(xiàn)可以參考o(jì)slo_messaging的代碼。例子如下:

  1. def shelve_offload_instance(self, ctxt, instance, 
  2.  
  3. clean_shutdown=True): 
  4.  
  5. msg_args = {‘instance’: instance} 
  6.  
  7. if self.client.can_send_version(’3.37′): 
  8.  
  9. version = ’3.37′ 
  10.  
  11. msg_args['clean_shutdown'] = clean_shutdown 
  12.  
  13. else
  14.  
  15. version = ’3.0′ 
  16.  
  17. cctxt = self.client.prepare(server=_compute_host(None, instance), 
  18.  
  19. version=version) 
  20.  
  21. cctxt.cast(ctxt, ‘shelve_offload_instance’, **msg_args) 

如果我們計(jì)劃從juno升級(jí)到kilo,首先需要設(shè)置所有rpcapi的upgrade levels為juno,這樣當(dāng)我們升級(jí)的過程中,如果一個(gè)已經(jīng)升到kilo版本的conductor向juno版本的compute發(fā)送rpc消息,還是會(huì)使用和juno版本rpcapi接口兼容的消息。

#p#

API序列化

每一個(gè)rpcapi的都有版本號(hào),每次的api修改都需要調(diào)整版本號(hào),nova通過版本號(hào)來判斷client側(cè)和server側(cè)是否兼容。

整個(gè)rpc調(diào)用分為兩個(gè)步驟,rpcapi側(cè)將整個(gè)rpc調(diào)用序列化,然后在rpc server也就是manager側(cè)收到消息,再反序列化執(zhí)行。整個(gè)rpc message除了context之外,message字典結(jié)構(gòu)體中還包括四個(gè)部分:

  1. method
  2. args
  3. version
  4. namespace

version標(biāo)識(shí)了rpcapi的版本,在rpc server側(cè)直接通過method名稱查找manager中的函數(shù),將args參數(shù)反序列化之后,調(diào)用method函數(shù)執(zhí)行。調(diào)用之前也會(huì)在 server側(cè),檢查rpcapi的version是否和manager的實(shí)現(xiàn)版本兼容,如果不兼容拋出異常。namespace用于區(qū)分 conductor中的ConductorAPI和ConductorTaskAPI。

可以看到如果我們修改代碼,調(diào)整了rpcapi的接口參數(shù),就一定要同時(shí)更新client/server側(cè)的版本號(hào),并在rpc server的接口實(shí)現(xiàn)側(cè)提供參數(shù)默認(rèn)值。

在rpcapi的層面,低版本client調(diào)用高版本server,兼容支持;高版本client調(diào)用低版本server,通過upgrade levels自動(dòng)降級(jí),未做自動(dòng)降級(jí)處理的禁止發(fā)送,拋出異常。

API參數(shù)序列化

除了rpcapi在升級(jí)過程中需要考慮升級(jí)兼容性,args參數(shù)中的NovaObject對(duì)象,也需要考慮升級(jí)兼容性。所有的NovaObject都有版本號(hào)跟蹤每一次的修改。

在rpcapi發(fā)送消息之前,首先對(duì)接口參數(shù)進(jìn)行序列化,如果參數(shù)是NovaObject類型,都通過NovaObject的 obj_to_primitive方法轉(zhuǎn)化成dict類型之后,保存在args,如果是原始類型,直接保存在args中。rpc server接收到消息之后,將args中的接口參數(shù)反序列化,如果是NovaObject對(duì)象,通過obj_from_primitive接口反序列化。

NovaObject類中存在一個(gè)_obj_classes類屬性,其中會(huì)保存一個(gè)NovaObject的多個(gè)版本的實(shí)現(xiàn),通過版本號(hào)從大到小排序,***版本就是當(dāng)前代碼實(shí)現(xiàn)版本,較小版本由升級(jí)過程中低版本進(jìn)程發(fā)送而來。

NovaObjectSerializer.deserialize_entity用于反序列化對(duì)象,如果server端當(dāng)前實(shí)現(xiàn)版本大于發(fā)送過來的版本,直接兼容,反序列化對(duì)象。如果發(fā)送的版本大于server端實(shí)現(xiàn)版本,忽略最末端版本號(hào),再次嘗試反序列化,如果仍然不能成功,就需要調(diào)用 conductor.object_backport方法,嘗試降級(jí)處理,將args參數(shù)轉(zhuǎn)化為server端可以處理的object。

#p#

升級(jí)順序

升級(jí)順序可能不同人分析有不同的結(jié)果,我這里提供一個(gè)建議順序和分析過程。

社區(qū)的operation guide中推薦的升級(jí)方式為先controller節(jié)點(diǎn),然后compute節(jié)點(diǎn)。在我看來,這樣升級(jí)有一個(gè)好處就是可以盡早的發(fā)現(xiàn)問題,降低風(fēng)險(xiǎn)和回退成本。controller節(jié)點(diǎn)進(jìn)程最多也最復(fù)雜,首先升級(jí)可以盡早的發(fā)現(xiàn)問題,這時(shí)回退也只需要回退controller,如果有100個(gè) compute都升級(jí)完成了,再升級(jí)controller,如果升級(jí)失敗,就需要回退100個(gè)compute節(jié)點(diǎn)。

先升級(jí)controller有個(gè)問題,就是client端的版本要大于server端,也就是4.0的conductor可能調(diào)用3.0的 compute,需要用upgrade_levels控制。如果compute進(jìn)行數(shù)據(jù)庫操作,就會(huì)執(zhí)行NovaObject的方法,***調(diào)用到 conductor的object_class_action方法,這個(gè)方法有特殊處理,會(huì)將返回值版本轉(zhuǎn)化為調(diào)用端的版本。

綜合這幾點(diǎn),推薦的一個(gè)升級(jí)順序?yàn)?

  1. conductor
  2. scheduler
  3. compute
  4. api

***升級(jí)api進(jìn)程的原因是,希望所有新增接口和新增參數(shù)能在整個(gè)環(huán)境都支持的情況下,再提供給用戶使用。

升級(jí)順序并無一個(gè)定論,每種順序各有利弊,歡迎討論。升級(jí)在OpenStack中一直都是一個(gè)大問題,沒有***理論,只有***實(shí)踐,需要不斷的嘗試總結(jié)交流,希望能為OpenStack的升級(jí)成熟,盡自己的一份力。

原文鏈接:http://www.openstack.cn/?p=3404

責(zé)任編輯:Ophira 來源: OpensStack中國社區(qū)
相關(guān)推薦

2011-09-07 10:42:38

cloudopenstack n

2014-12-11 11:30:11

openstacknovadocker

2012-02-03 09:22:57

2011-11-29 10:24:17

OpenStackNova

2011-08-17 10:19:30

CentOSOpenStack N

2015-03-16 10:16:33

協(xié)同并發(fā)NovaOpenstack

2011-05-24 09:33:40

UbuntuOpenStackNova

2015-05-12 10:31:25

openstack開源新特性分析

2011-07-18 13:35:38

PuppetOpenStack

2013-04-16 09:56:33

GlusterFSOpenStack

2016-03-08 10:40:05

谷歌ios蘋果

2016-01-21 09:37:19

OpenStack容器編排引擎Docker

2014-12-03 10:19:49

OpenStack開源云計(jì)算云服務(wù)

2015-01-23 10:47:14

openstackvspheremutil-hyper

2017-03-16 11:39:33

Openstack源碼姿勢(shì)

2017-06-09 14:30:31

Openstack N對(duì)象模型數(shù)據(jù)庫

2012-11-07 09:36:47

RackspaceOpenStackRightScale

2014-04-24 10:06:01

OpenStackDocker

2018-01-22 08:50:49

LinuxUbuntuCubic

2009-12-17 16:16:25

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲国产精品一区二区第一页 | 成人av一区 | 91福利网 | 国产视频中文字幕在线观看 | 国产亚洲欧美日韩精品一区二区三区 | 日韩精品视频中文字幕 | 亚洲精选一区二区 | 亚洲综合网站 | 久久精品 | 欧美精品第一页 | 精品日韩 | 国产精品视频一二三区 | 免费观看黄 | 拍真实国产伦偷精品 | 狠狠操狠狠干 | 国产美女精品 | 一级黄色片一级黄色片 | 日韩av在线免费 | 国产精品大片在线观看 | 久久精品无码一区二区三区 | 日本久久精品视频 | caoporon| 三级av在线 | 欧美久久一区二区三区 | 精品一区二区三区四区五区 | 日韩不卡在线观看 | 成人免费视频一区二区 | 国产精品一区二区三区四区 | 综合色久| 免费国产一区 | 91黄色片免费看 | 国产精品国产精品国产专区不卡 | 成人国产精品久久 | 毛片免费看 | 久久久久久国产精品免费免费男同 | 国产高清不卡 | 伊人春色在线观看 | 国产成人精品a视频一区www | 日本精品视频一区二区 | 欧美精品乱码久久久久久按摩 | 一本在线|