1. 程式人生 > >OpenStack塊儲存nova-volume工作機制和相關問題--有點老可以看看

OpenStack塊儲存nova-volume工作機制和相關問題--有點老可以看看

OpenStack卷儲存nova-volume相關問題,由於nova-volume問題較多,單獨寫這一篇,主要介紹塊儲存相關的問題;

對swift物件儲存的內部原理和相關技術可以查詢物件儲存、一致性雜湊等文章,新浪有幾篇技術分享介紹的很好,推薦看一看。

一、相關概念

LVM儲存常用術語
物理儲存介質(Physical Media):
物理儲存裝置,如磁碟或者磁碟上的分割槽,是儲存系統的最底層實體。 

物理卷(PV,Physical Volume)硬碟分割槽或從邏輯上與硬碟分割槽具有同樣功能的裝置(如 RAID),是 LVM 的基本儲存邏輯塊;和基本的物理儲存介質(如分、磁碟等)不同的是含有 LVM 管理引數。 

卷組(VG,Volume Group):LVM 中的最高抽象層,由一個或多個物理卷(PV)組成。一個邏輯卷管理系統中可以擁有多個卷組。 
邏輯卷(LV,Logical Volume):邏輯卷(LV)在卷組上建立,相當於非 LVM 系統中的分割槽。每個邏輯卷屬於它所在的卷組。 


VGDA(卷組描述符區域) :和非 LVM 系統將包含分割槽資訊的元資料儲存在位於分割槽起始位置的分割槽表中一樣,邏輯卷以及卷組相關的元資料被儲存在位於物理捲起始處的 VGDA 中。VGDA 包括以下內容:PV 描述符、VG 描述符、LV 描述符、和一些 PE 描述符。系統啟動 LVM 時啟用 VG,並將 VGDA 載入至記憶體,來識別 LV 的實際物理儲存位置。當系統進行 I/O 操作時,就會根據 VGDA 建立的對映機制來訪問實際的物理位置。

儲存型別

通常來講,所有磁碟陣列都是基於Block塊的模式,所有的NAS產品都是檔案級儲存,而物件儲存(Object-based Storage)是一種新的網路儲存架構,它基於物件儲存技術。

iSCSI協議

將SCSI命令封裝在IP包中,建立會話通過TCP/IP網路傳輸。iSCSI協議定義了在TCP/IP 網路傳送、接收 block(資料塊)級的儲存資料的規則和方法。傳送端將SCSI命令和資料封裝到TCP/IP包中再通過網路轉發,接收端收到 TCP/IP包之後,將其還原為SCSI命令和資料並執行,完成之後將返回的SCSI命令和資料再封裝到 TCP/IP包中再傳送回傳送端。而整個過程在使用者看來,使用遠端的儲存裝置就象訪問本地的SCSI裝置一樣簡單。

iscsi-target server

iSCSI有多種儲存架構,但是由於PC架構的成本低,同時技術越來越成熟,基於PC架構的iSCSI儲存裝置應用廣泛。iSCSI Target軟體安裝在PC伺服器上,使普通的PC伺服器轉變成一臺iSCSI儲存裝置,並通過PC伺服器的乙太網卡對外提供基於iSCSI資料傳輸協議的服務。

iscsi-initiator

Initiator軟體可以將乙太網卡虛擬為iSCSI卡,接受和傳送iSCSI資料報文,從而實現主機和iSCSI裝置之間的iSCSI協議和TCP/IP協議傳輸功能。

二、OpenStack的儲存服務

1、儲存元件和服務

OpenStack創建出來的例項是沒有永久儲存的,關閉例項後資料都會丟失,所以需要儲存捲來儲存每個instance的資料。這項工作由nova-volume實現,提供類似亞馬遜EBS的塊儲存服務。其中,nova-volume專門管理卷的建立、刪除、掛載等,這些卷基於lvm管理,使用iscsi提供服務,並通過libvirt與虛擬機器互動。

lvm提供卷組和邏輯卷管理。首先需要建立一個名為nova-volumes的卷組,不然nova-volume不能正常工作。因為nova-volume所有的建立、刪除volume都是針對這個卷組裡的邏輯卷。建立volume時nova-volume會呼叫lvm的命令lvcreate建立邏輯卷。

iscsi提供多個節點間的儲存服務。建立volume時計算節點還會建立iscsi IQN,計算節點與iscsi伺服器間建立iscsi會話;掛載時例項就擁有了這個邏輯卷;然後使用virsh命令把這個邏輯卷掛載到例項作為它的一塊儲存裝置。

