對於openstack,有的時候很無力。一個人瞎折騰了快4個月了。感腳還是比較難,openstack的目標不是建立一個簡單快捷的雲平臺麼?我咋覺得就這麼難呢?
下面就對opensack裏面用到了幾類不同的儲存做一下說明。一般會有三類,如果超過視情況而定:
實例/臨時存儲 | 卷的塊存儲(cinder) | 對象存儲(swift) | ||
用途 | 給實例的初始空間 | 提供給VM永久的額外存儲空間 | 存儲虛擬鏡像和文件 | |
持久性 | 跟vm的生命週期一樣 | 直到被刪除爲止 | 直到被刪除爲止 | |
實現 | 本地文件系統實現 | 通過iscsi掛載實現 | 通過REST API實現 | |
定義 | 根據flavors來定義大小 | 根據需求 | 根據需求,而且有極高的擴展性 | |
例子 | m1.small 10G/root 20G/臨時存儲 | 2TB的本地存儲空間 | 10T以上的swift存儲空間 |
默認情況下生成的實例實在:/var/lib/nova/instances下面。
- root@master:~# virsh list
- Id Name State
- ----------------------------------
- 1 instance-00000006 running
- root@master:~# ll /var/lib/nova/instances/instance-00000006/
- total 494308
- drwxrwxr-x 2 nova nova 4096 Jan 14 12:04 ./
- drwxr-xr-x 5 nova nova 4096 Jan 14 11:59 ../
- -rw-rw---- 1 libvirt-qemu kvm 1 Jan 14 12:05 console.log
- -rw-r--r-- 1 libvirt-qemu kvm 506134528 Jan 16 11:20 disk
- -rw-r--r-- 1 libvirt-qemu kvm 197120 Jan 14 12:04 disk.local
- -rw-rw-r-- 1 nova nova 1694 Jan 14 11:59 libvirt.xml
在實例目錄下面會有幾個文件。console日誌。disk,disk.local,libvirt.xml。一下進行說明:
- root@master:~# cd /var/lib/nova/instances/instance-00000006/
- root@master:/var/lib/nova/instances/instance-00000006# ls
- console.log disk disk.local libvirt.xml
- root@master:/var/lib/nova/instances/instance-00000006# qemu-img info disk
- image: disk
- file format: qcow2
- virtual size: 10G (10737418240 bytes)
- disk size: 483M
- cluster_size: 65536
- backing file: /var/lib/nova/instances/_base/09a1c65fb799ed070dd1e65b6296e19e656a040a_10 (actual path: /var/lib/nova/instances/_base/09a1c65fb799ed070dd1e65b6296e19e656a040a_10)
- root@master:/var/lib/nova/instances/instance-00000006# qemu-img info disk.local image: disk.local
- file format: qcow2
- virtual size: 20G (21474836480 bytes)
- disk size: 136K
- cluster_size: 65536
- 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裏面用到多種方式的存儲,對應的放案也不一樣,所以很容易搞錯了,提前做好認知工作是很有必要的。以上都是這些天來的實踐經驗,有問題的地方希望大家能幫俺指出哦!!