UNIX/Linux系统管理技术手册-读书笔记-第二十四章
《UNIX/Linux系统管理技术手册-读书笔记-第二十四章
虚拟化
1. 虚拟化概述
1.1 什么是虚拟化
| 概念 | 说明 | 能做什么 |
|---|---|---|
| 虚拟化 | 在同一物理硬件上同时运行多个操作系统实例 | 提高硬件利用率,隔离应用,支持多租户 |
| hypervisor(虚拟机监控器) | 协调VM与底层硬件的软件层,管理资源分配和隔离 | 让多个guest OS共享同一物理硬件 |
| guest OS | 运行在虚拟机中的操作系统(可异构:Linux+FreeBSD+Windows) | 每个VM有独立的OS和应用程序栈 |
1.2 Hypervisor类型
| 类型 | 说明 | 代表 |
|---|---|---|
| 1型(裸金属hypervisor) | 直接运行在硬件之上,无需宿主OS | VMware ESXi、XenServer、KVM(Linux内核模块) |
| 2型(托管hypervisor) | 运行在通用OS之上的用户空间应用 | Oracle VirtualBox、VMware Workstation、FreeBSD bhyve |
1型与2型界线已模糊(如KVM是内核模块,既像1型又集成在OS中),现代实践更关注功能而非分类。
1.3 虚拟化模式演进
| 模式 | 说明 | 性能 | 对guest要求 |
|---|---|---|---|
| 全虚拟化 | hypervisor完整仿真硬件(磁盘/网卡/BIOS等) | 较低(转换开销) | guest OS无需修改 |
| 半虚拟化(PV) | guest OS主动与hypervisor协作访问硬件 | 高(>10倍提升) | guest内核需大量修改 |
| 硬件辅助虚拟化 | Intel VT / AMD-V CPU扩展,硬件直接虚拟化 | 优秀 | guest OS无需修改 |
| 半虚拟化驱动(PVHVM) | 硬件辅助CPU虚拟化 + 半虚拟化设备驱动 | 接近裸金属 | 仅需安装专用驱动 |
| PVH(现代混合模式) | 硬件虚拟化 + 少量guest内核半虚拟化代码 | 最佳 | guest内核有最低要求 |
现代hypervisor自动为guest选择最优模式,管理员通常无需手动干预。保持软件更新即可自动受益。
1.4 虚拟机 vs 容器(表24.1)
| 对比维度 | 虚拟机(VM) | 容器 |
|---|---|---|
| 启动时间 | 1~2分钟(完整引导) | <1秒(直接运行进程) |
| 生命周期 | 长期存活 | 频繁替换(短暂) |
| 存储 | 专用虚拟磁盘(GB级) | 分层镜像(MB级) |
| 密度 | 每物理主机数十个 | 每物理/虚拟主机数百个 |
| 隔离性 | 完全隔离(独立OS) | 共享宿主机内核(轻量隔离) |
| OS多样性 | 可运行不同OS(Linux+Windows) | 必须与宿主机内核一致 |
典型组合:虚拟机提供硬件隔离边界 → 其上运行容器实现高密度应用部署(“bin packing”)。
2. Linux虚拟化
2.1 Xen
| 特性 | 说明 |
|---|---|
| 类型 | 裸金属1型hypervisor,半虚拟化起家 |
| 架构 | dom0(特权域,管理硬件+其他域) + domU(非特权域,运行guest) |
| 性能开销 | 0.1% ~ 3.5% |
| 应用 | AWS、IBM SoftLayer等大型公有云 |
| 当前状态 | Linux基金会项目,持续活跃 |
Xen dom0工具与配置:
| 路径/命令 | 用途 |
|---|---|
/etc/xen/ |
主配置目录 |
/etc/xen/auto/ |
引导时自动启动的guest配置 |
xl |
Xen管理命令行工具(新,替代xm) |
xl create /etc/xen/guest.cfg |
启动guest |
xl list |
列出所有域 |
xl console <id> |
连接到guest控制台 |
xl shutdown <id> / xl destroy <id> |
优雅关机/强制停止 |
guest配置文件示例(/etc/xen/chef.cfg):
builder = "hvm" # 硬件辅助虚拟化
name = "chef"
memory = 512
vcpus = 1
disk = ['file:/home/ben/chef.img,xvda,w']
vif = ['bridge=virbr0']
boot = "dc"
2.2 KVM(Kernel-based Virtual Machine)
| 特性 | 说明 |
|---|---|
| 类型 | Linux内核模块,将内核变为hypervisor |
| 架构 | VM是普通Linux进程(可用ps/top/kill管理) |
| 虚拟化方式 | 默认全虚拟化(Intel VT/AMD-V),可选半虚拟化驱动 |
| guest支持 | Linux、FreeBSD、Windows等 |
| 管理工具 | virsh、virt-install |
KVM管理命令:
|
|
💡 KVM与Linux内核的无缝集成是其最大优势——VM即进程,可用标准Linux工具管理。
2.3 Xen vs KVM 选型
| 对比 | Xen | KVM |
|---|---|---|
| 架构 | 独立hypervisor + dom0管理域 | Linux内核原生集成 |
| 管理工具 | xl |
virsh / virt-install |
| 性能 | 优秀(半虚拟化成熟) | 优秀(硬件辅助+内核优化) |
| 生态系统 | 大型公有云验证 | 主流Linux发行版默认 |
| 选型建议 | 已有Xen经验/需要半虚拟化深度优化 | 新部署推荐(Linux原生,工具链成熟) |
3. FreeBSD bhyve
| 特性 | 说明 |
|---|---|
| 类型 | FreeBSD原生的2型hypervisor(用户空间) |
| 首次发布 | FreeBSD 10.0 |
| guest支持 | BSD、Linux、Windows(有限硬件支持) |
| 成熟度 | 相对较新,功能不如Xen/KVM完备 |
| 建议 | 除非有嵌入式FreeBSD虚拟化定制需求,否则优先选择其他方案 |
4. VMware ESXi
| 特性 | 说明 |
|---|---|
| 类型 | 裸金属1型hypervisor(x86架构) |
| 授权 | 免费基础版,高级功能需付费 |
| 优势 | 行业领先的动态迁移(vMotion)、集中管理(vCenter) |
| 适用场景 | 企业级生产环境,混合OS环境(含Windows) |
VMware是企业虚拟化的“默认选择”,但成本较高。纯Linux环境可用KVM替代。
5. Oracle VirtualBox
| 特性 | 说明 |
|---|---|
| 类型 | 跨平台2型hypervisor(桌面级) |
| 历史 | Innotek → Sun → Oracle |
| 支持平台 | Linux、FreeBSD(社区移植)、Windows、macOS、Solaris |
| 适用场景 | 开发测试、个人实验、学习环境 |
| 生产建议 | 不推荐用于生产环境(性能/硬件支持不足) |
| 无GUI运行 | VBoxHeadless(命令行工具) |
6. Packer(镜像构建工具)
| 概念 | 说明 | 能做什么 |
|---|---|---|
| Packer | HashiCorp开源工具,从规范文件(JSON)构建虚拟机镜像 | 为多种平台(AWS/GCP/DO/VMware/VirtualBox)构建一致的自定义镜像 |
| 基础设施即代码 | 镜像规范可版本控制、审计、回滚 | 消除“手工构建镜像”的不可重复性 |
Packer工作流程:
- 从源镜像启动临时实例
- 运行脚本或配置管理(Ansible/Chef)定制
- 保存状态为新镜像
模板示例(custom_ami.json,AWS):
|
|
💡 Packer与配置管理(Ansible/Salt/Chef)配合使用效果最佳:Packer构建基础镜像,CM在运行时做最后调优。
7. 本章核心命令速查表
| 命令 | 功能 | 平台 |
|---|---|---|
xl list |
列出Xen域 | Xen |
xl create /etc/xen/guest.cfg |
启动Xen guest | Xen |
xl console <id> |
连接Xen guest控制台 | Xen |
xl shutdown <id> / xl destroy <id> |
优雅/强制停止Xen guest | Xen |
virsh --connect qemu:///system |
进入KVM管理shell | KVM/Linux |
virsh list --all |
列出所有VM | KVM |
virsh start <name> / shutdown <name> |
启动/关机VM | KVM |
virt-install ... |
创建新KVM guest | KVM |
VBoxHeadless |
VirtualBox无GUI运行 | VirtualBox |
packer build template.json |
构建镜像 | Packer |
DBA视角补充:
- 虚拟化是数据库部署的主流形式:绝大多数生产数据库运行在VMware ESXi或KVM之上。虚拟机提供了资源隔离(CPU/内存/IO)和可移植性(vMotion/热迁移),便于数据库维护和灾难恢复。
- 数据库VM性能考量:
- CPU:硬件辅助虚拟化(Intel VT/AMD-V)性能损失极小(<5%)
- 内存:避免内存超额分配(overcommit),确保数据库guest有足够预留内存
- 存储:使用半虚拟化磁盘驱动(virtio)可大幅提升I/O性能;避免使用模拟IDE/SATA驱动
- 网络:使用半虚拟化网卡(virtio-net)降低网络延迟
- VM vs 容器选型:
- OLTP数据库(MySQL/PostgreSQL/Oracle):建议虚拟机(强隔离,资源保障)
- 开发/测试数据库:容器可快速拉起/销毁,节省资源
- 云数据库(AWS RDS等):底层本质是虚拟化+托管服务
- Packer在DBA场景的价值:用Packer构建包含数据库软件、监控工具、安全补丁的标准镜像,新数据库服务器可在数分钟内上线,且配置完全一致,消除“手工安装数据库”导致的配置漂移。
- VM备份:虚拟机快照是数据库备份的有效补充,但必须与数据库内的一致性点协调(如先执行
FLUSH TABLES WITH READ LOCK或使用支持崩溃一致的存储)。不建议仅依赖VM快照,仍需结合逻辑备份。
文章作者 会写代码的小郎中
上次更新 2011-07-05
许可协议 CC BY-NC-ND 4.0