libvirt是一組與多種虛擬機器互動的管理工具集。它支援虛擬機器KVM/QEMU、Xen、virtual Box、vmware ESX、Hyper-V等。為了使虛擬機器獲得更強大的後端儲存能力,libvirt 提供了對各種儲存介質的支援,包括本地檔案系統,網路檔案系統,iSCSI,LVM 等多種後端儲存系統。libvirt 中的儲存管理獨立於虛擬機器管理。也就是儲存池和儲存卷的操作獨立於虛擬機器的操作存在,因此進行儲存管理時,不需要有虛擬機器的存在,可以當虛擬機器需要儲存資源時再進行分配,非常靈活。

儲存卷是一種可以分配給虛擬機器使用的儲存裝置,在OpenStack中就是邏輯卷volume。在虛擬機器中與一個掛載點對應,而物理上可以是一個虛擬機器磁碟檔案或一個真實的磁碟分割槽,從卷組nova-volumes中分出來的。

儲存池是一種可以從中生成儲存卷的儲存資源,後端可以支援目錄池、本地檔案系統池、邏輯卷池、磁碟卷池、iSCSI 卷池等,在OpenStack中就是邏輯卷組nova-volumes。

儲存卷從儲存池中劃分出來,儲存卷分配給虛擬機器成為可用的儲存裝置。儲存池在 libvirt 中分配的 id 標誌著它成為 libvirt 可管理的物件,生成卷組 vg(volume group,OpenStack中必須nova-volumes) 就有了可劃分儲存卷的儲存池,狀態為活躍 (active) 狀態才可以執行劃分儲存卷的操作,可以參考下圖。

CentOS+LVM+Celerra iSCSI配置詳解


2、儲存結構和機制

安裝部署OpenStack時,安裝了lvm,安裝了libvirt,還安裝了tgt和open-iscsi。

在nova.conf設定儲存管理工具為tgtadm,使用tgt管理target。iscsi target管理工具很多,iscsitarget軟體是其中一中。

伺服器,tgt提供服務,tgtadm命令查詢、建立和刪除target。

客戶端,open-iscsi提供服務,iscsiadm命令查詢、登入和登出target。建立會話,斷開會話。

資料庫,volume的位置、狀態等資訊會存到資料庫,在onestack安裝時,選擇mysql,同時安裝了phpmyadmin,可以通過web介面訪問管理。

nova-volume安裝在控制節點,這個物理主機提供volume的建立、刪除、掛載等管理功能。

open-iscsi安裝在計算節點,提供計算節點上的例項和服務端的target之間的會話管理。

所以在一個all-in-one的部署結構裡,物理主機既是server又是client。

在OpenStack的安裝過程中,最後nova.conf這個配置檔案設定了target管理程式tgtadm,所以使用tgt來提供target服務;iscsi_prefix指明瞭查詢iscsitarget的ip段,可以設為完整的tgt所在的主機ip,或者字首,可以使用iscsi_ip_addres=192.168.139.50設定指定的ip

這樣nova會自動使用iscsiadm從這個ip進行discovery,類似執行命令

iscsiadm -m discovery -t sendtargets -p IP:port

所以每次例項啟動時,通過已有的對映掛載這個裝置,也就是nova-volumes裡的一個邏輯卷,或者說一個iscsi target。這樣就可以像普通磁碟裝置、物理卷、磁碟分割槽一樣使用這個掛載的volume。

3、儲存服務的工作流程

安裝部署OpenStack時,安裝了lvm,安裝了libvirt,還安裝了tgt和open-iscsi。

1)lvm建立卷組(VG),OpenStack中就是邏輯卷組nova-volumes,也就是OpenStack裡只能使用這個卷組名。沒有這個名字的卷組,nova-volume將不會正常啟動,這也會導致nova-compute不能正常啟動。

檢視卷組vgdisplay

檢視哪些nova服務沒有正常啟動nova-manage service list

2)如果沒有nova-volumes卷組,建立這個卷組。這需要一個或者多個物理卷,可以擴展卷組。

pvcreate /dev/sdb3
vgcreate nova-volumes /dev/sdb3

vgextend nova-volumes /dev/sdb4

3)如果沒有物理裝置,可以使用檔案代替,一般實驗用。

$ dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
$ losetup -f /opt/nova-volumes.img
$ losetup -a
$ vgcreate nova-volumes /dev/loop0

4)建立nova-volumes卷組後,需要重啟nova-volume服務

5)確保tgt服務開啟,並且tgt監聽3260埠。

