openstack存儲類型總結

 

   對於openstack,有的時候很無力。一個人瞎折騰了快4個月了。感腳還是比較難,openstack的目標不是建立一個簡單快捷的雲平臺麼?我咋覺得就這麼難呢?

   下面就對opensack裏面用到了幾類不同的儲存做一下說明。一般會有三類,如果超過視情況而定:

 

opesntack storage
  實例/臨時存儲 卷的塊存儲(cinder) 對象存儲(swift)
用途 給實例的初始空間 提供給VM永久的額外存儲空間 存儲虛擬鏡像和文件
持久性 跟vm的生命週期一樣 直到被刪除爲止 直到被刪除爲止
實現 本地文件系統實現 通過iscsi掛載實現 通過REST API實現
定義 根據flavors來定義大小 根據需求 根據需求,而且有極高的擴展性
例子 m1.small 10G/root 20G/臨時存儲  2TB的本地存儲空間 10T以上的swift存儲空間

 

  默認情況下生成的實例實在:/var/lib/nova/instances下面。

 

  1. root@master:~# virsh list 
  2.  Id Name                 State 
  3. ---------------------------------- 
  4.   1 instance-00000006    running 
  5.  
  6. root@master:~# ll /var/lib/nova/instances/instance-00000006/ 
  7. total 494308 
  8. drwxrwxr-x 2 nova         nova      4096 Jan 14 12:04 ./ 
  9. drwxr-xr-x 5 nova         nova      4096 Jan 14 11:59 ../ 
  10. -rw-rw---- 1 libvirt-qemu kvm          1 Jan 14 12:05 console.log 
  11. -rw-r--r-- 1 libvirt-qemu kvm  506134528 Jan 16 11:20 disk 
  12. -rw-r--r-- 1 libvirt-qemu kvm     197120 Jan 14 12:04 disk.local 
  13. -rw-rw-r-- 1 nova         nova      1694 Jan 14 11:59 libvirt.xml 

 

在實例目錄下面會有幾個文件。console日誌。disk,disk.local,libvirt.xml。一下進行說明:

 

  1. root@master:~# cd /var/lib/nova/instances/instance-00000006/ 
  2. root@master:/var/lib/nova/instances/instance-00000006# ls 
  3. console.log  disk  disk.local  libvirt.xml 
  4. root@master:/var/lib/nova/instances/instance-00000006# qemu-img info disk 
  5. image: disk 
  6. file format: qcow2 
  7. virtual size: 10G (10737418240 bytes) 
  8. disk size: 483M 
  9. cluster_size: 65536 
  10. backing file: /var/lib/nova/instances/_base/09a1c65fb799ed070dd1e65b6296e19e656a040a_10 (actual path: /var/lib/nova/instances/_base/09a1c65fb799ed070dd1e65b6296e19e656a040a_10) 
  11. root@master:/var/lib/nova/instances/instance-00000006# qemu-img info disk.local image: disk.local 
  12. file format: qcow2 
  13. virtual size: 20G (21474836480 bytes) 
  14. disk size: 136K 
  15. cluster_size: 65536 
  16. backing file: /var/lib/nova/instances/_base/ephemeral_0_20_None (actual path: /var/lib/nova/instances/_base/ephemeral_0_20_None) 

  你會發現裏面disk有一個虛擬大小10G,還有存儲大小483M.其實這個是創建實例的時候從glance拷貝過來的。下面一個20G就是臨時存儲了,當vm被刪除後就會自動被釋放裏面的東西就完全沒了。現在你可以理解爲20G的空間被用了136K。

   一般情況下都有做熱遷移的需求,那麼你就需要用到共享存儲了。說明白一點就是:將所有的openstack節點下的/var/lib/nova/instances目錄能放在一個存儲上而且共享,包括用戶權限。(uid:nova gid:nova).因爲裏面存的都是虛擬機,目錄的容量要比較大,可以用存儲設備來支持(我真的很想用這個)。不過我做的是用glusterfs+ctdb+nfs+lvs這樣的一個廉價的結構來實現的,但是這個性能真的很疼:因爲局域網的帶寬沒有考慮到,所以搭起來的時候嚇死我了。本地的讀寫大概在180M/S,iops峯值900左右。做成這個結構以後降到了5.7M/S.iops下降到峯值只有90左右(而且是集羣測試,單節點更慢)。啥性能都沒有了。網絡環境太爛了,勿笑。

   塊存儲:F版出了一個cinder的東西。它的原理就是用iscsi個邏輯卷lvm結合。把存儲空間做成邏輯卷然後利用iscsi遠程掛載到被需求的實例上。那麼後端的塊存儲就可以很靈活了,用什麼設備你自己看咯。那麼我用的是本地的硬盤,4個節點同是安裝上 openstack storage,那麼調度器會選中其中一臺來提供。都是tgt端,安裝上lvm2。 

   對象存儲:swift這個可以單獨部署使用可以,不需要結合openstack。但是在opensack裏面目前我知道是用來存儲虛擬鏡像的,還有視頻文檔等等,比較像網盤。這個我就做了簡單的應用。

   切記因爲openstack裏面用到多種方式的存儲,對應的放案也不一樣,所以很容易搞錯了,提前做好認知工作是很有必要的。以上都是這些天來的實踐經驗,有問題的地方希望大家能幫俺指出哦!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章