手把手教你玩转KVM虚拟化---KVM介绍和安装

本文介绍KVM虚拟化技术,涵盖KVM架构、软件安装及GuestOS安装方法。KVM是首个融入Linux内核的hypervisor,支持x86虚拟化,并具备企业级特性如活动迁移。

一.KVM虚拟化技术简介

1.kvm架构

img

2.KVM架构解析

从rhel6开始使⽤,红帽公司直接把KVM的模块做成了内核的⼀部分。 xen⽤在rhel6之前的企业版中默认内核不⽀持,需要重新安装带xen功能的内核 KVM 针对运⾏在 x86 硬件上的、驻留在内核中的虚拟化基础结构。

KVM 是第⼀个成为原⽣ Linux 内核 (2.6.20)的⼀部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有。

这个 hypervisor 提供 x86 虚拟化,同时拥有到 PowerPC® 和 IA64 的通道。另外,KVM 最近还添加了 对对称多处理(SMP)主机(和来宾)的⽀持,并且⽀持企业级特性,⽐如活动迁移(允许来宾操作系 统在物理服务器之间迁移)。

KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为⼀个hypervisor。KVM 为⽀持 hypervisor 指令的硬件平台提供完整的虚拟化(⽐如 Intel® Virtualization Technology [Intel VT] 或 AMD Virtualization [AMD-V] 产品)。KVM 还⽀持准虚拟化来宾操作系统,包括 Linux 和 Windows®。

这种技术由两个组件实现。第⼀个是可加载的 KVM 模块,当在 Linux 内核安装该模块之后,它就可以 管理虚拟化硬件,并通过 /proc ⽂件系统公开其功能。第⼆个组件⽤于 PC 平台模拟,它是由修改版 QEMU 提供的。QEMU 作为⽤户空间进程执⾏,并且在来宾操作系统请求⽅⾯与内核协调。

当新的操作系统在 KVM 上启动时(通过⼀个称为 KVM 的实⽤程序),它就成为宿主操作系统的⼀个 进程,因此就可以像其他进程⼀样调度它。但与传统的 Linux 进程不⼀样,来宾操作系统被 hypervisor 标识为处于 “来宾” 模式(独⽴于内核和⽤户模式)。

每个来宾操作系统都是通过 /dev/KVM 设备映射的,它们拥有⾃⼰的虚拟地址空间,该空间映射到主机 内核的物理地址空间。如前所述,KVM 使⽤底层硬件的虚拟化⽀持来提供完整的(原⽣)虚拟化。I/O 请求通过主机内核映射到在主机上(hypervisor)执⾏的 QEMU 进程。 KVM 在 Linux 环境中以主机的⽅式运⾏,不过只要底层硬件虚拟化⽀持,它就能够⽀持⼤量的来宾操 作系统.

二.KVM软件安装

1.环境准备(准备一台可联网的centos)
2.查看CPU是否支持VT技术
cat /proc/cpuinfo | grep -E 'vmx|svm'
3.清理环境,卸载KVM
yum remove `rpm -qa | egrep 'qemu|virt|KVM'` -y
rm -rf /var/lib/libvirt /etc/libvirt/
4.安装软件
#Centos6
yum groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools" -y

#Centos7
yum install *qemu* *virt* librbd1-devel -y

#qemu-KVM: 主包
#libvirt:API接⼝
#virt-manager:图形管理程序


#Centos8
#yum 组安装已经可以使⽤了
#问题:在进⾏组安装的时候会出现关于rpm版本的错误问题
#解决
yum upgrade rpm -y

#安装成功之后还是要单独安装virt-manager⼯具
5.启动服务
systemctl start libvirtd
6.查看模块是否加载
lsmod | grep KVM
#查看是否有 KVM_intel 和KVM 这两个模块

三. GuestOS安装

  • 图形⽅式(⾮常重要 ⾮常简单)
  • 完全⽂本模式(现场配置虚拟机的规格)
  • 命令⾏模式(重中之重 最常⽤ 模板镜像+配置⽂件 ⽅式配置规格)
  • 通过⻜机驾驶舱安装和管理虚拟 机