lsof | grep 3260

6)以上都正常服務,在客戶端(計算節點,或者裝了all-in-one的主機)。確保open-iscsi這個客戶端軟體正常工作。

7)nova volume-create建立volume,可以使用nova命令或者在web進行。

如果建立成功,可以在客戶端通過iscsiadm命令檢視會話,以及檢視服務端的target。

iscsiadm -m session

iscsiadm -m discovery -t sendtargets -p IP:port

在服務端,可以檢視target

tgtadm --lld iscsi --op show --mode target

8)建立volume成功,下面可以attach到某個例項。

如果attach不成功,檢查日誌;

如果一直attaching,請看下面問題和解決方法3.7

9)進入例項,可以fdisk -l看到新掛載的volume。

3.0、建立太多volume或者instance,不能正常執行,怎麼清空資料庫並重置資料庫

在OneStack專案裡,已經加入了這個指令碼工具,可以自行更改和增刪。映象相關的資料在glance資料庫,身份相關的在keystone,nova相關的資料主要對應nova資料庫,包括例項instance表和卷volume表。

清空nova資料庫./resetStack clear

然後重新初始化./resetStack

3.1、OpenStack中建立volume一直在creating,什麼原因

主要因為nova-volume沒有正常啟動,可以

nova-manage service list

看看後面的狀態,不是笑臉:-)而是xx。如果沒有啟動,請接著看下一條FAQ(3.2)。

3.2、OpenStack中nova-volume服務不能啟動,什麼原因

主要因為沒有nova-volumes卷組,或者iscsitarget服務沒有啟動(或者沒有安裝)。

1、vgdisplay

沒有nova-volumes卷組,可以建立卷組和磁碟

$ dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
$ losetup -f /opt/nova-volumes.img
$ losetup -a
$ vgcreate nova-volumes /dev/loop0

記著啟動nova-volume然後建立volume,否則下面仍然不能建立

$ service nova-volume restart

$ nova volume-create --display_name "volume1" 10

2、service tgt status

由於nova.conf設定tgtadm管理,在控制節點(nova-volume所在的物理節點)使用tgt提供target服務,通過tgtadm管理。

1)沒有安裝tgt,或者沒有正常啟動tgt,可以apt安裝(可以用iscsitarget,對於inet管理工具,對應iscsitarget iscsitarget-dkms,需要sed -i -e 's/false/true/' /etc/default/iscsitarget是服務可以工作)

然後執行以下命令安裝和設定為可以啟動

apt-get install -y tgt
service tgt start
service nova-volume restart

lsof | grep 3260可以檢視埠是否監聽

2)如果既沒有nova-volumes卷組,也沒有安裝tgt,切忌保證這兩者都存在,並且nova.conf設定正確,然後重啟nova-volume,再建立volume

有人安裝tgt並啟動後就create,結果nova-volume並沒有啟動,所以問題依然存在;

有人建立nova-volumes,也沒有重啟nova-volume,也不能正常工作。

3.3、OpenStack中建立volume一直在creating,怎麼停掉(stop)
主要因為nova-volume沒有正常啟動,即使現在啟動了還會停留在這個狀態。
需要手動更改資料庫裡相關狀態資訊,從creating改為deleted然後刪掉。

對於這個沒有建立成功的volume,可以直接更改資料庫改為deleted,注意nova volume-delete會提示找不到。

如果不能建立某些卷,並且提示存在這種volume,比如lvdisplay查到這個邏輯卷,需要lvremove;如果tgt中可以看到這個target,需要使用tgtadm刪除

tgtadm --op delete --lld=iscsi --mode=target --tid=1

3.4、OpenStack中nova-volume執行出現問題,檢查什麼地方
主要因為nova-volume沒有正常啟動或者計算節點沒有能找到target,可以檢查以下這些問題。
nova-volume是否正常;控制點,詳見問題3.2
tgt是否開啟;服務端
open-iscsi是否安裝和開啟;客戶端
客戶端(計算節點)iscsiadm discovery看看能不能找到儲存服務;
分析nova-volume.log、nova-compute.log和libvirt.log。


3.5、OpenStack中tgt管理target
控制節點檢視target
tgtadm --lld iscsi --op show --mode target
建立target
sudo tgtadm --op new --lld=iscsi --mode=target --tid=1 --targetname=iqn.2010-10.org.openstack:volume-00000001

