国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

企業級KVM虛擬化平臺搭建實戰

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-03-11 09:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、概述

1.1 背景介紹

企業IT基礎設施經歷了從物理機時代到虛擬化時代的演進。傳統數據中心中,每臺物理服務器運行單一應用,資源利用率普遍不足20%。硬件采購周期長、擴容慢、運維成本高,難以滿足業務快速發展的需求。虛擬化技術的出現徹底改變了這一局面,通過在單臺物理機上運行多個虛擬機,將資源利用率提升至60%以上,同時實現了分鐘級的虛擬機創建和彈性伸縮。

KVM(Kernel-based Virtual Machine)是Linux內核內置的虛擬化解決方案,自2007年合并入Linux 2.6.20內核后,逐漸成為開源虛擬化領域的事實標準。與VMware vSphere、Microsoft Hyper-V等商業方案相比,KVM完全開源免費,性能接近原生,且與Linux生態深度集成。紅帽OpenStack、Proxmox VE、oVirt等企業級私有云平臺均以KVM作為底層虛擬化引擎。

2026年的KVM生態已相當成熟。Linux 6.x內核帶來了顯著的虛擬化性能提升,QEMU 9.x增加了對ARM64和RISC-V架構的完整支持,libvirt 10.x提供了更強大的管理能力。結合Ceph分布式存儲和Open vSwitch軟件定義網絡,KVM已具備構建大規模企業級私有云的全部能力。

1.2 技術特點

硬件輔助虛擬化

KVM依賴CPU的硬件虛擬化擴展(Intel VT-x或AMD-V)實現高效虛擬化。硬件虛擬化通過引入新的CPU特權級別(VMX root/non-root模式),使虛擬機能夠直接執行大部分指令而無需陷入宿主機處理,性能損耗控制在5%以內。相比純軟件模擬方案(如早期QEMU),性能提升數十倍。

全虛擬化與半虛擬化

KVM支持兩種虛擬化模式。全虛擬化模式下,Guest OS無需修改即可運行,QEMU模擬完整的硬件環境。半虛擬化模式通過virtio驅動,Guest OS直接與宿主機通信,避免了硬件模擬開銷,I/O性能接近原生。生產環境強烈建議使用virtio驅動。

內存虛擬化技術

KVM使用EPT(Extended Page Tables,Intel)或NPT(Nested Page Tables,AMD)技術加速內存虛擬化,減少地址轉換開銷。KSM(Kernel Same-page Merging)技術可自動合并虛擬機間的相同內存頁,在運行多個相同OS的虛擬機場景下顯著節省內存。Huge Pages支持減少TLB miss,提升內存訪問性能。

設備直通

VFIO框架支持將物理設備(如GPU、NVMe SSD、網卡)直接分配給虛擬機,虛擬機獨占設備,性能與物理機無異。SR-IOV技術允許單個物理網卡虛擬出多個虛擬功能(VF),每個VF可分配給不同虛擬機,實現高性能網絡虛擬化。

熱遷移能力

KVM支持在不停機的情況下將運行中的虛擬機從一臺物理機遷移到另一臺。熱遷移過程中,虛擬機內存通過迭代復制傳輸,業務中斷時間控制在毫秒級。這一能力是實現物理機維護、負載均衡和高可用的基礎。

1.3 適用場景

服務器整合

將多個低負載的物理服務器整合到少量高配置物理機上運行,減少硬件數量和機房空間占用,降低電力和冷卻成本。典型場景如將20臺利用率10%的物理機整合到3臺虛擬化主機上。

開發測試環境

為開發團隊提供自助式虛擬機服務,開發者可快速創建與生產環境一致的測試環境。虛擬機快照支持環境的快速回滾,便于測試驗證。相比云主機方案,私有云測試環境成本更低且數據不出內網。

私有云平臺

大中型企業構建內部云平臺,對外提供IaaS服務。業務部門通過自助門戶申請虛擬機資源,IT部門統一管理物理資源池。相比公有云,私有云在數據安全、合規性和長期成本方面具有優勢。

容器基礎設施

Kubernetes等容器平臺通常部署在虛擬機集群之上,而非直接運行在物理機上。虛擬化層提供了更好的隔離性和資源管理能力,便于集群的擴容縮容和故障恢復。

災難恢復

虛擬機作為文件存在,便于備份和跨站點復制。結合存儲復制技術,可實現分鐘級RPO的異地災備。災難發生時,在備份站點啟動虛擬機即可恢復業務。

1.4 環境要求

組件 最低配置 推薦配置 說明
CPU 支持VT-x/AMD-V Intel Xeon 4代+ / AMD EPYC 需在BIOS中啟用虛擬化
內存 16GB 256GB+ 每VM至少分配2GB
存儲 500GB HDD NVMe SSD + Ceph集群 虛擬機鏡像和數據存儲
網絡 1Gbps 10Gbps/25Gbps 建議雙網卡綁定
操作系統 RHEL 9 / Ubuntu 22.04 Rocky Linux 9.3 / Ubuntu 24.04 宿主機操作系統
內核版本 5.15+ 6.6+ LTS 推薦使用最新LTS內核
QEMU 8.0+ 9.1+ 虛擬機模擬器
libvirt 9.0+ 10.5+ 虛擬化管理API
virt-manager 4.0+ 4.1+ 圖形化管理工具

二、詳細步驟

2.1 準備工作

檢查CPU虛擬化支持

部署KVM前必須確認CPU支持硬件虛擬化:

# 檢查CPU虛擬化標志
# Intel CPU查找vmx,AMD CPU查找svm
grep -E'(vmx|svm)'/proc/cpuinfo | head -1

# 如果有輸出則表示支持,如:
# flags : ... vmx ...

# 使用專用工具檢查
apt install cpu-checker -y # Debian/Ubuntu
kvm-ok

# 期望輸出
INFO: /dev/kvm exists
KVM acceleration can be used

如果CPU支持虛擬化但/dev/kvm不存在,需要在BIOS中啟用虛擬化功能(Intel VT-x / AMD-V)。

檢查內核模塊

# 查看KVM模塊是否加載
lsmod | grep kvm

# 期望輸出(Intel平臺)
kvm_intel       385024 0
kvm         1142784 1 kvm_intel

# AMD平臺
kvm_amd        155648 0
kvm         1142784 1 kvm_amd

# 如未加載,手動加載模塊
modprobe kvm
modprobe kvm_intel # 或 kvm_amd

安裝KVM組件

RHEL/Rocky Linux/CentOS Stream:

# 安裝虛擬化組件
dnf install -y qemu-kvm libvirt libvirt-client virt-install virt-viewer virt-manager

# 安裝額外工具
dnf install -y bridge-utils virt-top libguestfs-tools

# 啟動libvirtd服務
systemctlenable--now libvirtd

# 驗證安裝
virsh version

Ubuntu/Debian:

# 安裝虛擬化組件
apt update
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst virt-manager

# 安裝額外工具
apt install -y bridge-utils libguestfs-tools cpu-checker

# 將當前用戶加入libvirt組
usermod -aG libvirt$USER
usermod -aG kvm$USER

# 啟動服務
systemctlenable--now libvirtd

# 驗證
virsh list --all

配置存儲池

libvirt使用存儲池管理虛擬機磁盤鏡像:

# 查看默認存儲池
virsh pool-list --all

# 創建目錄類型存儲池
virsh pool-define-as vmpool dir --target /data/libvirt/images
virsh pool-build vmpool
virsh pool-start vmpool
virsh pool-autostart vmpool

# 驗證存儲池
virsh pool-info vmpool

# 輸出示例
Name:      vmpool
UUID:      xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
State:     running
Persistent:   yes
Autostart:   yes
Capacity:    1.82 TiB
Allocation:   156.23 GiB
Available:   1.67 TiB

2.2 核心配置

配置網橋網絡

生產環境虛擬機通常使用網橋模式接入網絡,與物理機處于同一網段:

# 使用nmcli配置網橋(RHEL系)
# 創建網橋
nmcli connection addtypebridge ifname br0 con-name br0

# 配置網橋IP
nmcli connection modify br0 ipv4.addresses 192.168.1.10/24
nmcli connection modify br0 ipv4.gateway 192.168.1.1
nmcli connection modify br0 ipv4.dns"8.8.8.8 114.114.114.114"
nmcli connection modify br0 ipv4.method manual

# 將物理網卡加入網橋
nmcli connection addtypebridge-slave ifname eth0 master br0

# 關閉原網卡連接
nmcli connection down"Wired connection 1"

# 啟用網橋
nmcli connection up br0

Ubuntu使用netplan配置:

# /etc/netplan/01-bridge.yaml
network:
version:2
renderer:networkd
ethernets:
 eth0:
  dhcp4:false
bridges:
 br0:
  interfaces:[eth0]
  addresses:
   -192.168.1.10/24
  routes:
   -to:default
    via:192.168.1.1
  nameservers:
   addresses:[8.8.8.8,114.114.114.114]
  parameters:
   stp:false
   forward-delay:0
# 應用配置
netplan apply

# 驗證網橋
ip addr show br0
bridge link show

在libvirt中定義網橋網絡:

 

br0-network



# 定義并啟動網絡
virsh net-define /tmp/bridge-network.xml
virsh net-start br0-network
virsh net-autostart br0-network

# 查看網絡列表
virsh net-list --all

配置NAT網絡(隔離網絡)

開發測試環境可使用NAT模式,虛擬機通過宿主機NAT訪問外網:

 

dev-network

 
  
 



 
  
  
  
 


virsh net-define /tmp/nat-network.xml
virsh net-start dev-network
virsh net-autostart dev-network

配置存儲后端

本地LVM存儲(高性能):

# 創建LVM卷組用于虛擬機存儲
pvcreate /dev/sdb
vgcreate vg_vm /dev/sdb

# 定義LVM存儲池
virsh pool-define-as lvmpool logical --source-name vg_vm --target /dev/vg_vm
virsh pool-start lvmpool
virsh pool-autostart lvmpool

NFS共享存儲(支持熱遷移):

# 掛載NFS存儲
mkdir -p /data/nfs-vm
mount -t nfs nfs-server:/export/vm-images /data/nfs-vm

# 配置開機自動掛載
echo"nfs-server:/export/vm-images /data/nfs-vm nfs defaults,_netdev 0 0">> /etc/fstab

# 定義NFS存儲池
virsh pool-define-as nfspool netfs --source-host nfs-server --source-path /export/vm-images --target /data/nfs-vm
virsh pool-start nfspool
virsh pool-autostart nfspool

libvirt配置優化

編輯/etc/libvirt/libvirtd.conf:

# 監聽TCP連接(集群管理需要)
listen_tls = 0
listen_tcp = 1
tcp_port ="16509"
listen_addr ="0.0.0.0"
auth_tcp ="none"# 生產環境應配置SASL認證

