摘要:在openstack中生成vm後,由於業務的變更或業務量的增加,需要對vm進行擴充套件。目前openstack中提供了resize功能,本文對openstack中的原始碼進行了測試和分析,並進行了一定的修改。
環境:2臺centos6.2機器
hosta:10.28.170.93 8core 16g 實體機 安裝和執行全部openstack元件
hostb:10.28.168.55 4core 4g 虛擬機器 安裝和執行nova-compute nova-network
一.openstack中resize功能原始碼分析
openstack的resize功能預設的操作是在兩台host(宿主機)之間進行靜態的遷移(vm會重啟,記憶體狀態無法儲存),但是通過修改配置檔案,可以允許openstack在一台host上進行resize而不用遷移。
resize的過程中,vm主要經過以下幾個方法的處理:
def prep_resize(self, context, instance_uuid, instance_type_id, image,
**kwargs):
def prep_resize(self, context, instance_uuid, instance_type_id, image,
**kwargs):
def finish_resize(self, context, instance_uuid, migration_id, disk_info,
image):
詳細的**就不一一例舉了,有興趣的朋友可以自行閱讀原始碼。
主要的操作步驟如下:
1.檢查vm虛擬磁碟格式是否為qcow2,如果是的話,將磁碟格式轉換為raw
qemu-img convert -f qcow2 -o raw
2.將虛擬磁碟從host a scp到host b上
3.用以下命令對虛擬磁碟大小進行重置
qemu-img resize
e2fsck -fp
resize2fs
4.如果use_cow_images設定為true,則將磁碟重新轉為qcow2格式。
5.重新獲取網路配置,在host b上設定dhcp繫結和iptables規則。
6.修改xml檔案,重新啟動虛擬機器。
ok啦,整個resize的工作就完成了。下面重點講一下實際操作中遇到的問題和bug
二.在乙個單節點中進行resize
同一機器中進行resize需要在配置檔案nova.conf中新增:
--allow_resize_to_same_host=true
重啟服務:
service nova-api restart
service nova-compute restart
三.在多個節點上進行resize
3.1.採用共享儲存
3.1.1.在host a上安裝配置nfs伺服器
(1)檢查是否安裝nfs(centos6.2預設是安裝好了的)
rpm -qa|grep nfs如未安裝:
yum install nfs-utils.x86_64(64位系統)
yum install nfs-utils(32位系統)
(2)檢查安裝portmap服務,注意portmap在centos6中改名為rpcbindyum install rpcbind(centos6)
yum install portmap(centos5)(3配置nfs伺服器
vim /etc/exports
新增:
/home/nova/instances *(rw,sync,fsid=0,no_root_squash)這一行的含義是共享資料夾$novahomedir/instances ,可訪問該共享檔案的ip位址為*(所有ip)
許可權為:
rw 讀寫許可權
no_root_squash登入 nfs 主機使用分享目錄的使用者,如果是 root 的話,那麼對於這個分享的目錄來說,他就具有 root 的許可權
重啟服務
/etc/init.d/rpcbind restart
/etc/init.d/nfs restart
(4)配置nfs 客戶端 client掛載目錄檢查服務起是否可用:
showmount -e 10.28.170.93
mount -t nfs 10.28.170.93:/home/nova/instances /home/nova/instances配置開機自動掛載
vi /etc/fstab新增
10.28.170.93 :/home/nova/instances /home/nova/instances nfs nodev,ro,rsize=32768,wsize=32768 0 0
(5):常見問題及解決方法
permission denied
解決方法:1許可權問題,注意檢查許可權設定。注意*和'('是連線在一起的。
2檢查/home/nova/instance 的使用者組是不是nova:nova,如果客戶機和服務端nova的uid和gid不同,應該將其修改為一致的。用id命令檢視使用者uid、gid
命令格式
id [選項]... [使用者名稱]
命令選項
-a 忽略,相容其它版本
-z, –context 只輸出當前使用者的安全上下文
-g, –group 只輸出有效的gid
-g, –groups 輸出所有的gid
-n, –name 對於 -ugg 輸出名字而不是數值
-r, –real 對於 -ugg 輸出真實id而不是有效id
-u, –user 只輸出有效uid
–help 輸出幫助後退出
–version 輸出版本資訊後退出
修改uid、gid:vi /etc/passwd修改nova使用者
usermod -u 502 nova 和groupmod -g 502 nova
find / -user 501 -exec chown 502 {} \; 修改nova所有檔案的uid
3.2,使用本地儲存
3.2.1在host a和b配置ssh
vim /etc/passwd
將nova使用者名稱後的/sbin/nologin修改為 /bin/bash
passwd nova修改密碼
su nova切換到nova使用者,執行
ssh-keygen -t rsa
一路回車生成金鑰,並將金鑰copy到另一台機器中的nova使用者.ssh目錄下,這樣host a和b之間的ssh連線就不需要密碼。
四,bug
遷移後vm網路錯誤,vm遷移後在新的host上重建網路和更新iptables規則,而由於資料庫中的vm_host沒有及時更新為新的host,vm獲得的dhcp_server是錯誤的。同時在host上的dhcp服務是由dnsmasq提供的,dnsmasq按照/home/nova/networks/nova-br100.conf檔案中的配置對vm的mac和ip進行了繫結。而遷移後新的host中沒有在這個中新增vm的mac和ip繫結,因此即使vm獲得了正確的dhp_server位址,也無法獲得ip。
vm完成resize之後進入resize_verfiy狀態,這個時候openstack還保留有虛擬機器的舊資料,需要人工連線到vm中檢視vm的狀態是否正常,如果正常,需要自己呼叫confirm_resize介面,openstack會將舊的資料刪除。然而在confirm_resize的**中,沒有將虛擬機器狀態更新為active。這個也需要自己修改**。
openstack 虛擬機器 遷移
遷移。如果 你的 雲 系統 正在 使用 共享 儲存,使用 nova live migration 命令 就可以。首先,要 獲得 需要 被 遷移 的 例項 列表 nova list host c01.example.com all tenants 接下來,把 它們 乙個 乙個 移走 nova live...
openstack虛擬機器網路配置
登陸horizon介面 1.用admin使用者登陸,在管理員下把預設的網路刪除 先刪路由器 2.在管理員下用admin使用者建立新的網路 newnet 其中選擇外部,共享,管理員狀態選項,在 newnet 網路下建立新的子網 192.168.2.0 24,閘道器為 192.168.2.150,192...
openstack 虛擬機器映象製作
準備 伺服器作業系統 centos 7 準備一台安裝了vnc viewer客戶端的windows作業系統用於訪問伺服器裡啟動的虛擬機器介面 前提是windows系統能訪問伺服器 sle 12 sp2 sap x86 64 gm 1.iso複製到伺服器 home 下 qemu img create f...