在Linux环境中建立两台虚拟主机是常见的实验或生产环境配置需求,通常可通过虚拟化技术(如KVM、Xen)或容器技术(如Docker)实现,本文以KVM(Kernel-based Virtual Machine)为例,详细讲解在Linux系统(以Ubuntu 22.04 LTS为例)中创建和管理两台虚拟主机的完整流程,包括环境准备、虚拟机安装、网络配置及系统优化等关键步骤。
环境准备:安装KVM虚拟化平台
在创建虚拟机前,需确保宿主机硬件支持虚拟化(CPU的VT-x/AMD-V功能),并安装KVM及相关管理工具,以Ubuntu为例,执行以下命令:
# 更新系统软件包列表 sudo apt update && sudo apt upgrade -y # 安装KVM及依赖工具 sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager # 验证KVM模块是否加载 lsmod | grep kvm # 若输出kvm_intel或kvm_amd,表示模块已加载成功 # 将当前用户添加到libvirt组,避免使用sudo执行虚拟机管理命令 sudo usermod -aG libvirt $USER newgrp libvirt # 重新加载用户组权限
创建虚拟磁盘文件
虚拟机需要独立的磁盘文件存储系统数据,使用qemu-img
工具创建两个虚拟磁盘(分别对应两台虚拟机),格式为qcow2(支持动态扩容):
# 创建第一台虚拟机的磁盘(20GB) qemu-img create -f qcow2 /var/lib/libvirt/images/vm1_disk.qcow2 20G # 创建第二台虚拟机的磁盘(20GB) qemu-img create -f qcow2 /var/lib/libvirt/images/vm2_disk.qcow2 20G
准备虚拟机安装镜像
下载Linux发行版ISO镜像(如Ubuntu Server 22.04 ISO),并将其复制到宿主机的镜像存储目录(/var/lib/libvirt/images/
),便于虚拟机安装时使用:
# 示例:下载Ubuntu Server 22.04 ISO(需提前通过wget或其他工具获取) wget https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-live-server-amd64.iso -P /var/lib/libvirt/images/
创建第一台虚拟机(vm1)
通过virt-install
命令创建并安装第一台虚拟机,过程中需指定虚拟机名称、内存、CPU、磁盘、镜像及网络配置:
sudo virt-install --name vm1 --memory 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/vm1_disk.qcow2,format=qcow2 --cdrom /var/lib/libvirt/images/ubuntu-22.04.3-live-server-amd64.iso --network network=default --graphics spice --os-variant ubuntu22.04
参数说明:
--name
:虚拟机名称(唯一标识);--memory
:分配内存大小(MB);--vcpus
:虚拟CPU核心数;--disk
:指定磁盘路径及格式;--cdrom
:安装镜像路径;--network
:网络配置(default
为libvirt默认的NAT网络);--graphics
:图形显示协议(spice/vnc),用于远程连接虚拟机控制台;--os-variant
:优化系统安装参数(匹配发行版版本)。
安装过程中,通过virt-viewer
工具连接虚拟机图形界面(或使用virsh console vm1
进入文本安装界面),按提示完成系统安装(如选择语言、时区、创建用户等)。
创建第二台虚拟机(vm2)
重复类似步骤创建第二台虚拟机,需确保名称、磁盘路径等参数唯一:
sudo virt-install --name vm2 --memory 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/vm2_disk.qcow2,format=qcow2 --cdrom /var/lib/libvirt/images/ubuntu-22.04.3-live-server-amd64.iso --network network=default --graphics spice --os-variant ubuntu22.04
虚拟机网络配置
默认情况下,虚拟机通过NAT模式接入网络,宿主机作为网关,虚拟机可访问外部网络,但外部无法直接访问虚拟机,若需实现虚拟机之间或外部访问,需调整网络配置。
查看虚拟机网络状态
# 查看libvirt默认网络 virsh net-list --all # 查看虚拟机网络接口 virsh domiflist vm1 virsh domiflist vm2
配置静态IP(可选)
若需为虚拟机分配固定IP,可在虚拟机内部修改网络配置,以Ubuntu为例:
编辑/etc/netplan/01-netcfg.yaml
文件(文件名可能因版本不同),内容如下:
network: version: 2 ethernets: enp1s0: # 虚拟机网卡名称(通过`ip a`查看) dhcp4: no addresses: [192.168.122.100/24] # 自定义IP(需在NAT网段范围内) gateway4: 192.168.122.1 # 宿主机NAT网关 nameservers: addresses: [8.8.8.8, 1.1.1.1]
执行netplan apply
使配置生效,两台虚拟机分别分配不同IP(如vm1:192.168.122.100,vm2:192.168.122.101)。
创建桥接网络(实现外部访问)
若需让虚拟机直接接入宿主机所在物理网络(如通过局域网访问),需创建桥接网络:
# 安装桥接工具 sudo apt install -y bridge-utils # 创建网桥接口 sudo brctl addbr br0 # 将宿主机物理网卡(如ens33)加入网桥,并配置静态IP sudo ip addr add 192.168.1.100/24 dev br0 # 宿机IP sudo ip link set ens33 up sudo brctl addif br0 ens33 sudo ip link set br0 up # 修改libvirt默认网络为桥接模式(或创建新网络) # 编辑 /etc/libvirt/qemu/network.xml,将<network>中的<forward mode='nat'/>改为<forward mode='bridge'/> # 重启libvirt网络服务 sudo systemctl restart libvirtd
创建虚拟机时,通过--network bridge=br0
参数使用桥接网络,虚拟机将获得与宿主机同网段的IP,实现外部访问。
虚拟机管理常用命令
# 启动虚拟机 virsh start vm1 # 关闭虚拟机( graceful shutdown) virsh shutdown vm1 # 强制关闭(相当于电源键) virsh destroy vm1 # 查看虚拟机状态 virsh list --all # 进入虚拟机控制台(文本模式) virsh console vm1 # 暂停/恢复虚拟机 virsh suspend vm1 virsh resume vm1 # 删除虚拟机(需先关闭) virsh undefine vm1
虚拟机性能优化建议
- 磁盘性能:若虚拟机需频繁读写,可使用
cache=none
或cache=writeback
参数调整磁盘缓存模式,避免I/O瓶颈:# 修改虚拟机磁盘配置 virsh attach-disk vm1 --source /path/to/disk.qcow2 --target vdb --cache writeback
- CPU/内存:通过
virsh edit vm1
修改XML配置,调整CPU亲和性或内存超分比例,避免资源竞争。 - 网络优化:若虚拟机网络流量大,可启用
virtio
网卡驱动(默认已支持),提升网络吞吐量。
虚拟机配置对比表
以下为两台虚拟机的典型配置对比示例:
配置项 | vm1 | vm2 |
---|---|---|
名称 | vm1 | vm2 |
内存 | 2GB | 2GB |
CPU核心数 | 2 | 2 |
磁盘路径 | /var/lib/libvirt/images/vm1_disk.qcow2 | /var/lib/libvirt/images/vm2_disk.qcow2 |
磁盘大小 | 20GB(动态扩容) | 20GB(动态扩容) |
网络模式 | NAT(默认) | 桥接(br0) |
静态IP | 168.122.100 | 168.1.101 |
操作系统 | Ubuntu 22.04 LTS Server | Ubuntu 22.04 LTS Server |
SSH端口 | 22 | 22 |
相关问答FAQs
问题1:如何解决虚拟机无法连接外网的问题?
解答:首先检查虚拟机网络模式是否为NAT,并确认宿主机已开启IP转发(sysctl net.ipv4.ip_forward
返回1),若为NAT模式,可通过virsh net-dhcp-default
查看DHCP分配的IP范围,确保虚拟机获取到有效IP,若仍无法访问,检查宿主机防火墙(如ufw)是否阻止了出站流量,执行sudo ufw allow out
放行。
问题2:如何实现两台虚拟机之间的文件共享?
解答:可通过以下方式实现:
- NFS共享:在一台虚拟机上安装NFS服务(
sudo apt install nfs-kernel-server
),导出共享目录(如/srv/share
),另一台虚拟机通过mount
命令挂载该目录; - Samba共享:若需Windows兼容性,安装Samba(
sudo apt install samba
),配置共享目录并设置访问权限; - SCP/Rsync:通过SSH协议直接传输文件,例如在vm1上执行
scp /path/to/file user@vm2_ip:/remote/path
。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复