Openstack中虛擬機器的Resize功能詳解

2021-09-01 09:57:13 字數 4472 閱讀 1467

摘要:在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中改名為rpcbind

yum 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...