yum install *cockpit* -y
 systemctl start cockpi
 访问: 浏览器访问 ``服务器地址:9090  
1.图形界面安装
virt-manager

img

2. 完全文本方式安装

注意:不需要讲,了解即可 极端情况-服务器没有图形 客户端也没有图形

virt-install --connect qemu:///system -n vm6 -r 512 --disk
path=/virhost/vmware/vm6.img,size=7 --os-type=linux --os-variant=rhel6 --
vcpus=1 --network bridge=br0 --location=http://127.0.0.1/rhel6u4 -x
console=ttyS0 --nographics

virt-install --connect qemu:///system -n vm9 -r 2048 --disk
path=/var/lib/libvirt/images/vm9.img,size=7 --os-type=linux --osvariant=centos7.0 --vcpus=1 --location=ftp://192.168.100.230/centos7u3 -x
console=ttyS0 --nographics 

注意:

\1. ⽤这种⽅式安装的操作系统,⼤⼩写会胡乱变化,不影响远程操作

\2. 内存必须2G以上 查看KVM⽀持的OS版本

man virt-install 

osinfo-query os | grep centos

排错 :

 安装过程中: 
⼿动配置IP地址 到url位置找不到路径,要返回去⼿动选择url,重新配置url为ftp://192.168.100.230/rhel6u4,这 ⾥的ip不要写127.0.0.1⽽是br0的ip 
给虚拟机指定的内存必须⼤于2048M,不然报错如下: dracut-initqueue[552]: /sbin/dmsquash-live-root: line 273: printf: write error: No space left on device  
3.命令行模式安装

虚拟机的组成部分

  1. 虚拟机配置⽂件
root@noviciate ~]# ls /etc/libvirt/qemu
networks vm1.xml
  1. 储存虚拟机的介质
[root@noviciate ~]# ls /var/lib/libvirt/images/
vm1.img
  1. 根据配置⽂件创建虚拟机
1.需要有磁盘镜像⽂件:
[root@noviciate ~]# cp vm1.img vm2.img
2.需要有配置⽂件
[root@noviciate ~]# cp vm1.xml vm2.xml
3.配置⽂件需要修改必要的内容
4.创建虚拟机:
[root@noviciate ~]# virsh define /etc/libvirt/qemu/vm2.xml
  1. 实例

模板镜像+配置⽂件 ⽅式创建虚拟机

一.KVM虚拟化技术简介
1.kvm架构

2.KVM架构解析
 从rhel6开始使⽤,红帽公司直接把KVM的模块做成了内核的⼀部分。 xen⽤在rhel6之前的企业版中默认内核不⽀持,需要重新安装带xen功能的内核 KVM 针对运⾏在 x86 硬件上的、驻留在内核中的虚拟化基础结构。
KVM 是第⼀个成为原⽣ Linux 内核 (2.6.20)的⼀部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有。
 这个 hypervisor 提供 x86 虚拟化,同时拥有到 PowerPC® 和 IA64 的通道。另外,KVM 最近还添加了 对对称多处理(SMP)主机(和来宾)的⽀持,并且⽀持企业级特性,⽐如活动迁移(允许来宾操作系 统在物理服务器之间迁移)。
 KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为⼀个hypervisor。KVM 为⽀持 hypervisor 指令的硬件平台提供完整的虚拟化(⽐如 Intel® Virtualization Technology [Intel VT] 或 AMD Virtualization [AMD-V] 产品)。KVM 还⽀持准虚拟化来宾操作系统,包括 Linux 和 Windows®。 
这种技术由两个组件实现。第⼀个是可加载的 KVM 模块,当在 Linux 内核安装该模块之后,它就可以 管理虚拟化硬件,并通过 /proc ⽂件系统公开其功能。第⼆个组件⽤于 PC 平台模拟,它是由修改版 QEMU 提供的。QEMU 作为⽤户空间进程执⾏,并且在来宾操作系统请求⽅⾯与内核协调。
 当新的操作系统在 KVM 上启动时(通过⼀个称为 KVM 的实⽤程序),它就成为宿主操作系统的⼀个 进程,因此就可以像其他进程⼀样调度它。但与传统的 Linux 进程不⼀样,来宾操作系统被 hypervisor 标识为处于 "来宾" 模式(独⽴于内核和⽤户模式)。 