# 日志配置
log_level = 3
log_outputs ="3/var/log/libvirt/libvirtd.log"

# 性能優化
max_clients = 5000
max_workers = 20
max_requests = 20
max_client_requests = 5

啟用TCP監聽:

# RHEL系
echo'LIBVIRTD_ARGS="--listen"'>> /etc/sysconfig/libvirtd

# Ubuntu
echo'libvirtd_opts="-l"'>> /etc/default/libvirtd

# 重啟服務
systemctl restart libvirtd

2.3 啟動和驗證

創建虛擬機

使用virt-install命令行創建虛擬機:

# 創建CentOS虛擬機
virt-install 
 --name centos9-vm1 
 --memory 4096 
 --vcpus 2 
 --cpu host-passthrough 
 --disk path=/data/libvirt/images/centos9-vm1.qcow2,size=50,format=qcow2,bus=virtio 
 --network network=br0-network,model=virtio 
 --os-variant centos-stream9 
 --graphics vnc,listen=0.0.0.0,port=5901 
 --cdrom /data/iso/CentOS-Stream-9-latest-x86_64-dvd1.iso 
 --boot cdrom,hd 
 --noautoconsole

# 參數說明
# --cpu host-passthrough: 透傳CPU特性,性能最優
# --disk bus=virtio: 使用virtio磁盤驅動
# --network model=virtio: 使用virtio網絡驅動

使用cloud-init快速創建虛擬機(推薦):

# 下載cloud鏡像
wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2

# 創建磁盤
qemu-img create -f qcow2 -F qcow2 -b CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2 centos9-vm1.qcow2 50G

# 創建cloud-init配置
cat > /tmp/cloud-init.yaml <

驗證虛擬機運行

# 查看虛擬機列表
virsh list --all

# 查看虛擬機詳情
virsh dominfo centos9-vm1

# 查看虛擬機IP地址
virsh domifaddr centos9-vm1

# 連接虛擬機控制臺
virsh console centos9-vm1

# VNC連接(如果配置了VNC)
virt-viewer centos9-vm1

基本生命周期管理

# 啟動虛擬機
virsh start centos9-vm1

# 優雅關機
virsh shutdown centos9-vm1

# 強制關機
virsh destroy centos9-vm1

# 重啟
virsh reboot centos9-vm1

# 暫停(掛起到內存)
virshsuspendcentos9-vm1

# 恢復
virsh resume centos9-vm1

# 設置開機自啟
virsh autostart centos9-vm1

# 刪除虛擬機(保留磁盤)
virsh undefine centos9-vm1

# 刪除虛擬機及磁盤
virsh undefine centos9-vm1 --remove-all-storage

三、示例代碼和配置

3.1 完整配置示例

虛擬機XML配置模板

 

production-vm
auto-generated

 sre-team
 e-commerce

16
16
8

 

 
 
  
 


 

 
  
 
 
 



 hvm
 
 



 
 
 
 
  
 



 
 
 


destroy
restart
restart


 /usr/libexec/qemu-kvm

  
 
  
  
  
  
 

  
 
  
  
  
  
 

  
 
  
  
  
  
  
 

  
 
  
   
  
 
 
  
 

  
 
  
 

  
 
  
  
 

  
 
  /dev/urandom
  
 

  
 
  
 


 

 
 
 
 
 
 
 
 
 


批量創建虛擬機腳本

#!/bin/bash
# batch-create-vm.sh - 批量創建虛擬機

set-e

# 配置參數
BASE_IMAGE="/data/templates/centos9-template.qcow2"
VM_DIR="/data/libvirt/images"
NETWORK="br0-network"
CLOUD_INIT_DIR="/tmp/cloud-init"

# 虛擬機配置列表
declare-A VMS=(
  ["web-server-01"]="409650" # 名稱="內存MB磁盤GB"
  ["web-server-02"]="409650"
  ["db-server-01"]="8192100"
  ["cache-server-01"]="409630"
)

# 創建cloud-init目錄
mkdir -p${CLOUD_INIT_DIR}

create_vm() {
 localname=$1
 localmemory=$2
 localvcpus=$3
 localdisk_size=$4

 echo"Creating VM:${name}(Memory:${memory}MB, CPU:${vcpus}, Disk:${disk_size}GB)"

 # 創建磁盤
  qemu-img create -f qcow2 -F qcow2 -b${BASE_IMAGE}${VM_DIR}/${name}.qcow2${disk_size}G

 # 生成cloud-init配置
  cat >${CLOUD_INIT_DIR}/${name}-cloud.yaml </dev/null | grep -oE'([0-9]{1,3}.){3}[0-9]{1,3}'| head -1)
 echo" ${vm}:${ip:-'Not assigned yet'}"
done

虛擬機熱遷移腳本

#!/bin/bash
# live-migrate.sh - 虛擬機熱遷移腳本

VM_NAME=$1
DEST_HOST=$2
SHARED_STORAGE="/data/nfs-vm"# 共享存儲路徑

if[[ -z"$VM_NAME"|| -z"$DEST_HOST"]];then
 echo"Usage:$0 "
 exit1
fi

# 檢查虛擬機狀態
vm_state=$(virsh domstate"$VM_NAME"2>/dev/null)
if[["$vm_state"!="running"]];then
 echo"Error: VM$VM_NAMEis not running (state:$vm_state)"
 exit1
fi

