1. KVM概述与环境规划
KVM是一个开源的虚拟化平台,基于Linux内核,允许用户在单个物理服务器上运行多个虚拟机。KVM是企业级虚拟化的重要工具,适用于各种规模的组织。更多学习教程www.fgedu.net.cn
1.1 KVM版本说明
KVM目前主要版本随Linux内核发布,本教程以Linux 5.4内核中的KVM为例进行详细讲解。KVM作为Linux内核的一部分,其功能和性能会随着内核版本的更新而提升。
$ kvm –version
QEMU emulator version 4.2.0 (qemu-kvm-4.2.0-34.el8)
# 查看系统版本
$ cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”8.9″
ID=”ol”
PRETTY_NAME=”Oracle Linux Server 8.9″
# 查看内核版本
$ uname -r
5.4.17-2136.302.7.2.el8uek.x86_64
1.2 环境规划
本次安装环境规划如下:
kvm01.fgedu.net.cn (192.168.1.148) – KVM主服务器
kvm02.fgedu.net.cn (192.168.1.149) – KVM备用服务器
KVM版本:随Linux 5.4内核
存储配置:
– 本地存储:512GB SSD
– 共享存储:10TB iSCSI
网络配置:
– 管理网络:192.168.1.0/24
– VM网络:192.168.10.0/24
– 迁移网络:192.168.20.0/24
2. 硬件环境要求
KVM作为企业级虚拟化平台,对硬件资源要求较高。学习交流加群风哥微信: itpux-com
2.1 物理主机环境要求
– CPU:至少4核,支持Intel VT-x或AMD-V虚拟化技术
– 内存:至少16GB,建议32GB以上
– 磁盘:至少100GB可用空间,建议使用SSD
– 网络:至少2个千兆以太网接口
# 检查CPU虚拟化支持
# lscpu | grep -E “(vmx|svm)”
# 检查内存
# free -h
total used free shared buff/cache available
Mem: 32G 2.4G 29.1G 128M 512M 29.4G
Swap: 8G 0B 8G
# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 512G 50G 462G 10% /
3. KVM安装配置
完成环境准备后,开始安装KVM。
3.1 安装KVM
# dnf install -y qemu-kvm libvirt virt-install virt-manager
# 启动libvirt服务
# systemctl start libvirtd
# systemctl enable libvirtd
# 验证安装
# kvm –version
QEMU emulator version 4.2.0 (qemu-kvm-4.2.0-34.el8)
# 验证libvirt服务
# systemctl status libvirtd
3.2 初始化KVM
# virt-manager
# 完成初始化向导
# 1. 接受许可协议
# 2. 配置用户体验设置
# 3. 完成初始化
# 验证KVM启动
# virsh list –all
4. KVM配置优化
为了提高KVM的性能和稳定性,需要进行一些配置优化。
4.1 基本配置优化
# vi /etc/libvirt/qemu.conf
# 配置内存
memory_backing_dir = “/dev/shm”
# 配置CPU
cpu_mode = “host-passthrough”
# 重启libvirt服务
# systemctl restart libvirtd
4.2 高可用配置
# 1. 安装集群软件
# dnf install -y corosync pacemaker
# 2. 配置corosync
# vi /etc/corosync/corosync.conf
# 3. 启动集群服务
# systemctl start corosync
# systemctl enable corosync
# systemctl start pacemaker
# systemctl enable pacemaker
# 4. 验证集群状态
# crm status
5. 网络配置
KVM支持多种网络连接模式,包括NAT、桥接和仅主机模式。
5.1 NAT网络配置
# 查看默认网络
# virsh net-list –all
# 启动默认网络
# virsh net-start default
# 配置默认网络自动启动
# virsh net-autostart default
5.2 桥接网络配置
# 1. 安装桥接工具
# dnf install -y bridge-utils
# 2. 配置桥接网络
# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=”br0″
TYPE=”Bridge”
BOOTPROTO=”static”
IPADDR=”192.168.1.148″
NETMASK=”255.255.255.0″
GATEWAY=”192.168.1.1″
DNS1=”114.114.114.114″
ONBOOT=”yes”
# 3. 配置物理网卡
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=”ens33″
TYPE=”Ethernet”
BOOTPROTO=”none”
ONBOOT=”yes”
BRIDGE=”br0″
# 4. 重启网络
# systemctl restart NetworkManager
# 5. 创建桥接网络
# virsh net-define /dev/stdin <
EOF
# 6. 启动桥接网络
# virsh net-start br0
# 7. 配置桥接网络自动启动
# virsh net-autostart br0
6. 存储配置
KVM支持多种存储选项,包括本地存储和共享存储。
6.1 本地存储配置
# 1. 创建存储目录
# mkdir -p /data/kvm/images
# 2. 配置libvirt存储池
# virsh pool-define-as –name local –type dir –target /data/kvm/images
# virsh pool-build local
# virsh pool-start local
# virsh pool-autostart local
# 3. 验证存储池
# virsh pool-list
6.2 共享存储配置
# 1. 安装iSCSI客户端
# dnf install -y iscsi-initiator-utils
# 2. 发现iSCSI目标
# iscsiadm -m discovery -t st -p 192.168.30.100
# 3. 登录iSCSI目标
# iscsiadm -m node -T iqn.2023-04.com.fgedu:target01 -p 192.168.30.100 -l
# 4. 查看iSCSI设备
# ls -la /dev/disk/by-path/
# 5. 格式化iSCSI设备
# mkfs.ext4 /dev/sdb
# 6. 挂载iSCSI设备
# mkdir -p /mnt/iscsi
# mount /dev/sdb /mnt/iscsi
# 7. 配置libvirt存储池
# virsh pool-define-as –name shared –type dir –target /mnt/iscsi
# virsh pool-build shared
# virsh pool-start shared
# virsh pool-autostart shared
# 8. 验证存储池
# virsh pool-list
7. 虚拟机配置
KVM允许用户创建和配置虚拟机,以运行不同的操作系统。
7.1 创建虚拟机
# virt-install \
–name ubuntu2204 \
–ram 8192 \
–vcpus 4 \
–disk path=/data/kvm/images/ubuntu2204.qcow2,size=100 \
–cdrom /path/to/ubuntu-22.04-desktop-amd64.iso \
–network network=default \
–graphics vnc,listen=0.0.0.0 \
–noautoconsole
# 查看虚拟机状态
# virsh list –all
7.2 配置虚拟机
# virsh edit ubuntu2204
# 配置硬件
# 保存配置
# 按Esc键,输入:wq保存退出
# 重启虚拟机
# virsh reboot ubuntu2204
8. 性能优化
在生产环境中,需要对KVM进行性能优化以提高虚拟机运行效率。from:www.itpux.com
8.1 内存优化
# virsh edit ubuntu2204
# 重启虚拟机
# virsh reboot ubuntu2204
8.2 处理器优化
# virsh edit ubuntu2204
# 重启虚拟机
# virsh reboot ubuntu2204
8.3 存储优化
# 1. 创建预分配虚拟磁盘
# qemu-img create -f qcow2 -o preallocation=full /data/kvm/images/ubuntu2204.qcow2 100G
# 2. 整理虚拟磁盘
# qemu-img convert -O qcow2 /data/kvm/images/ubuntu2204.qcow2 /data/kvm/images/ubuntu2204-new.qcow2
# mv /data/kvm/images/ubuntu2204-new.qcow2 /data/kvm/images/ubuntu2204.qcow2
9. 升级迁移
本节介绍KVM的版本升级和虚拟机迁移方法。
9.1 KVM版本升级
# virsh dumpxml ubuntu2204 > /backup/ubuntu2204.xml
# qemu-img convert -O qcow2 /data/kvm/images/ubuntu2204.qcow2 /backup/ubuntu2204.qcow2
# 升级KVM
# dnf update -y qemu-kvm libvirt
# 验证升级
# kvm –version
9.2 虚拟机迁移
# 1. 导出虚拟机
# virsh dumpxml ubuntu2204 > /backup/ubuntu2204.xml
# scp /backup/ubuntu2204.xml root@kvm02:/backup/
# scp /data/kvm/images/ubuntu2204.qcow2 root@kvm02:/data/kvm/images/
# 2. 在目标服务器上导入虚拟机
# virsh define /backup/ubuntu2204.xml
# virsh start ubuntu2204
# 3. 验证迁移
# virsh list –all
10. 备份恢复
本节介绍KVM的备份和恢复方法。
10.1 虚拟机备份
# vi /data/scripts/backup_vm.sh
#!/bin/bash
BACKUP_DIR=”/backup/kvm”
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 停止虚拟机
virsh shutdown ubuntu2204
# 备份虚拟机配置
virsh dumpxml ubuntu2204 > $BACKUP_DIR/ubuntu2204-$DATE.xml
# 备份虚拟磁盘
qemu-img convert -O qcow2 /data/kvm/images/ubuntu2204.qcow2 $BACKUP_DIR/ubuntu2204-$DATE.qcow2
# 启动虚拟机
virsh start ubuntu2204
# 清理旧备份(保留7天)
find $BACKUP_DIR -type f -mtime +7 -exec rm -f {} \;
# 添加执行权限
# chmod +x /data/scripts/backup_vm.sh
# 添加定时任务
# crontab -e
0 0 * * * /data/scripts/backup_vm.sh
10.2 虚拟机恢复
# virsh shutdown ubuntu2204
# 清理现有虚拟机
# virsh undefine ubuntu2204
# rm -f /data/kvm/images/ubuntu2204.qcow2
# 恢复虚拟机
# cp /backup/kvm/ubuntu2204-20230405.qcow2 /data/kvm/images/
# virsh define /backup/kvm/ubuntu2204-20230405.xml
# 启动虚拟机
# virsh start ubuntu2204
# 验证恢复
# virsh list –all
10.3 虚拟机监控
# vi /data/scripts/monitor_vm.sh
#!/bin/bash
LOG_FILE=”/var/log/kvm_monitor.log”
ALERT_EMAIL=”admin@fgedu.net.cn”
# 创建日志目录
mkdir -p /var/log
check_vm_status() {
echo “$(date): Checking VM status…” >> $LOG_FILE
vm_status=$(virsh list –all | grep ubuntu2204 | awk ‘{print $3}’)
if [ “$vm_status” != “running” ]; then
echo “$(date): VM ubuntu2204 is not running” >> $LOG_FILE
echo “VM ubuntu2204 is not running” | mail -s “VM Alert” $ALERT_EMAIL
virsh start ubuntu2204
else
echo “$(date): VM ubuntu2204 is running” >> $LOG_FILE
fi
}
check_host_resources() {
echo “$(date): Checking host resources…” >> $LOG_FILE
memory_usage=$(free -m | grep Mem | awk ‘{print $3/$2 * 100}’)
cpu_usage=$(top -bn1 | grep “Cpu(s)” | awk ‘{print $2 + $4}’)
disk_usage=$(df -h / | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
if [ $(echo “$memory_usage > 90” | bc) -eq 1 ]; then
echo “$(date): Memory usage warning: $memory_usage%” >> $LOG_FILE
echo “Memory usage warning: $memory_usage%” | mail -s “Host Alert” $ALERT_EMAIL
fi
if [ $(echo “$cpu_usage > 90” | bc) -eq 1 ]; then
echo “$(date): CPU usage warning: $cpu_usage%” >> $LOG_FILE
echo “CPU usage warning: $cpu_usage%” | mail -s “Host Alert” $ALERT_EMAIL
fi
if [ $disk_usage -gt 90 ]; then
echo “$(date): Disk usage warning: $disk_usage%” >> $LOG_FILE
echo “Disk usage warning: $disk_usage%” | mail -s “Host Alert” $ALERT_EMAIL
fi
}
main() {
check_vm_status
check_host_resources
}
main
# 添加执行权限
# chmod +x /data/scripts/monitor_vm.sh
# 添加定时任务
# crontab -e
*/15 * * * * /data/scripts/monitor_vm.sh
通过以上步骤,KVM安装配置、性能优化、升级迁移、备份恢复等内容已全部完成。KVM作为开源虚拟化平台,能够高效地运行多个虚拟机,是企业级虚拟化的重要工具。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