每个来宾操作系统都是通过 /dev/KVM 设备映射的,它们拥有⾃⼰的虚拟地址空间,该空间映射到主机 内核的物理地址空间。如前所述,KVM 使⽤底层硬件的虚拟化⽀持来提供完整的(原⽣)虚拟化。I/O 请求通过主机内核映射到在主机上(hypervisor)执⾏的 QEMU 进程。 KVM 在 Linux 环境中以主机的⽅式运⾏,不过只要底层硬件虚拟化⽀持,它就能够⽀持⼤量的来宾操 作系统.  
二.KVM软件安装
1.环境准备(准备一台可联网的centos)
2.查看CPU是否支持VT技术
cat /proc/cpuinfo | grep -E 'vmx|svm'

3.清理环境,卸载KVM
yum remove `rpm -qa | egrep 'qemu|virt|KVM'` -y
rm -rf /var/lib/libvirt /etc/libvirt/
4.安装软件
#Centos6
yum groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools" -y

#Centos7
yum install *qemu* *virt* librbd1-devel -y

#qemu-KVM: 主包
#libvirt:API接⼝
#virt-manager:图形管理程序


#Centos8
#yum 组安装已经可以使⽤了
#问题:在进⾏组安装的时候会出现关于rpm版本的错误问题
#解决
yum upgrade rpm -y

#安装成功之后还是要单独安装virt-manager⼯具

5.启动服务
systemctl start libvirtd
6.查看模块是否加载
lsmod | grep KVM
#查看是否有 KVM_intel 和KVM 这两个模块
三. GuestOS安装
● 图形⽅式(⾮常重要 ⾮常简单) 
● 完全⽂本模式(现场配置虚拟机的规格)
● 命令⾏模式(重中之重 最常⽤ 模板镜像+配置⽂件 ⽅式配置规格)
● 通过⻜机驾驶舱安装和管理虚拟 机
yum install *cockpit* -y
 systemctl start cockpi
 访问: 浏览器访问 服务器地址:9090  
1.图形界面安装
virt-manager

2. 完全文本方式安装
 注意:不需要讲,了解即可 极端情况-服务器没有图形 客户端也没有图形    
virt-install --connect qemu:///system -n vm6 -r 512 --disk
path=/virhost/vmware/vm6.img,size=7 --os-type=linux --os-variant=rhel6 --
vcpus=1 --network bridge=br0 --location=http://127.0.0.1/rhel6u4 -x
console=ttyS0 --nographics

virt-install --connect qemu:///system -n vm9 -r 2048 --disk
path=/var/lib/libvirt/images/vm9.img,size=7 --os-type=linux --osvariant=centos7.0 --vcpus=1 --location=ftp://192.168.100.230/centos7u3 -x
console=ttyS0 --nographics 
 注意: 
1. ⽤这种⽅式安装的操作系统,⼤⼩写会胡乱变化,不影响远程操作 
2. 内存必须2G以上 查看KVM⽀持的OS版本  
man virt-install 

osinfo-query os | grep centos

 排错  :
 安装过程中: 
⼿动配置IP地址 到url位置找不到路径,要返回去⼿动选择url,重新配置url为ftp://192.168.100.230/rhel6u4,这 ⾥的ip不要写127.0.0.1⽽是br0的ip 
给虚拟机指定的内存必须⼤于2048M,不然报错如下: dracut-initqueue[552]: /sbin/dmsquash-live-root: line 273: printf: write error: No space left on device  
3.命令行模式安装
 虚拟机的组成部分  
1.  虚拟机配置⽂件  
root@noviciate ~]# ls /etc/libvirt/qemu
networks vm1.xml
2. 储存虚拟机的介质
[root@noviciate ~]# ls /var/lib/libvirt/images/
vm1.img
3. 根据配置⽂件创建虚拟机  
1.需要有磁盘镜像⽂件:
[root@noviciate ~]# cp vm1.img vm2.img
2.需要有配置⽂件
[root@noviciate ~]# cp vm1.xml vm2.xml
3.配置⽂件需要修改必要的内容
4.创建虚拟机:
[root@noviciate ~]# virsh define /etc/libvirt/qemu/vm2.xml
4.   实例  
 模板镜像+配置⽂件 ⽅式创建虚拟机  