3.6、OpenStack中計算節點管理volume
檢視建立的session
sudo iscsiadm -m session
手動發現target
sudo iscsiadm -m discovery -t sendtargets -p IP:port
登入登出
sudo iscsiadm -m node -T targetname(iqn.2010-10.org.openstack:volume-00000004) -p 10.200.200.4:3260 --login
sudo iscsiadm -m node -T targetname(iqn.2010-10.org.openstack:volume-00000004) -p 10.200.200.4:3260 --logout
sudo iscsiadm -m node -o [delete|new|update] -T targetname

如果使用命令

sudo iscsiadm -m discovery -t sendtargets -p compute_node
報以下錯誤
iscsiadm: Connection to Discovery Address 192.168.139.50 closed
iscsiadm: Login I/O error, failed to receive a PDU 這是因為沒有找到target,可以create一個volume,此時會建立一個卷,建立一個target。

3.7、OpenStack中掛載volume一直阻塞停留在attaching,什麼原因,怎麼解決

在volume-create成功建立volume後,掛載到例項,如果遇到什麼提示都沒有nova volume-attach後仍然為available,那麼是你的掛載有問題,比如使用的裝置名/dev/vdc已經使用了,需要檢查日誌。

更多的問題是,nova volume-attach一直attaching,刪不掉也掛不上。這時候,nova-manage service list你會發現nova-compute已經停止,如果以上所描述的問題(nova-volume沒有正常工作)都不存在,那麼需要你更改OpenStack原始碼了,這是OpenStack的一個bug。

1)對於這個沒有掛載成功的volume,可以直接更改資料庫改為available,或者使用nova-manage volume delete來通過資料庫刪除這個volume,注意nova volume-delete會刪不掉。

2)對於這個bug,需要更改以下兩處原始碼:

vi /usr/share/pyshared/nova/virt/libvirt/connection.py

把virt_dom.attachDevice(xml)這一行改為

  1. LOG.info("attaching device with virsh")  
  2. device_path = connection_info['data']['device_path']  
  3. utils.execute('virsh', "attach-disk", instance_name, device_path, mount_device, run_as_root=True )  

vi /usr/share/pyshared/nova/rootwrap/compute.py

新增一行

  1. filters.CommandFilter("/usr/bin/virsh", "root"),  

這樣就行了,注意volume-attach填寫的裝置名不能重複,雖然它並不一定使用你指定的裝置名作為例項的裝置名。

如果很多服務沒有正常工作,可以重啟所有服務

for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart; done

》。如有OpenStack問題和解決,請直接下面回覆,這樣也方便後來人。如有其它問題反饋,Kayven微博留言E-mail)。國內對於OpenStack還處於比較初級的階段,技術研究公開的資料較少,多為一些安裝部署問題相關的文章,比較深入的技術分析和比較全面的介紹較少。希望有什麼經驗和觀點,可以在這裡分享出來供大家討論,也幫助理清自己的思路。

相關推薦

OpenStack儲存nova-volume工作機制相關問題--有點可以看看

OpenStack卷儲存nova-volume相關問題,由於nova-volume問題較多,單獨寫這一篇,主要介紹塊儲存相關的問題; 對swift物件儲存的內部原理和相關技術可以查詢物件儲存、一致性雜湊等文章,新浪有幾篇技術分享介紹的很好,推薦看一看。 一、相關

hadoop的NAMENODE的管理機制工作機制DATANODE的工作原理

占用 最大 狀態 inux 自動 conda 文件大小 open() 格式 1:分布式文件系統(Distributed File System): (1):數據量越來越多,在一個操作系統管轄的範圍存不下了,那麽就分配到更多的操作系統管理的磁盤中,但是不方便管理和維護

說說zookeeper【叄】_工作機制實現原理

本文簡單說說zookeeper的工作機制。 總體來說,客戶端先和zookeeper伺服器建立起一個TCP長連線(session),之後根據ACL許可權的設定,可在zookeeper伺服器上對目

javaweb技術內幕(springMvc工作機制設計模式)

一:springMvc的總體設計:           要使用springmvc只需要在web.xml中配置一個DispatcherServlet.如下: 再定義一個dispatcherServlet-servlet.xml配置檔案:

33---varnish 4.0 工作機制配置例項解析(上)

這兩天在看varnish,感慨一句,這軟體真不錯!!! ============ 功能&程式包: 首先varnish是反向HTTP代理,是具有強大快取功能的代理,因此也被稱之為web加速器或http加速器。官網對它的描述是不僅是代理,還說它具有web應用防火牆、抵禦

MySQL5.6中limit的工作機制order by limit優化原理