# 檢查目標主機連通性
if! virsh -c qemu+ssh://${DEST_HOST}/system list >/dev/null 2>&1;then
 echo"Error: Cannot connect to destination host$DEST_HOST"
 exit1
fi

# 檢查共享存儲
disk_path=$(virsh domblklist"$VM_NAME"| grep -E'.qcow2'| awk'{print $2}')
if[[ !"$disk_path"=~ ^${SHARED_STORAGE}]];then
 echo"Error: VM disk is not on shared storage. Live migration requires shared storage."
 echo"Disk path:$disk_path"
 exit1
fi

echo"Starting live migration of$VM_NAMEto$DEST_HOST..."

# 執行熱遷移
virsh migrate 
  --live 
  --persistent 
  --undefinesource 
  --verbose 
  --compressed 
  --auto-converge 
 "$VM_NAME"
 "qemu+ssh://${DEST_HOST}/system"

if[[ $? -eq 0 ]];then
 echo"Migration completed successfully"

 # 驗證遷移結果
 echo"Verifying on destination host..."
  virsh -c qemu+ssh://${DEST_HOST}/system dominfo"$VM_NAME"
else
 echo"Migration failed"
 exit1
fi

3.2 實際應用案例

案例一:電商公司私有云平臺

某電商公司年GMV 50億,原有30臺物理服務器分散部署各類應用,存在以下問題:

資源利用率不均,部分服務器負載不足10%

擴容周期長,新業務上線需要數周采購部署

災備能力弱,單機故障影響業務可用性

解決方案:采用KVM構建私有云平臺,配置如下:

硬件配置:
- 5臺Dell R750xa服務器(雙路Xeon 8380,512GB內存,8x 1.92TB NVMe)
- 2臺存儲服務器構建Ceph集群(24x 10TB HDD + 4x 3.84TB NVMe)
- 2臺萬兆交換機做網絡冗余

軟件架構:
- 宿主機:Rocky Linux 9.3 + KVM/QEMU 9.0
- 管理平臺:Proxmox VE 8.1(提供Web管理界面)
- 存儲:Ceph Pacific(RBD作為虛擬機磁盤后端)
- 網絡:Open vSwitch + VLAN隔離

實施效果:

物理服務器從30臺減少到5臺,機房空間節省80%

資源利用率提升到60%,年電費節省約15萬

新虛擬機創建時間從2周縮短到5分鐘

通過熱遷移實現物理機維護期間零業務中斷

案例二:金融機構開發測試云

某銀行科技部門需要為200+開發人員提供測試環境,原有方案是每人分配固定虛擬機,存在資源浪費和環境不一致問題。

解決方案:構建自助式開發測試云

# 虛擬機模板配置
templates:
-name:dev-centos9-small
 vcpus:2
 memory:4096
 disk:50G
 description:開發測試小規格

-name:dev-centos9-medium
 vcpus:4
 memory:8192
 disk:100G
 description:開發測試中規格

-name:db-mysql8-template
 vcpus:4
 memory:16384
 disk:200G
 preinstalled:mysql-8.0
 description:MySQL數據庫模板

# 資源配額
quotas:
per_user:
 max_vms:5
 max_vcpus:16
 max_memory:32768
 max_storage:500G

per_project:
 max_vms:50
 max_vcpus:200
 max_memory:512000
 max_storage:5T

配合WebVirtCloud開源管理界面,實現:

開發人員自助申請、創建、管理虛擬機

虛擬機自動過期回收(默認7天,可申請延期)

快照功能支持環境保存和快速回滾

與LDAP集成實現統一身份認證

案例三:GPU虛擬化機器學習平臺

AI團隊需要共享使用GPU資源進行模型訓練和推理,直接使用物理機存在資源爭搶問題。

解決方案:基于KVM+vGPU構建GPU虛擬化平臺

# 配置NVIDIA vGPU(需要NVIDIA vGPU軟件許可)

# 1. 安裝vGPU管理器
rpm -ivh nvidia-vgpu-kvm-xxx.rpm

# 2. 配置mdev設備
# 查看支持的vGPU類型
ls /sys/class/mdev_bus/000000.0/mdev_supported_types/

# 創建vGPU實例
echo"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"> /sys/class/mdev_bus/000000.0/mdev_supported_types/nvidia-256/create

# 3. 虛擬機配置GPU直通
cat >> vm-gpu.xml <
 
  
EOF

另一種方案是使用SR-IOV直通(適用于NVIDIA A100等支持MIG的GPU):

# 配置MIG模式
nvidia-smi -i 0 -mig 1

# 創建GPU實例
nvidia-smi mig -cgi 9,9,9,9,9,9,9 -C

# 使用VFIO直通給虛擬機

四、最佳實踐和注意事項

4.1 最佳實踐

性能優化

CPU優化:

# 使用host-passthrough模式透傳CPU特性
# XML配置


# CPU綁定(避免NUMA跨節點訪問)
virsh vcpupin vm-name 0 2
virsh vcpupin vm-name 1 3

# 查看NUMA拓撲
numactl -H
virsh numatune vm-name

內存優化:

# 啟用大頁內存
# 分配2MB大頁
echo4096 > /proc/sys/vm/nr_hugepages

# 永久配置
echo"vm.nr_hugepages=4096">> /etc/sysctl.conf

# XML配置使用大頁

 


# 啟用KSM(相同內存頁合并)
echo1 > /sys/kernel/mm/ksm/run
echo1000 > /sys/kernel/mm/ksm/sleep_millisecs

磁盤I/O優化:

# 使用virtio-blk或virtio-scsi
# 配置cache模式
# - none: 直接I/O,適合數據庫(需要Guest OS有回寫緩存)
# - writeback: 宿主機回寫緩存(性能好但不安全)
# - writethrough: 寫穿透(安全但性能差)

# XML配置

 
 ...


# 啟用TRIM支持(qcow2磁盤瘦身)
# Guest內執行
fstrim -av

網絡優化:

# 使用vhost-net加速

 
  # 多隊列


# 啟用多隊列virtio-net(Guest內)
ethtool -L eth0 combined 4

# SR-IOV直通(最高性能)
# 啟用SR-IOV
echo4 > /sys/class/net/eth0/device/sriov_numvfs

# 直通VF給虛擬機

 
  

安全加固

# 1. 限制libvirt訪問
# 使用UNIX socket認證
unix_sock_group ="libvirt"
unix_sock_ro_perms ="0770"
unix_sock_rw_perms ="0770"

# 2. 啟用SELinux/AppArmor
# SELinux配置
semanage boolean -m --on virt_use_fusefs
semanage boolean -m --on virt_use_nfs

# 3. 配置sVirt隔離
# 確保每個VM有獨立的SELinux上下文


# 4. 限制虛擬機資源

 20
 16



 500


# 5. 網絡隔離
# 使用VLAN或SDN隔離不同租戶/業務

 
 
  
 

高可用配置

# 方案一:基于共享存儲的HA
# 所有宿主機掛載相同NFS/Ceph存儲
# 任意宿主機故障時,在其他節點啟動VM

# 監控腳本示例
#!/bin/bash
HOSTS="kvm1 kvm2 kvm3"
SHARED_DIR="/data/nfs-vm"