1.拷⻉模板镜像和配置⽂件
[root@KVM ~][root@noviciate ~]# cp /var/lib/libvirt/images/vm2.img
/var/lib/libvirt/images/vm3.img
[root@KVM ~][root@noviciate ~]# cp /etc/libvirt/qemu/vm2.xml
/etc/libvirt/qemu/vm3.xml
2.修改配置⽂件
[root@noviciate ~]# vim /etc/libvirt/qemu/vm3.xml
<domain type='KVM'>
<name>vm3</name>
<uuid>a2f62549-c6b7-4b8f-a8e2-c14edda35a78</uuid>
<memory unit='KiB'>2099200</memory>
<currentMemory unit='KiB'>2099200</currentMemory>
千锋云计算学院
<vcpu placement='static'>2</vcpu>
<os>
 <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
 <boot dev='hd'/>
</os>
<features>
 <acpi/>
 <apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
 <model fallback='allow'>Haswell-noTSX</model>
</cpu>
<clock offset='utc'>
 <timer name='rtc' tickpolicy='catchup'/>
 <timer name='pit' tickpolicy='delay'/>
 <timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
 <suspend-to-mem enabled='no'/>
 <suspend-to-disk enabled='no'/>
</pm>
<devices>
 <emulator>/usr/libexec/qemu-KVM</emulator>
 <disk type='file' device='disk'>
 <driver name='qemu' type='qcow2'/>
 <source file='/var/lib/libvirt/images/vm3.im'/>
 <target dev='vda' bus='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/>
 </disk>
 <disk type='file' device='disk'>
 <driver name='qemu' type='qcow2'/>
 <source file='/var/lib/libvirt/images/vm3-1.img'/>
 <target dev='vda' bus='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x16'
function='0x0'/>
 </disk>
 <controller type='usb' index='0' model='ich9-ehci1'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x7'/>
 </controller>
 <controller type='usb' index='0' model='ich9-uhci1'>
 <master startport='0'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0' multifunction='on'/>
 </controller>
 <controller type='usb' index='0' model='ich9-uhci2'>
 <master startport='2'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x1'/>
 </controller>
 <controller type='usb' index='0' model='ich9-uhci3'>
 <master startport='4'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x2'/>
 </controller>
 <controller type='pci' index='0' model='pci-root'/>
 <controller type='virtio-serial' index='0'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/>
 </controller>
 <interface type='network'>
 <mac address='52:54:00:f2:28:6f'/>
 <source network='default'/>
 <model type='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
 </interface>
 <serial type='pty'>
 <target type='isa-serial' port='0'>
 <model name='isa-serial'/>
 </target>
 </serial>
 <console type='pty'>
 <target type='serial' port='0'/>
 </console>
 <channel type='unix'>
 <target type='virtio' name='org.qemu.guest_agent.0'/>
 <address type='virtio-serial' controller='0' bus='0' port='1'/>
 </channel>
 <input type='mouse' bus='ps2'/>
 <input type='keyboard' bus='ps2'/>
 <memballoon model='virtio'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x07'
function='0x0'/>
 </memballoon>
