Nova AZ與Cinder AZ同步的問題

1.背景

在使用OpenStack云平臺(tái)時(shí)泣港,有時(shí)因業(yè)務(wù)架構(gòu)需要拆分不同的Availability Zone可用域,包括計(jì)算Nova和存儲(chǔ)Cinder鳖眼,并期望可以將兩個(gè)AZ對(duì)應(yīng)起來以便起到隔離的效果。目前多數(shù)OpenStack平臺(tái)或多或少采用了Ceph作為Cinder存儲(chǔ)后端(以及Glance、Swift)浴井,并在創(chuàng)建虛擬機(jī)時(shí)選擇從鏡像創(chuàng)建塊存儲(chǔ)。我們希望可以通過創(chuàng)建不同的Cinder AZ配置不同的Ceph pool霉撵,每個(gè)pool關(guān)聯(lián)不同的osd磺浙,已便達(dá)到不同用戶創(chuàng)建的虛擬機(jī)操作系統(tǒng)磁盤在Ceph集群中是完全隔離的。

2.問題

首先我們啟動(dòng)多個(gè)cinder-volume實(shí)例徒坡,配置不同的storage_availalibility_zone撕氧,期望效果是選擇虛擬機(jī)的AZ時(shí)可以匹配Cinder里的AZ,例如:

storage_availability_zone=AZ1

然而實(shí)際情況并不理想喇完,在創(chuàng)建虛擬機(jī)時(shí)伦泥,選擇了Nova的AZ(比如AZ1),創(chuàng)建出來的卷卻在Cinder的nova可用域里崇猫,因?yàn)镃inder的默認(rèn)域是nova午笛,最終結(jié)果并沒有匹配上。實(shí)際上位岔,nova在調(diào)用cinder的時(shí)候并未把虛擬機(jī)實(shí)例的availalibility_zone的值傳過去防楷。

3.解決

查看源碼/usr/lib/python2.7/site-packages/nova/conf/cinder.py中的設(shè)定牺丙,發(fā)現(xiàn)一個(gè)關(guān)鍵參數(shù)cross_az_attach,默認(rèn)值為True复局,這意味著虛擬機(jī)的磁盤可以跨域綁定冲簿。

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 availability
zone in Cinder as the instance availability zone in Nova.
This also means care should be taken when booting an instance from a volume
where source is not "volume" because Nova will attempt to create a volume using
the same availability zone as what is assigned to the instance.
If that AZ is not in Cinder (or allow_availability_zone_fallback=False in
cinder.conf), the volume create request will fail and the instance will fail
the build request.
By default there is no availability zone restriction on volume attach.
"""),
]

順藤摸瓜,繼續(xù)查看/usr/lib/python2.7/site-packages/nova/virt/block_device.py亿昏,發(fā)現(xiàn)如果cross_az_attach為True峦剔,則傳給Cinder的availability_zone為空!A拧羊异!如果cross_az_attach為False,那么nova會(huì)給Cinder傳遞實(shí)例的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部分添加參數(shù)

cross_az_attach = False

再次創(chuàng)建虛擬機(jī)宰衙,發(fā)現(xiàn)Nova的AZ和Cinder的AZ對(duì)應(yīng)上啦平道,解決!

4.More..

在Cinder中還有個(gè)參數(shù)是allow_availability_zone_fallback供炼,目的是為了防止創(chuàng)建虛擬機(jī)時(shí)的Nova AZ在Cinder中不存在時(shí)不報(bào)錯(cuò)一屋,而是使用Cinder中default_availability_zone或者storage_availability_zone進(jìn)行創(chuàng)建。代碼在/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)

但是目測這個(gè)參數(shù)和cross_az_attach有沖突袋哼,因?yàn)槭褂胏ross_az_attach的情況下選擇一個(gè)Cinder里沒有的但是Nova中含有的AZ冀墨,創(chuàng)建結(jié)果還是失敗的,最終會(huì)以cross_az_attach作為判斷涛贯。

5.參考文獻(xiàn):

【1】https://www.mirantis.com/blog/the-first-and-final-word-on-openstack-availability-zones/
【2】https://wenku.baidu.com/view/b221e07eb5daa58da0116c175f0e7cd184251802.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诽嘉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弟翘,更是在濱河造成了極大的恐慌虫腋,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稀余,死亡現(xiàn)場離奇詭異悦冀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)睛琳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門盒蟆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踏烙,“玉大人,你說我怎么就攤上這事历等≈娴郏” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵募闲,是天一觀的道長。 經(jīng)常有香客問我愿待,道長浩螺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任仍侥,我火速辦了婚禮要出,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘农渊。我一直安慰自己患蹂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布砸紊。 她就那樣靜靜地躺著传于,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醉顽。 梳的紋絲不亂的頭發(fā)上沼溜,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音游添,去河邊找鬼系草。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唆涝,可吹牛的內(nèi)容都是我干的找都。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼廊酣,長吁一口氣:“原來是場噩夢啊……” “哼能耻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啰扛,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤嚎京,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后隐解,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞍帝,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年煞茫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帕涌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摄凡。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚓曼,靈堂內(nèi)的尸體忽然破棺而出亲澡,到底是詐尸還是另有隱情,我是刑警寧澤纫版,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布床绪,位于F島的核電站,受9級(jí)特大地震影響其弊,放射性物質(zhì)發(fā)生泄漏癞己。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一梭伐、第九天 我趴在偏房一處隱蔽的房頂上張望痹雅。 院中可真熱鬧,春花似錦糊识、人聲如沸绩社。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愉耙。三九已至,卻和暖如春哑梳,著一層夾襖步出監(jiān)牢的瞬間劲阎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工鸠真, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悯仙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓吠卷,卻偏偏與公主長得像锡垄,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子祭隔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容