forhostin$HOSTS;do
 if! ssh$host"virsh list">/dev/null 2>&1;then
   echo"Host$hostis down, starting VMs on backup host..."
   # 獲取故障主機的VM列表并在備用主機啟動
   forxmlin$(ls${SHARED_DIR}/configs/${host}/*.xml);do
      virsh define$xml
      virsh start $(basename$xml.xml)
   done
 fi
done

# 方案二:使用Pacemaker/Corosync構建集群
# 安裝集群軟件
dnf install pacemaker corosync pcs fence-agents-all

# 配置集群
pcs cluster setup --name kvm-cluster kvm1 kvm2 kvm3
pcs cluster start --all
pcs clusterenable--all

# 配置虛擬機資源
pcs resource create vm-webapp ocfVirtualDomain 
 config="/etc/libvirt/qemu/webapp.xml"
 hypervisor="qemu:///system"
 migration_transport="ssh"
 op start timeout="120s"
 op stop timeout="120s"
 op monitor timeout="30s"interval="10s"
 meta allow-migrate="true"

4.2 注意事項

問題類型 典型表現 根本原因 解決方案
虛擬機啟動失敗 "cannot access storage file" 存儲權限或SELinux阻止 chown qemu:qemu 或調整SELinux
網絡不通 Guest無法獲取IP 網橋配置錯誤或防火墻規則 檢查br配置、firewalld/iptables
性能差 I/O延遲高 未使用virtio驅動 安裝virtio驅動,配置cache=none
熱遷移失敗 "unable to connect" 目標主機libvirt未監聽TCP 啟用listen_tcp,檢查防火墻
CPU利用率虛高 steal time高 vCPU超分過度 減少vCPU超分比例(建議<3:1)
內存不足 OOM Killer殺進程 內存超分過度或未配balloon 配置balloon驅動,減少超分
快照失敗 "domain is not active" 內部快照需要VM運行 使用外部快照或在VM運行時執行
Windows藍屏 WHEA錯誤 CPU特性不兼容 使用host-model或指定CPU型號

磁盤空間管理

# qcow2鏡像會隨使用增長,需要定期瘦身

# 方法1:Guest內TRIM + 鏡像壓縮
# Guest執行
fstrim -av

# 宿主機壓縮鏡像(需要停機)
virsh shutdown vm-name
qemu-img convert -O qcow2 -c vm.qcow2 vm-new.qcow2
mv vm-new.qcow2 vm.qcow2
virsh start vm-name

# 方法2:在線瘦身(QEMU 4.0+)
virsh blockresize vm-name vda --size 50G
# Guest內擴展分區

# 監控磁盤實際使用
qemu-img info --output=json vm.qcow2 | jq'.["actual-size"]'

五、故障排查和監控

5.1 故障排查

虛擬機無法啟動

# 步驟1:查看詳細錯誤信息
virsh start vm-name 2>&1

# 步驟2:檢查libvirt日志
tail -100 /var/log/libvirt/qemu/vm-name.log
journalctl -u libvirtd -f

# 步驟3:驗證XML配置
virsh dumpxml vm-name > /tmp/vm.xml
virt-xml-validate /tmp/vm.xml

# 步驟4:檢查存儲和權限
ls -la /data/libvirt/images/vm-name.qcow2
# 確保屬主是qemu:qemu(RHEL)或libvirt-qemu:kvm(Ubuntu)

# 步驟5:檢查SELinux
ausearch -m avc -ts recent
# 如有SELinux拒絕,執行
restorecon -Rv /data/libvirt/images/

網絡故障排查

# 檢查網橋狀態
ip link show br0
bridge link show

# 檢查虛擬機網卡
virsh domiflist vm-name

# 檢查TAP設備
ip link show | grep tap

# 檢查ARP表
ip neigh show

# 抓包分析
tcpdump -i br0 -n host 192.168.1.100

# 檢查libvirt網絡
virsh net-info br0-network
virsh net-dhcp-leases br0-network

性能問題診斷

# CPU相關
# 查看vCPU與物理CPU映射
virsh vcpuinfo vm-name

# 查看steal time(Guest內)
vmstat 1

# 查看CPU調度延遲
perf kvmstatlive

# 內存相關
# 查看KSM狀態
cat /sys/kernel/mm/ksm/pages_sharing
cat /sys/kernel/mm/ksm/pages_shared

# 查看balloon狀態
virsh dommemstat vm-name

# I/O相關
# 查看塊設備統計
virsh domblkstat vm-name vda

# 使用blktrace跟蹤
blktrace -d /dev/sdb -o - | blkparse -i -

# 網絡相關
# 查看網絡統計
virsh domifstat vm-name vnet0

# 查看vhost-net使用情況
ethtool -S vnet0

5.2 性能監控

virt-top實時監控

# 安裝
dnf install virt-top

# 運行
virt-top

# 輸出示例
virt-top 0915 - x86_64 8/8CPU 1200MHz 64304MB
3 domains, 1 active, 1 running, 0 sleeping, 0 paused, 2 inactive D:0 O:0 X:0
CPU: 12.5% Mem: 24576 MB (24576 MB by guests)

 ID S RDRQ WRRQ RXBY TXBY %CPU %MEM  TIME  NAME
  5 R  0 156 91K 12K 8.3 25.0  5:32.61 production-vm

Prometheus + libvirt-exporter監控

# docker-compose.yml
version:'3'
services:
libvirt-exporter:
 image:alekseifaikin/libvirt-exporter:latest
 volumes:
  -/var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock:ro
 ports:
  -"9177:9177"
 command:--libvirt.uri="qemu:///system"

關鍵監控指標:

# Prometheus告警規則
groups:
-name:kvm
 rules:
  -alert:VMHighCPU
   expr:libvirt_domain_info_cpu_time_seconds_total>90
   for:5m
   labels:
    severity:warning
   annotations:
    summary:"VM CPU使用率過高"

  -alert:VMMemoryPressure
   expr:libvirt_domain_info_memory_actual_bytes/libvirt_domain_info_memory_maximum_bytes>0.95
   for:5m
   labels:
    severity:warning
   annotations:
    summary:"VM內存使用率過高"

  -alert:VMDiskIOHigh
   expr:rate(libvirt_domain_block_stats_write_bytes_total[5m])>100000000
   for:5m
   labels:
    severity:info
   annotations:
    summary:"VM磁盤寫入速率高"

Grafana儀表板

{
"title":"KVM虛擬機監控",
"panels": [
  {
  "title":"VM CPU使用率",
  "type":"graph",
  "targets": [
    {
    "expr":"rate(libvirt_domain_info_cpu_time_seconds_total[1m]) * 100",
    "legendFormat":"{{domain}}"
    }
   ]
  },
  {
  "title":"VM內存使用",
  "type":"graph",
  "targets": [
    {
    "expr":"libvirt_domain_info_memory_actual_bytes / 1024 / 1024 / 1024",
    "legendFormat":"{{domain}}"
    }
   ]
  },
  {
  "title":"VM磁盤IOPS",
  "type":"graph",
  "targets": [
    {
    "expr":"rate(libvirt_domain_block_stats_read_requests_total[1m])",
    "legendFormat":"{{domain}} read"
    },
    {
    "expr":"rate(libvirt_domain_block_stats_write_requests_total[1m])",
    "legendFormat":"{{domain}} write"
    }
   ]
  }
 ]
}

5.3 備份與恢復

虛擬機備份策略

#!/bin/bash
# vm-backup.sh - 虛擬機完整備份腳本

VM_NAME=$1
BACKUP_DIR="/backup/vms/$(date +%Y%m%d)"
mkdir -p${BACKUP_DIR}

# 方法1:關機備份(最可靠)
virsh shutdown${VM_NAME}
sleep 30

# 備份磁盤
cp /data/libvirt/images/${VM_NAME}.qcow2${BACKUP_DIR}/

# 備份配置
virsh dumpxml${VM_NAME}>${BACKUP_DIR}/${VM_NAME}.xml

virsh start${VM_NAME}

# 方法2:在線快照備份
# 創建外部快照
virsh snapshot-create-as${VM_NAME}backup-snap 
 --disk-only 
 --atomic 
 --diskspec vda,snapshot=external,file=${BACKUP_DIR}/${VM_NAME}-snap.qcow2

# 備份原始磁盤(此時已變為只讀backing file)
cp /data/libvirt/images/${VM_NAME}.qcow2${BACKUP_DIR}/${VM_NAME}-backup.qcow2

# 合并快照(塊提交)
virsh blockcommit${VM_NAME}vda 
 --active 
 --pivot 
 --verbose

# 清理快照文件
rm${BACKUP_DIR}/${VM_NAME}-snap.qcow2

增量備份(使用dirty bitmap)

# 啟用臟頁追蹤(QEMU 4.0+)
virsh qemu-monitor-command${VM_NAME}--pretty 
'{"execute": "block-dirty-bitmap-add", "arguments": {"node": "drive-virtio-disk0", "name": "backup-bitmap"}}'

# 執行增量備份
virsh qemu-monitor-command${VM_NAME}--pretty 
'{"execute": "drive-backup", "arguments": {"device": "drive-virtio-disk0", "sync": "incremental", "bitmap": "backup-bitmap", "target": "/backup/vms/vm-incr.qcow2", "format": "qcow2"}}'

恢復虛擬機

# 從備份恢復
# 1. 復制磁盤鏡像
cp /backup/vms/20250109/vm-name.qcow2 /data/libvirt/images/

# 2. 恢復配置
virsh define /backup/vms/20250109/vm-name.xml

# 3. 啟動虛擬機
virsh start vm-name

# 快照回滾
# 查看快照列表
virsh snapshot-list vm-name

# 回滾到指定快照
virsh snapshot-revert vm-name snapshot-name

# 刪除快照
virsh snapshot-delete vm-name snapshot-name

六、總結

6.1 技術要點回顧

KVM作為Linux內核原生的虛擬化技術,具備高性能、開源免費、生態豐富的優勢,是構建企業級私有云的理想選擇。核心技術棧包括:

KVM內核模塊提供CPU和內存虛擬化

QEMU提供設備模擬和虛擬機管理

libvirt提供統一的管理API和工具

virtio提供高性能的半虛擬化I/O

生產環境部署要點:

CPU使用host-passthrough模式最大化性能

存儲使用virtio-blk/scsi配合cache=none確保數據安全

網絡使用virtio-net配合vhost-net或SR-IOV獲得接近原生性能

大頁內存和NUMA綁定用于性能敏感場景

共享存儲是實現熱遷移和高可用的前提

運維管理要點:

制定合理的資源超分比例(CPU 3:1,內存 1.5:1為參考值)

建立完善的備份恢復機制

監控關鍵指標,設置告警閾值

定期進行災難恢復演練

6.2 進階學習方向

容器化管理平臺

學習Proxmox VE、oVirt等開源虛擬化管理平臺,它們提供了Web界面、用戶權限管理、資源配額等企業級功能,比直接使用libvirt更適合生產環境。

OpenStack私有云

OpenStack是更大規模私有云的選擇,提供了計算(Nova)、網絡(Neutron)、存儲(Cinder/Swift)、鏡像(Glance)等完整的云服務組件。學習OpenStack可以理解云平臺的完整架構。

軟件定義網絡

深入學習Open vSwitch和Linux網絡虛擬化技術,掌握VXLAN、GRE等overlay網絡實現,理解SDN控制器如何管理虛擬網絡。

分布式存儲

學習Ceph分布式存儲系統,掌握RBD塊存儲與KVM的集成,實現存儲的高可用和彈性擴展。

6.3 參考資料

KVM官方網站:https://www.linux-kvm.org/

libvirt官方文檔:https://libvirt.org/docs.html

QEMU文檔:https://www.qemu.org/docs/master/

Red Hat虛擬化文檔:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_and_managing_virtualization/

Proxmox VE:https://pve.proxmox.com/wiki/Main_Page

oVirt項目:https://www.ovirt.org/documentation/

附錄

A. 命令速查表

操作 命令
列出所有VM virsh list --all
啟動VM virsh start
關閉VM virsh shutdown
強制關機 virsh destroy
重啟VM virsh reboot
暫停VM virsh suspend
恢復VM virsh resume
刪除VM virsh undefine
查看VM信息 virsh dominfo
查看VM配置 virsh dumpxml
編輯VM配置 virsh edit
連接控制臺 virsh console
查看VNC端口 virsh vncdisplay
創建快照 virsh snapshot-create-as
恢復快照 virsh snapshot-revert
熱遷移 virsh migrate --live qemu+ssh://host/system
查看網絡 virsh net-list --all
查看存儲池 virsh pool-list --all
查看塊設備 virsh domblklist
查看網卡 virsh domiflist
查看IP地址 virsh domifaddr

B. 配置參數詳解

libvirt domain XML核心元素

元素 說明 示例值
虛擬機名稱 production-vm
最大內存 16
vCPU數量 8
CPU模式 host-passthrough / host-model / custom
虛擬化類型 hvm(全虛擬化)
磁盤類型 file / block / network
緩存模式 none / writeback / writethrough
網絡類型 bridge / network / direct
圖形類型 vnc / spice
通道設備 qemu-ga / spice-vdagent

qemu-img常用命令

操作 命令
創建磁盤 qemu-img create -f qcow2 disk.qcow2 50G
查看信息 qemu-img info disk.qcow2
格式轉換 qemu-img convert -f raw -O qcow2 disk.raw disk.qcow2
壓縮鏡像 qemu-img convert -O qcow2 -c in.qcow2 out.qcow2
調整大小 qemu-img resize disk.qcow2 +10G
創建快照 qemu-img snapshot -c snap1 disk.qcow2
基于backing創建 qemu-img create -f qcow2 -b base.qcow2 new.qcow2
提交更改 qemu-img commit overlay.qcow2
檢查一致性 qemu-img check disk.qcow2

C. 術語表

術語 英文 說明
宿主機 Host 運行虛擬機的物理服務器
虛擬機 Guest/VM 在宿主機上運行的虛擬化實例
全虛擬化 Full Virtualization Guest OS無需修改即可運行
半虛擬化 Para-virtualization Guest使用特殊驅動與Host通信
硬件輔助虛擬化 Hardware-assisted 使用CPU VT-x/AMD-V擴展
直通 Passthrough 將物理設備直接分配給虛擬機
超分 Overcommit 分配的虛擬資源超過物理資源
熱遷移 Live Migration 不停機遷移運行中的虛擬機
快照 Snapshot 保存虛擬機某一時刻的狀態
存儲池 Storage Pool libvirt管理的存儲資源集合
NUMA Non-Uniform Memory Access 非一致性內存訪問架構
KSM Kernel Same-page Merging 內核相同頁合并技術
大頁 Huge Pages 使用更大的內存頁減少TLB miss
virtio Virtual I/O 高性能半虛擬化I/O框架
vhost Virtual Host 內核態virtio后端加速
SR-IOV Single Root I/O Virtualization 單根I/O虛擬化技術

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11767

    瀏覽量

    219100
  • 服務器
    +關注

    關注

    14

    文章

    10264

    瀏覽量

    91528
  • KVM
    KVM
    +關注

    關注

    0

    文章

    206

    瀏覽量

    13668

原文標題:KVM虛擬化實戰:構建企業級私有云平臺

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SAS走進企業級存儲應用

    SAS走進企業級存儲應用串行SCSI(SAS)的出現已經有幾年了。2005年,在主要的接口技術中,由于OEM服務器制造商和系統集成商開始提供串行SCSI解決方案,企業級存儲市場將會顯現革命性的進展
    發表于 11-13 21:58

    睿訊企業級機房解決方案創新中心落戶深圳

    睿訊企業級機房解決方案創新中心落戶深圳4月26日,睿訊企業級機房解決方案創新中心在睿訊深圳辦公室亮相。這是繼睿訊KVM行業首家形象店在華強北賽格廣場成立之后的又一創舉,是睿訊為廣大機房客戶打造的機房
    發表于 05-11 14:07

    睿訊企業級機房解決方案創新中心落戶深圳

    睿訊企業級機房解決方案創新中心落戶深圳      4月26日,睿訊企業級機房解決方案創新中心在睿訊深圳辦公室
    發表于 05-14 14:50

    2017年企業級SaaS服務發展趨勢?

    企業級SaaS服務經過2014年的萌芽,2015年的發展,2016年的高速增長,越來越多的企業更加傾向于通過云計算降低成本并實現資源優化配置。據不完全統計,截止到2017年,國內企業級服務各領
    發表于 07-17 10:22

    阿里云彈性計算Apsara Block Storage正式發布 構建企業級分布式塊存儲服務平臺

    摘要: 6月13日,阿里云宣布彈性計算Apsara Block Storage產品正式發布,為企業級客戶量身打造,構建高性能、彈性、可靠的大規模分布式塊存儲服務平臺。 Apsara Block
    發表于 06-14 17:09

    大話企業級Android開發

    大話企業級Android開發
    發表于 07-11 19:39

    大話企業級Android開發

    大話企業級Android開發
    發表于 03-31 11:37

    企業級的LInux系統日志管理

    企業級LInux系統日志管理
    發表于 05-29 11:33

    大話企業級Android開發

    大話企業級Android開發
    發表于 03-05 11:15

    用于高度虛擬云環境的可擴展企業級SAN交換機

    電子發燒友網站提供《用于高度虛擬云環境的可擴展企業級SAN交換機.pdf》資料免費下載
    發表于 08-29 14:26 ?0次下載
    用于高度<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>云環境的可擴展<b class='flag-5'>企業級</b>SAN交換機

    深入KVM虛擬之構建高效、可擴展的虛擬環境

    的計算機,而且每個邏輯計算機 它可以是不同操作系統 虛擬技術:可以擴大硬件容量,單個cpu模擬出多個cpu并行, 允許一個平臺上同時運行多個操作系統,應用程序都可以在相互獨立 的空間內運行,而且互不影響。 為什么
    的頭像 發表于 11-26 17:22 ?2450次閱讀
    深入<b class='flag-5'>KVM</b><b class='flag-5'>虛擬</b><b class='flag-5'>化</b>之構建高效、可擴展的<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>環境

    hyper v 虛擬,hyper-v虛擬企業級虛擬化解決方案的全面解析

    企業管理中,任務的分配和執行是核心環節之一。然而,傳統方式往往因效率低下而影響整體工作進度。批量管理工具的出現,為企業管理提供了全新的思路和方法。今天就為大家介紹hyper-v虛擬
    的頭像 發表于 01-24 14:21 ?2768次閱讀
    hyper v <b class='flag-5'>虛擬</b><b class='flag-5'>化</b>,hyper-v<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>:<b class='flag-5'>企業級</b><b class='flag-5'>虛擬</b>化解決方案的全面解析

    瀾舟智搭:企業級智能Agent搭建平臺

    瀾舟科技推出的瀾舟智搭,是其企業級大模型應用三件套的重要組成部分,也是基于“一橫N縱”AI原生應用架構精心打造的企業智能Agent應用搭建工具平臺。該
    的頭像 發表于 02-19 14:36 ?1047次閱讀

    DeepSeek企業級部署實戰指南:以Raksmart企業服務器為例

    隨著人工智能技術的快速發展,DeepSeek作為一款強大的AI工具,正在成為企業智能轉型的重要驅動力。本文將結合Raksmart企業服務器的實際案例,詳細解析DeepSeek的企業級
    的頭像 發表于 03-12 11:33 ?1133次閱讀

    KVM虛擬環境部署與性能優化教程

    在云計算時代,虛擬技術已經成為企業IT基礎設施的核心組件。作為一名在生產環境管理過上千臺虛擬機的運維工程師,我深知選擇正確的虛擬
    的頭像 發表于 09-08 17:13 ?1519次閱讀