</devices>
</domain> 
<think>嗯,用户再次询问KVM配置FC-SAN的问题,看来对存储性能有较高要求。之前已经给出详细配置指南,但用户特别强调参考站内引用内容,其中提到FC SAN适合高性能场景但成本高,而分布式存储适合CPU密集型应用。用户可能正在评估不同存储方案的性价比。 注意到用户引用中强调“细节非常多但可通过Google解决”,说明用户具备一定技术基础,需要的是关键点提示而非手把手学。因此本次回复要聚焦核心配置逻辑,省略基础命令细节,突出与性能相关的操作(如多路径队列优化)。 用户引用的性价比对比很有意思,虽然当前问题不涉及但后续可能追问,可以预埋相关回答点。另外用户两次都提到高可用性,回复中必须包含故障转移验证方法。 技术层面需注意几个易错点:一是WWPN/WWNN容易混淆,示例中要明确区分;二是多路径策略选择,round-robin虽通用但某些阵列需特定策略;三是虚拟机磁盘总线类型,virtio-scsi比IDE性能高但需驱动支持。 最后保留性能优化方案对比的扩展问题,这类用户通常后续会深入比较不同存储方案。</think>以下是KVM配置FC-SAN存储的**核心步骤**及**关键注意事项**,结合行业实践引用内容[^1][^2]整理: --- ### 一、配置流程概览 ```mermaid graph LR A[硬件准备] --> B[操作系统层配置] B --> C[多路径优化] C --> D[KVM存储池定义] ``` --- ### 二、详细步骤 #### 1. **硬件与基础配置** - **HBA卡初始化** - 确认HBA卡被内核识别(需NPIV支持): ```bash lspci | grep -i fibre # 检查HBA状态 cat /sys/class/fc_host/host*/port_name # 获取WWPN ``` - **最佳实践**:在SAN交换机配置Zoning,将KVM主机的WWPN与存储阵列LUN绑定[^2]。 #### 2. **操作系统层操作** - **扫描存储设备** ```bash echo "1" > /sys/class/fc_host/hostX/issue_lip # 触发链路扫描 rescan-scsi-bus.sh # 刷新SCSI设备(安装sg3-utils包) ls /dev/disk/by-id/ # 查看持久化设备路径 ``` - **多路径配置**(关键!) 编辑`/etc/multipath.conf`: ```conf devices { device { vendor "NETAPP" # 替换为存储厂商 path_grouping_policy multibus path_selector "round-robin 0" rr_weight uniform } } ``` 启用服务: ```bash systemctl restart multipathd multipath -ll # 验证多路径聚合(如mpath0) ``` #### 3. **KVM存储池定义** - **创建XML配置文件**(`fcsan_pool.xml`): ```xml <pool type='scsi'> <name>san_pool</name> <source> <adapter type='fc_host' wwnn='20:00:00:25:b5:a0:00:01' wwpn='20:00:00:25:b5:a0:00:02'/> <!-- 替换实际WWNN/WWPN --> </source> <target> <path>/dev/disk/by-id</path> <!-- 持久化路径防变更 --> </target> </pool> ``` - **激活存储池**: ```bash virsh pool-define fcsan_pool.xml virsh pool-start san_pool virsh pool-autostart san_pool # 开机自启 ``` #### 4. **挂载到虚拟机** ```bash virt-install --name vm01 \ --disk vol=san_pool/mpath0,device=disk,bus=scsi \ --os-variant centos7.0 ``` > **注**:`bus=scsi`或`bus=virtio`可最大化FC-SAN性能[^1] --- ### 三、关键优化与验证 | 优化项 | 命令/方法 | |-----------------|--------------------------------------------------------------------------| | **队列深度** | `echo 128 > /sys/block/sdX/queue/nr_requests` (匹配存储阵列能力) | | **I/O调度器** | `echo deadline > /sys/block/sdX/queue/scheduler` | | **多路径验证** | 模拟路径故障:`echo 0 > /sys/block/sdc/device/delete` 观察自动切换 | | **性能测试** | `fio --filename=/dev/mapper/mpath0 --rw=randread --ioengine=libaio --direct=1` | --- ### 四、与其他存储方案的对比 根据引用[^1]: | 存储类型 | 性能 | 成本 | 适用场景 | |---------------|--------|--------|----------------------------| | **FC-SAN** | ⭐⭐⭐⭐⭐ | 高 | 数据库、高性能计算 | | **IP-SAN/NAS**| ⭐⭐⭐⭐ | 中 | 通用虚拟化、文件共享 | | **分布式存储**| ⭐⭐ | 低 | CPU密集型应用(如编译服务器)| > **说明**:FC-SAN虽成本高,但为KVM提供**微秒级延迟****稳定带宽**,是核心业务首选[^1]。 --- ### 五、故障排查要点 1. **设备未识别**: ```bash dmesg | grep -i scsi # 检查HBA驱动日志 systool -c fc_host -v # 验证FC端口状态 ``` 2. **性能下降**: - 检查SAN交换机端口误码率 - 确认多路径负载均衡策略生效 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值