長沙做網站,長沙建網站,湖南做網站

Nova AZ與Cinder AZ同步的問題

在使用OpenStack云平臺時,有時因業務架構需要拆分不同的Availability Zone可用域,包括計算Nova和存儲Cinder,并期望可以將兩個AZ對應起來。目前多數OpenStack平臺或多或少采用了Ceph作為Cinder存儲后端(以及Glance、Swift),并在創建虛擬機時選擇從鏡像創建塊存儲。我們希望可以通過創建不同的Cinder AZ配置不同的Ceph pool,每個pool關聯不同的osd,已便達到不同用戶創建的虛擬機操作系統磁盤在Ceph集群中是分開的。

我們啟動多個cinder-volume實例,配置不同的storage_availalibility_zone,期望是選擇虛擬機的AZ時可以匹配Cinder里的AZ,例如:

storage_availability_zone=AZ1
查看源碼/usr/lib/python2.7/site-packages/nova/conf/cinder.py中的設定,發現一個關鍵參數cross_az_attach,默認值為True,這意味著虛擬機的磁盤可以跨域綁定。

cfg.BoolOpt('cross_az_attach',            default=True, help=""" Allow attach between instance and volume in different availability zones.If False, volumes attached to an instance must be in the same availabilityzone in Cinder as the instance availability zone in Nova.This also means care should be taken when booting an instance from a volumewhere source is not "volume" because Nova will attempt to create a volume usingthe same availability zone as what is assigned to the instance.If that AZ is not in Cinder (or allow_availability_zone_fallback=False incinder.conf), the volume create request will fail and the instance will failthe build request.By default there is no availability zone restriction on volume attach. """), ]
順藤摸瓜,繼續查看/usr/lib/python2.7/site-packages/nova/virt/block_device.py,發現如果cross_az_attach為True,則傳給Cinder的availability_zone為空!!!如果cross_az_attach為False,那么nova會給Cinder傳遞實例的availability_zone。

def _get_volume_create_az_value(instance): """Determine az to use when creating a volume    Uses the cinder.cross_az_attach config option to determine the availability    zone value to use when creating a volume.    :param nova.objects.Instance instance: The instance for which the volume        will be created and attached.    :returns: The availability_zone value to pass to volume_api.create    """ # If we're allowed to attach a volume in any AZ to an instance in any AZ, # then we don't care what AZ the volume is in so don't specify anything. if CONF.cinder.cross_az_attach: return None # Else the volume has to be in the same AZ as the instance otherwise we # fail. If the AZ is not in Cinder the volume create will fail. But on the # other hand if the volume AZ and instance AZ don't match and # cross_az_attach is False, then volume_api.check_attach will fail too, so # we can't really win. :) # TODO(mriedem): It would be better from a UX perspective if we could do # some validation in the API layer such that if we know we're going to # specify the AZ when creating the volume and that AZ is not in Cinder, we # could fail the boot from volume request early with a 400 rather than # fail to build the instance on the compute node which results in a # NoValidHost error. return instance.availability_zone
都清楚了,接下來配置nova.conf文件,在Cinder部分添加參數
再次創建虛擬機,發現Nova的AZ和Cinder的AZ對應上啦,解決!

在Cinder中還有個參數是allow_availability_zone_fallback,目的是為了創建虛擬機時的Nova AZ在Cinder中不存在時不報錯,而是使用Cinder中default_availability_zone或者storage_availability_zone進行創建。代碼在/usr/lib/python2.7/site-packages/cinder/volume/flows/api/create_volume.py中

if availability_zone not in self.availability_zones: if CONF.allow_availability_zone_fallback:                original_az = availability_zone                availability_zone = (                    CONF.default_availability_zone or CONF.storage_availability_zone)                LOG.warning(_LW("Availability zone '%(s_az)s' " "not found, falling back to " "'%(s_fallback_az)s'."),                            {'s_az': original_az, 's_fallback_az': availability_zone}) else:                msg = _("Availability zone '%(s_az)s' is invalid.")                msg = msg % {'s_az': availability_zone} raise exception.InvalidInput(reason=msg)
但是目測這個參數和cross_az_attach有沖突,因為使用cross_az_attach的情況下選擇一個Cinder里沒有的但是Nova中含有的AZ,創建結果還是失敗的,終會以cross_az_attach作為判斷。



關鍵詞:長沙做網站,湖南做網站,湖南用友ERP對接,湖南網站優化,湖南做網站的公司,長沙網站制作公司,長沙網絡公司
先锋影院亚洲欧美,先锋在线综合亚洲欧美,先锋在线亚洲欧美中文字幕 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>