安装和运行无头虚拟化服务器

近年来,硬件虚拟化已成为计算行业中的常见现象,并更多地为最终用户所用。 其背后的理念是崇高的。 为什么要在可以将其全部整合到一台或几台服务器上并共享其资源的情况下,投资分配更多的服务器硬件而不充分利用它呢?

在本文中,我重点介绍完全硬件虚拟化。 这指的是创建具有足够模拟硬件的虚拟机,使其像具有自己操作系统的真实计算机一样运行。 反过来,这个虚拟机或虚拟客户机在主机上启用和运行。 控制虚拟化的软件称为虚拟机监控程序。 虚拟机监控程序在主机上运行。

虚拟化通常用于整合硬件服务器、降低能耗、简化服务器管理以及简化迁移/恢复(在发生故障的情况下)。 有时,它通过需要远程访问的硬件来实现,因为硬件可能位于可能不是本地数据中心的位置。 考虑到这一点,硬件的操作系统也可以配置为没有图形环境(意味着也不包括连接的显示器和输入设备)。 这通常被称为无头运行。 本文假设您拥有对将成为主机的安全外壳或 SSH 访问权限。

准备工作

在配置虚拟机之前,请从您的发行版的软件包存储库中安装相应的软件包。 这些软件包包括提供简单虚拟化 API 的 libvirt 库、用于访问该库和管理虚拟机的客户端实用程序、Python 虚拟机安装程序实用程序以及基于内核的虚拟机 (KVM) 的用户空间组件。

注意:libvirt 是一个用于管理平台虚拟化的开源 API、守护程序和管理实用程序。 KVM 是一种虚拟化基础设施,可将 Linux 内核转换为虚拟机监控程序。 它需要具有硬件虚拟化扩展的处理器。

根据您的发行版,软件包名称可能有所不同。 在 Red Hat/CentOS 上,它们标记为 libvirt、libvirt-client、python-virtinst 和 qemu-kvm。 在 Debian/Ubuntu 上,它们标记为 libvirt、libvirt-bin、python-virtinst 和 qemu-kvm。

启用 libvirt 守护程序在系统启动时在所有适当的运行级别上运行,并手动启动该服务


$ sudo /sbin/chkconfig libvirtd on
$ sudo /sbin/service libvirtd start
Starting libvirtd daemon:                   [  OK  ]

查看守护程序的状态并验证它是否正在运行


$ sudo /sbin/service libvirtd status
libvirtd (pid  2482) is running...

安装 libvirt 软件包后,/var/lib/libvirt/ 用作所有虚拟机和相关文件的默认位置。 如果您希望将此位置重新定位到更冗余且有时是外部的存储硬件,则欢迎您这样做。 但是,在本文中,我将继续使用默认设置,并将操作系统的安装 ISO 映像放在 /var/lib/libvirt/boot/ 目录路径中。

安装虚拟机

在开始之前,查看本地安装的虚拟机列表。 假设这是在全新安装之后进行的,则不应列出任何虚拟机


$ sudo /usr/bin/virsh list --all
 Id    Name                           State
----------------------------------------------------

使用 libvirt,虚拟机由专门格式化的 XML 文件定义。 您可以在 libvirt 项目站点 上阅读有关此 XML 格式的更多信息。 幸运的是,您不必接触 XML 代码,并且可以依赖 virt-installvirt-install 实用程序用于配置新的虚拟机,并减少大部分(如果不是全部)复杂性。

例如,如果您想定义一个名为 CentOS6.5-vm1 的新虚拟机,具有一个虚拟 CPU、512MB RAM 等,您可以按以下方式进行


$ sudo /usr/sbin/virt-install \
> --name CentOS6.5-vm1 \
> --description "CentOS 6.5 64 bit VM1" \
> --ram=512 \
> --vcpus=1 \
> --cpu host \
> --hvm \
> --disk path=/var/lib/libvirt/images/centos6.5-vm1,size=3 \
> --cdrom /var/lib/libvirt/boot/CentOS-6.5-x86_64-minimal.iso \
> --graphics vnc

Starting install...
Allocating 'centos6.5-vm1'               | 3.0 GB     00:00
Creating domain...                       |    0 B     00:00
Cannot open display:
Run 'virt-viewer --help' to see a full list of available command
line options. Domain installation still in progress. You can
reconnect to the console to complete the installation process.

--cpu host 选项通过向客户机公开主机的 CPU 配置来优化 VM 的 CPU 属性,而 --hvm 选项请求库使用完全硬件虚拟化。 --cdrom 选项指向安装程序光盘映像,而 --disk 选项给出虚拟磁盘的名称(带有绝对位置)和大小(以千兆字节为单位)。 --graphics 选项允许 VNC 访问虚拟机,这将在本文后面部分中使用。 其他支持的选项包括网络配置、启动优先级等。

重新列出所有本地安装的虚拟机。 列出的将是您新创建的机器,它当前处于“运行”状态


$ sudo /usr/bin/virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     CentOS6.5-vm1                  running