MySQL5.6中Limit的工作機制 如果你僅需要在一個結果集中返回特定的幾行,通常是使用limit,而不是取回整個結果集再捨去不需要的資料,MySQL通常按照如下的方式優化一個包含limit row_count或HAVING的語句: ◎只有limit 如果你只通過li

CDN工作機制負載均衡概述

1. CDN架構    CDN(Content Delivery Network),內容分發網路,是構築在Internet上的一種先進的流量分配網路。通過在現有的Internet中增加一層新的網路架構,使使用者可以就近取得所需內容,提高使用者訪問網站的響應速度。    目前C

Rabbitmq中的工作機制以及相關的springboot整合

Rabbitmq中的工作機制以及相關的springboot整合 1.安裝rabbitmq 獲取rabbitmq映象:docker pull rabbitmq:management 建立並執行容器: docker run -d --hostname my

【Oracle 叢集】ORACLE DATABASE 11G RAC 知識圖文詳細教程之RAC 工作原理相關元件(三)

概述:寫下本文件的初衷和動力,來源於上篇的《oracle基本操作手冊》。oracle基本操作手冊是作者研一假期對oracle基礎知識學習的彙總。然後形成體系的總結,一則進行回顧複習,另則便於查詢使用。本圖文文件亦源於此。閱讀Oracle RAC安裝與使用教程前,筆者先對這篇文章整體構思和形成進行梳理。

Hibernate 核心接口工作機制

config hibernate bsp iter ans 安全 c api session tor 主要內容   Configuration類   sessionFactory接口   session接口   Transaction接口   Query 和 criteri

springMVC 的工作原理機制、配置

spring mvc+my batis kafka dubbo+zookeerper restful redis分布式緩存 工作原理下面的是springMVC的工作原理圖:1、客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,如果匹配DispatcherServle

【轉】Java學習---HashMapHashSet的內部工作機制

link 實踐 離散 val 數據結構 結構 通過 如何 factor 【原文】https://www.toutiao.com/i6593863882484220430/ HashMap和HashSet的內部工作機制 HashMap 和 HashSet 內部是如何工作的?散

OpenStack雙節點部署—M Cinder(儲存服務)

Cinder安裝 一、 資料庫配置 二、 建立服務憑證和API端點 三、 安裝並配置Cinder元件 四、安裝配置儲存節點 五、驗證Cinder服務 一、 資料庫配置 Controller節

Linux 中使用者組的工作機制

我認為它們的關係是這樣的: 每個程序都屬於一個使用者(比如使用者 julia) 當這個程序試圖讀取一個被某個組所擁有的檔案時, Linux 會 a. 先檢查使用者julia 是否有許可權訪問檔案。(LCTT 譯註:此處應該是指檢查檔案的所有者是否就是 julia)

cinder volume命令 七 Openstack Cinder儲存

原 七 Openstack Cinder儲存 2018年05月10日 16:43:24 CooperLii 閱讀數:104

YARN架構的工作流程排程機制總結

YARN 是一個資源管理、任務排程的框架,主要包含三大模組:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM). 1).ResourceManager 負責所有資源的監控、分配和管理; 2).ApplicationMa

2. Hibernate核心介面工作機制

2. Hibernate核心介面和工作機制 Configuration類 Configuration類負責管理Hibernate的配置資訊作並根據配置資訊啟動Hibernate。 Hibernate配置有兩種方法: 屬性檔案 XML檔案

HashMap工作原理擴容機制

1. HashMap工作原理 HashMap作為優秀的Java集合框架中的一個重要的成員,在很多程式設計場景下為我們所用。HashMap作為資料結構散列表的一種實現,就其工作原理來講單獨列出一篇部落格來講都是不過分的。由於本文主要是簡單總結其擴容機制,因此對於HashM

儲存、物件儲存、檔案儲存的區別聯絡

塊儲存、物件儲存、檔案儲存的區別和聯絡 塊儲存、物件儲存、檔案儲存的區別和聯絡 通常來講,磁碟陣列都是基於Block塊的儲存,而所有的NAS產品都是檔案級儲存。 1. 塊儲存:DAS   SAN a) DAS(Direct Attach Storage): 是直接

HBASE系統架構圖以及各部分的功能作用,物理儲存,HBASE定址機制,讀寫過程,Region管理,Master工作機制

1.1 hbase內部原理 1.1.1 系統架構 Client  1 包含訪問hbase的介面,client維護著一些cache來加快對hbase的訪問,比如regione的位置資訊。   Zookeeper  1 保證任何時候,叢集中只有一個master&