[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

CentOS 6、7 的 Xen4 Libvirt

Libvirt 及 Xen 的基础

Xen 的主机操作系统称为 Dom0。通过 Xen 来执行的虚拟操作系统(VM)称为 DomU。

在缺省情况下,libvirt 会在缺省网络卡(一般是 eth0)背后创建一个 192.168.122.0/24 的 NAT 网络。

在这个 NAT 网络上运行的 DomU VM 可以互相连接及通过 Dom0 的网络向外连接,但你只能在 Dom0 上通过 libvirt(或 xen)连接到它们。你可以把缺省的 NAT 网络改为一个桥接式网络,这样你便能连接到 DomU VM,仿如它们与 Dom0 在同一个实体网络上。有关桥接的讨论收录在下文(第 7 部份)。

先决条件

此页假设你已经遵照Xen4QuickStart 指引安装了一个 Xen 内核,而 xl info 这个指令作出类似的汇报:

[root@xentest1 ~]# xl info
host                   : immortal
release                : 3.10.56-11.el6.centos.alt.x86_64
version                : #1 SMP Thu Oct 9 14:57:01 CDT 2014
machine                : x86_64
nr_cpus                : 4
max_cpu_id             : 31
nr_nodes               : 1
cores_per_socket       : 4
threads_per_core       : 1
cpu_mhz                : 2533
hw_caps                : bfebfbff:2c100800:00000000:00003f00:029ee3ff:00000000:00000001:00000000
virt_caps              : hvm hvm_directio
total_memory           : 6141
free_memory            : 5030
sharing_freed_memory   : 0
sharing_used_memory    : 0
outstanding_claims     : 0
free_cpus              : 0
xen_major              : 4
xen_minor              : 4
xen_extra              : .1-4.el6
xen_version            : 4.4.1-4.el6
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xffff800000000000
xen_changeset          : Wed Oct 15 15:36:23 2014 +0100 git:9f49483-dirty
xen_commandline        : dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all com1=115200,8n1 console=com1,vga
cc_compiler            : gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
cc_compile_by          : mockbuild
cc_compile_domain      : centos.org
cc_compile_date        : Mon Dec 15 17:54:14 UTC 2014
xend_config_format     : 4

除非特别指定,所有指令均须由 root 用户在 Dom0 机器上执行。

我习惯在最少安装上加入数个组件,因为它们稍后也许会有用。请以此指令安装它们:

yum install rsync wget vim-enhanced openssh-clients

安装 libvirt(在 Dom0 机器上)

首先我们要安装 libvirt 所需的基本组件:

CentOS 6 监督器:

yum install libvirt python-virtinst libvirt-daemon-xen

CentOS 7 监督器:

yum install libvirt libvirt-daemon-xen

安装后,请重新引导你的 Dom0 机器。

远程访问 LibVirt

在多数情况,下我们不推荐在 Dom0 服务器上安装整套图像化系统,因此多数人会从远程访问/控制 Dom0 libvirt。

你有 2 个可取的途径 …… 其一是通过一台图像化机器(例如一台 CentOS-6 工作站),其二是通过 ssh 应用 virsh 命令行程序。

通过 PolicyKit 控制 libvirt 的访问权

如果你想将一台 CentOS-6 工作站连接到 Dom0 上的 virt-manager 并控制该台计算机上的 DomU 虚拟机器,你便需要利用 PolicyKit。当你利用某台机器上的 virsh 终端機直接连接到 Dom0 及控制它的 DomU 虚拟机器时,PolicyKit 也会被应用。

PolicyKit 让你设计有灵活性、精细的访问权,功能远超㙎本样例所介绍以 unix 群组授权访问 libvirt 的做法。

如要设计复杂的访问权,请参阅 polkit 的文档

设置 libvirt 供群组访问

若要把访问权授予某个 unix 群组的成员,我们只须创建一个 PolicyKit 本地权限档。

这是一个纯文本档,一般被放置于这个目录中:

/etc/polkit-1/localauthority/50-local.d/

你可随意为这个文件命名,但它必须以两个数目字起首及以 .pkla 结尾。例如:

/etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla

它的内容应包含:

[Remote libvirt SSH access]
Identity=unix-group:group_name
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

你应该以合适的群组名称取替 group_name

举个例说:你拥有一位名为 johnny 的 unix 用户,而你希望创建一个名为 remote-libvirt 的群组来远程访问 libvirt,并把 johnny 加进该群组内。

首先我们要通过 ssh 登录 Dom0 机器并取得 root 的身份。接着我们便执行以下指令来创建新的群组:

groupadd remote-libvirt 

然后我们可以用这个指令把用户加进 remote-libvirt 这个群组内:

usermod -G remote-libvirt johnny

现在 johnny 这个 unix 用户可以远程控制 libvirt。

连接到远程的 Dom0

从远程机器通过 virt-manager 连接到 Dom0 机器

请登录你的图像化桌面(它可以是台 CentOS-6 工作台或是一台用来管理数台非图像化 Dom0 机器的图像化服务器),然后通过打开一个终端機窗口及以 root 身份执行以下指令,确保 virt-manager 已被安装:

yum install virt-manager

以普通用户的身份打开 virt-manager。你可利用 Applications => System Tools => Virtual Machine Manager 这条捷径,或从终端機窗口输入 virt-manager

在 virt-manager 应用程序内,打开 File => Add Connection 选单项目,接着选择 Xen 作为监督器,选用 connect to a remote host,选择 SSH 作为方法,输入你加进 remote-libvirt 群组内的用户(在这个样例中是 johnny)作为用户名称,最后输入 DomU 的主机名称或 IP 地址(这我的样例中,我们会采用 192.168.0.5)…… 然后点击 connect。

它会问 johnny 在 DomU 上的 ssh 用户名称 …… 输入后,你便会看见它连接到主机及在 virt-manager 内看见一个 Domain-0 的图示。

这个例子中的 URI 是:

xen+ssh://johnny@192.168.0.5

从远程机器通过 virsh 连接到 Dom0 机器

你在 Dom0 上利用 virsh 控制 DomU 虚拟机器的做法有两种。

第一种是纯粹 ssh 到 Dom0 机器,然后成为 root 用户及从命令行执行 virhs

第二种是采用上述例子的群组然后执行以下指令:

virsh -c xen+ssh://johnny@192.168.0.5

这种做法的好处就是我们无须把 Dom0 的 root 访问权发放给 johnny 用户,他只须正常帐户。他同样能应用 virsh 的一切功能。

有关 virsh 的详情,请参阅这份指南

创建 DomU 虚拟机器

ArtWork/WikiDesign/icon-admonition-alert.png

如果你要安装 CentOS 7 DomU 成为 paravirt 客端,请留意该虚拟机器的 /boot 不能采用 xfs —— 见 https://wiki.xen.org/wiki/PyGrub 。因此你必须利用 kickstart 档或通过 vnc 进行安装,以便能更改缺省值。你可以在 extra-args 内加入这些选项。

利用 virt-manager 来安装 DomU

现在你可以在 virt-manager 内选择新的主机名称/IP 地址,然后按鼠标右键并选择 New 或点击 Create a new Virtual Machine 的图示,接着按照提示来创建新的机器。

这个过程在远程及本地连接下都相同 …… 唯一差别就是 Step 1 of 5 提示页上的 Connection 对话框。

安装新机器的过程与此指南很相似,唯独在 Step 1 of 5 提示页上的连接将会显示你的远程主机名称(在我们的样例中是 192.168.0.5),而在 Step 5 of 5 提示页的高级选项的 Virt Type 内,你会看见 xen(paravirt)xen(fullvirt) 而不是 KVM。

通过 SSH 利用 virt-install 来安装 DomU

另一个进行远程安装的方法就是利用 ssh 连接到 Dom0 机器及成为 root 用户,然后利用 virt-install 及终端機来人进行安装。以下指令(以 root 身份在命令行执行)可以从远程进行文字模式的安装:

virt-install -d -n TestVM1 -r 2048 --vcpus=1 --disk /var/lib/libvirt/images/TestVM1.img,size=8 --nographics -p -l "http://192.168.0.10/centos/6.4/os/x86_64" --extra-args="text console=com1 utf8 console=hvc0"

在上述例子中,指令的含意包括:

-d — 侦错模式,打印大量文字及完整的设置样作侦错之用

-n TestVM1 — 虚拟机器的名称

-r 2048 — 内存大少(2048 MB,即 2 GB)

--vcpus=1 — 虚拟 CPU 的数量

--disk=/var/lib/libvirt/images/TestVM1.img,size=8 — 碟盘映像的位置及以 GB 计算的大少 …… 它可指向 LVM、等

--nographics — 由于我们的 Dom0 没有安装图像界面,因此不要采用 VNC、等

-p — 采用半虚拟化

-l "http://192.168.0.10/centos/6.4/os/x86_64" — centos 目录树的位置,也可采用 http://mirror.centos.org/centos/6/os/x86_64/ 或其它镜像。

--extra-args="text console=com1 utf8 console=hvc0" — 告诉 linux 利用 com1 和 xen 利用 hvc0,好让你能通过终端機进行文字模式安装

注:这类安装采用终端機,因此局限于文字模式的安装。上述(前一段)的 virt-manager 却能同时支持图像化安装。

有关利用 virt-install 进行安装的详情请参阅此指南

控制 DomU 虚拟机器

通过 libvirt,你可利用图像化应用程序(virt-manager)或文字应用程序(virsh)来控制 DomU 虚拟机器。

这些应用程序可以位于 DomU 虚拟机器所身处的 Dom0 上(本地控制),它们也可以位于不同的机器上并连接到 DomU(远程控制)。

不论是通过远程或本地连接,两种工具的实际操作都是相同。

有关远程 virt-manager远程 virsh 的连接,请参阅这些指引。你必须设置 libvirt 才能用这两个工具来进行远程访问。

有关采用 virsh 这参阅此指南;有关采用 virt-manager 这参阅此指南

桥接样例设置

以下是另一个桥接样例设置:

你必须安装 bridge-utils 才可设置桥接。你可以在 CentOS 下以这个指令进行安装:

yum install bridge-utils

以下文件位于 /etc/sysconfig/network-scripts/,它们必须被修改。

定义 br1 的最简单样例

ifcfg-eth0

DEVICE=eth0
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
BRIDGE="br1"
USERCTL=no

ifcfg-br1

DEVICE=br1
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.0.5
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=8.8.4.4
USERCTL=no

此处此处探讨了其它桥接样例设置。另外,Google 亦是你的好帮手 :)

Translation of revision 24


2023-09-11 07:23