注意:virt-install 手册页展示了实用程序用法和调用的许多示例。

管理虚拟机

一旦定义了虚拟机,virsh 实用程序将为管理员提供管理虚拟机所需的所有工具。

我已经介绍了列出虚拟机,包括它们的域 ID、名称和状态


$ sudo /usr/bin/virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     CentOS6.5-vm1                  shut off

要启动已关闭的虚拟机,请键入


$ sudo /usr/bin/virsh start CentOS6.5-vm1
Domain CentOS6.5-vm1 started

要重新启动已运行的虚拟机,请键入


$ sudo /usr/bin/virsh reboot CentOS6.5-vm1
Domain CentOS6.5-vm1 is being rebooted

虚拟机运行时,将为其分配一个域 ID。 此域 ID 也可用于管理虚拟机。 例如,可以使用以下方式调用相同的重启命令


$ sudo /usr/bin/virsh reboot 1
Domain 1 is being rebooted

要关闭虚拟机,请键入


$ sudo /usr/bin/virsh shutdown 1
Domain 1 is being shutdown

有时,虚拟机可能会变得无响应,并且不会遵守您的重启或关机请求。 这就是 destroy 命令发挥作用的地方。 要强制完全关闭虚拟机,请键入


$ sudo /usr/bin/virsh destroy 1
Domain 1 destroyed

要暂停虚拟机,请键入


$ sudo /usr/bin/virsh suspend 1
Domain 1 suspended

$ sudo /usr/bin/virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     CentOS6.5-vm1                  paused

要恢复已暂停的虚拟机,请键入


$ sudo /usr/bin/virsh resume 1
Domain 1 resumed

$ sudo /usr/bin/virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     CentOS6.5-vm1                  running

如果出现需要完全删除虚拟机的情况,则必须取消定义它。 为了取消定义虚拟机,它必须处于关闭状态。 要取消定义虚拟机,请键入


$ sudo /usr/bin/virsh undefine CentOS6.5-vm1
Domain CentOS6.5-vm1 has been undefined

$ sudo /usr/bin/virsh list --all
 Id    Name                           State
----------------------------------------------------

virsh 命令还能够为用户提供域、网络和更多详细信息/功能。 阅读手册页以了解有关这些功能的更多信息。

安全地访问虚拟机

现在您已经到达了可能被认为是难题中最重要部分的地方——即从远程位置访问新创建的虚拟机。 在这里,您将连接到正在运行的虚拟机以安装、配置和使用客户机操作系统。 完成此操作的最简单方法是使用 virt-viewer 实用程序。 从您的发行版的软件包存储库中安装它,并通过 SSH 连接到虚拟机


$ sudo /usr/bin/virt-viewer --connect=qemu+ssh://192.168.1.89/system
 ↪-- CentOS6.5-vm1

请注意,此实用程序也可以从您首选桌面环境的“应用程序”菜单中启动。 此外,要将键盘和鼠标捕获状态在虚拟机之间切换,virt-viewer 默认为 Ctrl-Alt 键按下。

在处理此类技术时,安全性变得越来越重要的话题,建议在访问服务器上虚拟机的客户端节点之间共享公共 SSH 密钥。 这样,身份验证和访问权限可以并且将仅限于授权用户和来自授权机器。 另一个值得关注的领域是防火墙,并确保 iptables 允许通过指定端口从指定地址进行访问,拒绝所有其他访问。

图 1. 使用 virt-viewer 连接到虚拟机

连接到虚拟机并继续操作系统的安装过程。 完成后,安装程序将重新启动最近安装的操作系统,并且 CD-ROM 映像将自动弹出。 如果您注意到虚拟机未重新启动,并且您无法使用上一节中突出显示的示例重新连接 virt-viewer,请检查虚拟机是否正在运行。 如果没有,请重新启动它。 您新安装的操作系统应该启动并运行,就像它安装在原生硬件上一样。

附加说明

可以启用虚拟机在主机系统启动时自动启动。 要完成此操作,请调用以下命令


$ sudo /usr/bin/virsh autostart 1
Domain 1 marked as autostarted

列出域的信息以查看此选项现在已启用


$ sudo /usr/bin/virsh dominfo 1

[ ... ]
Autostart:      enable
[ ... ]

要禁用它,请键入


$ sudo /usr/bin/virsh autostart --disable 1
Domain 1 unmarked as autostarted

总结

无论您是在有限的硬件上运行多个托管服务或虚拟客户端,还是利用隔离的开发环境,硬件虚拟化都已表明它能够完成许多伟大的事情。 在单个服务器上或集群内的多个服务器上运行一个或多个虚拟机,并启用高可用性。 使用少量且有时有限的硬件资源可以完成的事情是无限的。

资源

Petros Koutoupis,LJ 特约编辑,目前是 Cray Lustre 高性能文件系统部门的高级性能软件工程师。 他还是 RapidDisk 项目的创建者和维护者。 Petros 在数据存储行业工作了十多年,并帮助开创了当今广泛应用的许多技术。

加载 Disqus 评论