东东东 陈煜东的博客

标签存档: 虚拟化

virsh对kvm虚拟机进行动态迁移

迁移的类型:静态迁移和动态迁移

迁移虚拟机的方式有两种:一种是动态迁移,一种是静态迁移。

静态迁移

静态迁移:也叫做常规迁移、离线迁移(Offline Migration)。就是在虚拟机关机暂停的情况下从一台物理机迁移到另一台物理机。因为虚拟机的文件系统建立在虚拟机镜像上面,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理主机上;如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要显式的停止虚拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。

动态迁移

动态迁移(Live Migration):也叫在线迁移(Online Migration)。就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。

动态迁移需要将原有的虚拟机镜像放在采用 SAN(storage area network)或 NAS(network-attached storage)之类的集中式共享外存设备,这样迁移的时候,不是迁移整个硬盘镜象,而是迁移内存的信息.所以迁移起来,速度比较快,停顿时间少。

动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网络,把虚拟机配置和内存运行状态从一台物理机迅速传送到另外一台物理机上,期间虚拟机一直保持运行状态。现有技术条件下,大多虚拟机软件如 VMware、Hyper-V、Xen 进行动态迁移都需要共享存储的支持。典型的共享存储包括 NFS 和 SMB/CIFS 协议的网络文件系统,或者通过 iSCSI 连接到 SAN 网络。选用哪一种网络文件系统,需要根据具体情况而定。本文的实验采用了 NFS 文件系统作为源主机和目的主机之间的共享存储。

使用nfs网络文件系统

source host和dest host都通过网卡和NFS server进行连接,所有的VM镜像都在NFS Server上,然后将VM1从source host迁移到dest host上,通过网络来进行迁移,所以网络的速度决定这迁移的快慢.

nfs配置

 修改文件vi /etc/exports
/home/images *(rw,sync,no_root_squash)
/home/images 为要共享的文件夹
 rw:可读写的权限;
 ro:只读的权限;
 no_root_squash:登入到 NFS 主机的用户如果是 ROOT 用户,他就拥有 ROOT 权限,此参数很不安全,建议不要使用。
 sync:资料同步写入存储器中。
 async:资料会先暂时存放在内存中,不会直接写入硬盘。

重新启动 nfsserver 服务
 # service nfsserver restart 或者 systemctl restart nfs-server.service

查看状态
systemctl status nfs-server.service   ####查看nfs-server状态
exportfs -av   #####如果显示出共享的文件夹的话,说明设置已经生效

挂载NFS-server共享网络存储到本机
mount -t  nfs  nfs-server-host:/home/images /mnt/nfs
将NFS-server上的存储器/home/images/ 挂载到本地的/mnt/nfs 文件夹下。

nfs可能遇到的问题

如果在挂载nfs的时候,按tab键无法补全路径.

那么是防火墙的原因,把它添加到允许的规则里。设置selinux

setsebool -P virt_use_nfs 1

权限拒绝

error: Failed to start domain vdisk
error: internal error Process exited while reading console log output: char device redirected to /dev/pts/1
qemu-system-x86_64: -drive file=/mnt/nfs/vdisk.img,if=none,id=drive-ide0-0-0,format=qcow2: could not open disk image /mnt/nfs/vdisk.img: Permission denied

设置/mnt/nfs/vdisk.img的权限

注意问题

一定要注意所要共享的目录的权限问题,包括它的父目录,这些目录的权限要一样,否则mount的时候会出错

另外这个镜像最好都方在一个位置下。比如将nfs挂载到source host在/mnt/nfs,那么最好也在dest host的/mnt/nfs,路径一样,这样将来迁移就比较方便了。增加迁移的成功率。而且使用virt-manage必须路径一直,virsh可以要求不一致。只好还是source host和dest host在相同的路径挂载NFS网络共享系统

进行迁移

启动虚拟机

在 source host主机启动虚拟机

virsh start vdisk    ####vdisk 为虚拟机的名字

查看虚拟机状态

# virsh list --all
 Id    名称                            状态
----------------------------------------------------
 1     centos                         running
 2     vdisk                          running

进行迁移

virsh migrate vdisk --live qemu+ssh://des_ip:/system --unsafe

稍微过一会儿,我们就可以在dest host目标主机上看到虚拟机正在运行了。

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: virsh对kvm虚拟机进行动态迁移 – https://www.chenyudong.com/archives/virsh-kvm-live-migration-with-libvirt.html

分类: 虚拟化

域(Domains) 客户机(Guests) 虚拟机(Virtual Machines)区别

术语域 (domain)客户机 (guest)虚拟机 (virtual machine)经常被交换使用的.但是他们还是有细微的区别的.

域 (domain) 是一组可配置的资源集合,包括内存,虚拟CPU,网络设备,存储设备,这些配置都是虚拟机 (virtual machine)运行的时候使用的.域 (Domain)被独立地赋予了虚拟资源(virtual resources),并且可以启动(start)、停止(stop)、重启(restart).

如果你使用过libvirt,那么你应该知道有个domain XML文件,回忆一下里面是记录着什么?是资源的信息吧.有CPU,内存,硬盘,光驱,网络,还有PCI上的设备.

客户机 (Guest)是一个运行在domain之内的虚拟化操作系统.也可以叫Guest OS,它可以是半虚拟化或者是硬件虚拟化.

虚拟机 (virtual machine)上可以运行它自己的操作系统(也叫做Guest OS) 。

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 域(Domains) 客户机(Guests) 虚拟机(Virtual Machines)区别 – https://www.chenyudong.com/archives/domains-guests-and-virtual-machines.html

分类: 虚拟化

查看virsh管理qemu虚拟机日志信息和libvirtd日志信息

在软件的开发和运行过程中,程序的运行日志log是不能少的。我们可以从log中发现程序的运行状态,以及可能出先的一些error.通常运行日志log上有时间、信息级别(level)、消息输出(message)。通过分析日志,我们可以从中获得程序的运行信息,方便我们的调试、恢复等.

在libvirt程序管理VM虚拟机时,也会有日志的记录.既有libvirtd的后台程序的日志,也有vm日志.接下来,我们设置一些日志的信息.

libvirtd的运行日志

在运行libvirtd的时候,我们需要获得lbivirtd的运行信息.所以我们需要找到他的日志文件.一般情况下,它是在/var/log/libvirt/libvirtd.log路径下.

可能在这个目录下没有发现这个的日志文件.那么就要配置一些libvitd的参数了.

编辑文件/etc/libvirt/libvirtd.conf

#将日志级别设置为 1(调试)
log_level = 1
#指定日志输出文件名称
log_outputs="1:file:/var/log/libvirt/libvirtd.log"
注意 :libvirtd. 日志文件可能会飞速增长。 用户应配置logrotate ,否则您的 /var 文件系统最后会装满内容。

以上的日志的输出级别为debug级别.这个级别的日志是最多的,一般只在开发以及测试的时候使用.而在生产运行环境中,日志的级别为info,warn,error,fatal. 以下前面的数字为他们的level.

  • 1 debug
  • 2 info
  • 3 warn
  • 4 error
  • 5 fatal

重启libvirtd 。虚拟机Guest操作系统正在运行时可重启 libvirtd。

# /etc/init.d/libvirtd restart

如果在目录下还是没发现日志文件,那么你可能需要使用一下命令来运行libvirtd.

libvirtd --daemon --listen --config /etc/libvirt/libvirtd.conf

查看virsh管理qemu虚拟机的信息

在使用virsh管理qemu的虚拟机时候,也是有日志的输出的.

具体的log在目录/var/log/livirt/qemu/ 下面,具体的log文件名与虚拟机名字关联.

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 查看virsh管理qemu虚拟机日志信息和libvirtd日志信息 – https://www.chenyudong.com/archives/qemu-vm-log-and-libvirtd-log.html

分类: 虚拟化

virsh使用qemu+tcp访问远程libvirtd

因为ssh的不能访问 所以使用tcp进行对远程libvirtd进行连接访问,例如

virsh -c qemu+tcp://example.com/system

修改文件vim /etc/sysconfig/libvirtd,用来启用tcp的端口

LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf

LIBVIRTD_ARGS="--listen"

修改文件vim /etc/libvirt/libvirtd.conf

listen_tls = 0

listen_tcp = 1

tcp_port = "16509"

listen_addr = "0.0.0.0"

auth_tcp = "none"

运行 libvirtd

service libvirtd restart

如果没起效果(我的就没有生效 :( ),那么使用命令行:

libvirtd --daemon --listen --config /etc/libvirt/libvirtd.conf

查看运行进程

[root@ddd run]# ps aux | grep libvirtd
root 16563 1.5 0.1 925880 7056 ? Sl 16:01 0:28 libvirtd -d -l --config /etc/libvirt/libvirtd.conf

查看端口

[root@ddd run]# netstat -apn | grep tcp
tcp        0      0 0.0.0.0:16509           0.0.0.0:*               LISTEN      13971/libvirtd      

在source host连接dest host远程libvirtd查看信息

virsh -c qemu+tcp://211.87.***.97/system

Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

成功使用tcp去访问libvirtd。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: virsh使用qemu+tcp访问远程libvirtd – https://www.chenyudong.com/archives/libvirt-connect-to-libvirtd-with-tcp-qemu.html

分类: 虚拟化

使用libvirt和qemu将pci pass through设备添加到虚拟机上

透传的优势

guest使用透传设备可以获得设备近乎原生的性能,

PCI pass-throught设备给动态迁移带来的问题, dest host可能没有同样的硬件.

就算可以模拟一个设备,但是原始设备的内部状态不能获得.

VT-d support

In order to assign devices in KVM, you’ll need a system which supports VT-d. This has nothing to do with the VT-x support of your CPU, VT-d needs to be supported by both your chipset on your motherboard and by your CPU.

If you are in doubt whether your motherboard or CPU supports VT-d or not, the Xen VT-d wikipage has some pointers of VT-d enabled chipsets, motherboards and CPUs: http://wiki.xensource.com/xenwiki/VTdHowTo

If your hardware doesn’t have an IOMMU (“Intel VT-d” support in case of Intel – “AMD I/O Virtualization Technology” support in case of AMD), you’ll not be able to assign devices in KVM. Some work towards allowing this were done, but the code never made it into KVM, due to various issues with the code. At the moment it doesn’t seem like device assignment without hardware support, will ever be integrated into KVM.

Assignment of graphics cards are not officially supported at the moment, but there has been some success passing through a secondary Radeon HD 5850 as a VM’s secondary display.

资料:http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM

在host选择PCI pass through设备

reboot and verify that your system has IOMMU support

AMD Machine

dmesg | grep AMD-Vi
 ...
 AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
 AMD-Vi: Lazy IO/TLB flushing enabled
 AMD-Vi: Initialized for Passthrough Mode
 ...

Intel Machine

dmesg | grep -e DMAR -e IOMMU
...
DMAR:DRHD base: 0x000000feb03000 flags: 0x0
IOMMU feb03000: ver 1:0 cap c9008020e30260 ecap 1000
...

If you get no output you’ll need to fix this before moving on. Check if your hardware supports VT-d and check that it has been enabled in BIOS.

NOTE: If you still get an error “No IOMMU found.” Check dmesg for errors suggesting your BIOS is broken. Another possible reason: CONFIG_DMAR_DEFAULT_ON is not set. In that case, pass “intel_iommu=on” as kernel parameter to enable it. AMD uses different kernel parameter than Intel, on AMD you need to pass “iommu=pt iommu=1”.

请看附录:No IOMMU found 解决

选择要使用的透传设备

# lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation 2nd Generation Core Processor Family DRAM Controller [8086:0100] (rev 09)
......
00:1b.0 Audio device [0403]: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller [8086:1c20] (rev 04)
.....
00:1f.3 SMBus [0c05]: Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller [8086:1c22] (rev 04)

友情提示:使用透传设备时,拿USB控制器作实验,可能鼠标键盘不能使用.请谨慎.

将设备从宿主机上解除绑定

使用echo命令,将设备从host机器上解除绑定,将来用于guest机器. For example:

echo "8086 1c20" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:00:1b.0 > /sys/bus/pci/devices/0000:00:1b.0/driver/unbind
echo 0000:00:1b.0 > /sys/bus/pci/drivers/pci-stub/bind

关闭虚拟机

关闭虚拟机,修改配置文件.

使用libvirt进行pci pass through

修改虚拟机配置文件

<devices> …
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
         <address domain='0x000' bus='0x00′ slot='0x1b' function='0x0' />
      </source>
   </hostdev>
</devices>

在修改完虚拟机配置文件后,运行虚拟机.

使用qemu进行pci pass through

使用qemu进行pci pass through也是一样的简单的.我们需要一个已经创建好操作系统的虚拟机.

在qemu命令行运行以下命令以启动虚拟机

/usr/bin/qemu-kvm -name vdisk -enable-kvm -m 512 -smp 2 \
-hda /mnt/nfs/vdisk.img \
-monitor stdio \
-vnc 0.0.0.0:0 \
-device pci-assign,host=00:1b.0

这样就将设备挂载到虚拟机上了.

  • 参数-device pci-assign,host=00:1b.0说的是使用一个pci设备,并提供一个设备的地址.
  • 参数-monitor stdio是使用一个标准的控制台输出.在命令行中进行输入命令,等等迁移的时候也在这里输入命令.

附录1:No IOMMU found 解决

启动虚拟机的时候出现了iommu的问题.以供大家参考

1.查看错误日志说明

在配置好XML文件后,启动虚拟机,遇到一个问题.

error: Failed to start domain vdisk
error: Unable to read from monitor: Connection reset by peer

查看虚拟机日志( cat /var/log/libvirt/qemu/vdisk.log )信息.

char device redirected to /dev/pts/3
No IOMMU found. Unable to assign device "hostdev0"
qemu-system-x86_64: -device pci-assign,configfd=20,host=00:1b.0,id=hostdev0,bus=pci.0,addr=0x4: Device 'pci-assign' could not be initialized
2013-07-08 06:41:23.256+0000: shutting down

上网查阅资料,说是要在BIOS上设置虚拟化,然后在引导程序里也要设置iommu.可以查看一下自己的电脑信息是否开启了.

2.查看信息gurb的引导信息

# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.9.6-200.fc18.x86_64 root=/dev/mapper/fedora-home ro rd.lvm.lv=fedora/swap rd.md=0 rd.dm=0 rd.lvm.lv=fedora/home rd.luks=0 vconsole.keymap=us rhgb quiet LANG=en_US.UTF-8

可以发现,我的还未开启intel_iommu=on选项.所以接下来我们来激活它.

3.激活intel_iommu=on

Activate Intel VT-d in the kernel

Activate Intel VT-d in the kernel by appending the intel_iommu=on parameter to the kernel line of the kernel line in the/boot/grub/grub.conf file. The example below is a modified grub.conf file with Intel VT-d activated.

对于intel的cpu和amd的cpu,在grub配置上是不同的,具体的配置请参考文章:http://pve.proxmox.com/wiki/Pci_passthrough

4.更新grub

在编辑完grub文件后,需要更新

grub2-mkconfig   # fedora arch centos
update-grub            # ubuntu debian

5.重启电脑,使其生效

# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.9.6-200.fc18.x86_64 root=/dev/mapper/fedora-home ro rd.lvm.lv=fedora/swap rd.md=0 rd.dm=0 rd.lvm.lv=fedora/home rd.luks=0 vconsole.keymap=us rhgb quiet intel_iommu=on LANG=en_US.UTF-8

发现开机已经启动了inte _iommu=on了.再次启动虚拟机已经就不会出现这个bug了.

附录2 PCI pass through 失败要关闭SELinux

我用的是Fedora 18 ,将SELinux给disalbed了,但是发现PCI pass through出先问题.上网看到文章PCI passthrough fails in qemu-kvm unless selinux is disabled 说,要将selinux设置成permissive模式,于是这个问题解决了.

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 使用libvirt和qemu将pci pass through设备添加到虚拟机上 – https://www.chenyudong.com/archives/add-pci-pass-through-device-to-guest-vm-with-libvirt-and-qemu.html

分类: 虚拟化

qemu安装kvm虚拟机

用qemu命令来创建虚拟机.

第一步,创建一个虚拟机的硬盘,将来来存放虚拟操作系统的.这个虚拟硬盘是利用文件系统来进行模拟的.

qemu-img create -f qcow2 vdisk.img 10G 

qcow2是一种硬盘的格式,比qcow更新,qcow2 is an updated version of the qcow format, intended to supersede it. The main difference with the original is that qcow2 supports multiple virtual machine snapshots through a new, flexible model for storing snapshots. qcow支持数据大小动态的增加.而不是一开始就固定大小了.直接分配那么大的位置占空间

第二步,安装iso,并运行

qemu-system-x86_64 -enable-kvm -m 512 -smp 1 -boot order=dc -hda /opt/vdisk.img -cdrom /home/d/Downloads/CentOS-6.4-x86_64-minimal.iso

其中,-enable-kvm 是使用kvm内核,不用qemu的内核,开启虚拟机加速, -m 2048 是给客户机分配512MB内存,-smp 1 是给客户机分配1个CPU,-boot order=dc 是指定系统的启动顺序为光驱(d: CD-ROM)、硬盘(c: hard Disk),-hda ** 是分配给客户机的IDE硬盘(即前面准备的镜像文件),-cdrom ** 是分配客户机的光驱。默认情况下,QEMU会启动一个VNC server端口(如上面的::1:5900),可以用vncviwer工具来连接到QEMU的VNC端口查看客户机。

出现

VNC server running on `127.0.0.1:5900'

这意味着,你的虚拟机已经开启了,并且,开通了一个端口给你,你可以利用5900端口去远程桌面连接.有个图片

接下来就是普通的安装操作系统了.在安装结束后,我们需要进行重启,可能就出现问题了.这是将原先的虚拟机ctrl+c强制结束了.然后再次运行虚拟机

第三步,运行刚刚安装的操作系统

# qemu-system-x86_64 vdisk.img -m 512 -enable-kvm

If you’re on Fedora/RHEL/CentOS (and installed a kvm package and not built kvm yourself from source) then substitute qemu-kvm for qemu-system-x86_64

查看进程的一些xinxi ps -eLo ruser,pid,ppid,lwp,psr,args | grep qemu

参考: qcow2、raw、vmdk等镜像格式 http://www.prajnagarden.com/?p=248

运行刚刚安装的操作系统 http://www.linux-kvm.org/page/HOWTO1#Running_the_newly-installed_guest

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: qemu安装kvm虚拟机 – https://www.chenyudong.com/archives/qemu-install-kvm-vm.html

分类: 虚拟化

libvirt kvm 虚拟机上网 – Bridge桥接

通过艰难的过程,终于使用libvirt安装完qemu kvm虚拟机了.但是发现虚拟机不能上网.虚拟机想要上网,有很多中方法.

先说两个定义:Guest机器为虚拟机,Host机器为开机运行的真实机器.

查看libvirt的教程,看到网络配置有许多中方式.详情可以访问http://libvirt.org/formatdomain.html#elementsNICS

  • NAT (默认上网) 虚拟机利用host机器的ip进行上网.对外显示一个ip
  • Bridge 将虚拟机桥接到host机器的网卡上,guest和host机器都通过bridge上网.对外不同的ip,

Bridge桥接原理

Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。

桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。

Bridge桥接原理

如上图,网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据。

在host机器配置桥接网络

首先可以按照ibm 文章的虚拟机配置一下host机的网络情况,这个的目的就是让host生成一个不日多个桥接,大家都通过这个桥接上网.下面我们来看看具体的步骤.

查看网卡是否工作

确保你想使用bridge网桥的网卡能够为kvm虚拟机模块提供网络连接能力并且网卡是否可以工作.这个网卡应该要能够给guest的kvm虚拟机提供相同的网络支持.接下来例子说明了网卡的配置,并且可以被外部网络访问.这个例子中,使用eth0网卡.

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet addr:10.10.1.152  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:664 errors:0 dropped:526 overruns:0 frame:0
          TX packets:163 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:69635 (68.0 KiB)  TX bytes:25091 (24.5 KiB)
          Interrupt:74 Memory:da000000-da012800
................

备份network-scripts网络脚本文件

备份网络配置到不同的目录下,将来可以用来恢复网络配置,. 根据下面的命令将网络脚本ifcfg-eth0 网卡到 /root目录:

# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/.
注意:不要把文件copy到/etc/sysconfig/network-scripts/目录或者其子目录

进入network-scripts目录

进入/etc/sysconfig/network-scripts/目录.

cd /etc/sysconfig/network-scripts/

为桥接新建配置文件

为Linux的bridge创建一个新的配置文件为/etc/sysconfig/network-scripts/ifcfg-br0,这里br0是bridge网桥的名字,同eth0类似.使用以下命令

cp ifcfg-eth0 ifcfg-br0 

具体的内容是基于已有的配置文件来进行的.

编辑bridge网桥配置文件

编辑配置文件,让数据包通过bridge(网桥)进行上网.你的网络配置很可能是通过静态ip(BOOTPROTO=static)上网或者是从DHCP服务器获得ip(BOOTPROTO=dhcp)上网的.

如果你的网络是通过静态ip地址来配置的,那么你的配置很可能是和下面一样的:

DEVICE=eth0
BOOTPROTO=static
HWADDR=00:14:5E:C2:1E:40
IPADDR=10.10.1.152
NETMASK=255.255.255.0
ONBOOT=yes

下面的表格显示了eth0和br0的静态ip配置内容,可以根据下面进行编辑

**** static ip配置 *****
/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:14:5E:C2:1E:40
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=10.10.1.152
NETMASK=255.255.255.0
ONBOOT=yes

下面表格显示的eth0和br0的DHCP配置情况.

**** DHCP配置 ****
/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:14:5E:C2:1E:40
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
BOOTPROTO=dhcp
ONBOOT=yes

重启网络服务

重启网络以验证网络配置是否工作.

如果网络配置不正确,网络连接将会断开,你的电脑将失去访问能力.这样的话,检查以下配置文件,然后使用以下的命令重启以下网络服务:

# service network restart

禁用网络过滤器

向文件/etc/sysctl.conf添加以下代码:

 net.bridge.bridge-nf-call-ip6tables = 0
 net.bridge.bridge-nf-call-iptables = 0
 net.bridge.bridge-nf-call-arptables = 0
 

重新加载kernel参数

# sysctl -p 
net.ipv4.ip_forward = 0 
...
net.bridge.bridge-nf-call-ip6tables = 0 
net.bridge.bridge-nf-call-iptables = 0 
net.bridge.bridge-nf-call-arptables = 0

验证配置是否成功

通过运行ifconfig来验证以下配置是否成功.如果出现两个项,即网桥的br0和现在在工作的eth0:

br0       Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet addr:10.10.1.152  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:125 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16078 (15.7 KiB)  TX bytes:18542 (18.1 KiB)
eth0      Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:206 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:27308 (26.6 KiB)  TX bytes:13881 (13.5 KiB)
          Interrupt:74 Memory:da000000-da012800
注意:你可能发现eth0的网络信息里面没有ipv4的地址了.或者你的GUI界面的网络显示你是断网的. 这不用担心.因为eth0的网络能力已经通过br0进行工作.你的host网络还是能正常工作的.

也可以使用以下的命令来查看网桥是否工作.

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.000000000000       yes
br0             8000.000e0cb30550       no              eth0

如果是类似的输出,那么你的Linux的Bridge网桥就配置的差不多了.

为Guest虚拟机配置网络

配置Guest虚拟机的xml文件

在虚拟机的xml配置文件进行设置网络的连接方式为bridge桥接,并且桥接的设备为br0.其中mac地址要改变!不然MAC相同,局域网MAC地址相同的电脑不能上网.

<interface type="bridge"> <!--虚拟机网络连接方式-->
    <source bridge="br0" /> <!-- 当前主机网桥的名称-->
    <mac address="00:16:e4:9a:b3:6a" /> <!--为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突-->
</interface>

在虚拟机配置网络

我使用的是CentOS Minimal Installation的发行版.使用以下命令就可以进行上网了. 一开始只有lo显示.没有看到eth0,后来想到了eth0被禁用了,于是开启即可.

# ifconfig eth0 up
# dhclient eth0

现在还有个问题是,网络不随开机启动. 我打开/etc/sysconfig/network-scripts/ifcfg-eth0显示:

DEVICE=eth0
HWADDR=52:54:00:12:34:56
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp

虽然设置了开机启动,但是每次开机都需要运行上面的两个命令.这样就没办法远程控制主机了.

后来发现是udev弄的.udev在/etc/udev/rules.d/下面搞了一个持久命名规则(persistent-net.rules),对于网卡的持久命令,就采取了MAC地址的匹配方式

原来虚拟机安装后自带MAC网卡地址和我xml定义的网卡不一样.于是我就将虚拟机的MAC网卡提取出来,替换xml文件的MAC网卡信息.然后undefine和define以下虚拟机.

重启虚拟机,发现这次网络能够自动开机获得了.

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: libvirt kvm 虚拟机上网 – Bridge桥接 – https://www.chenyudong.com/archives/libvirt-kvm-bridge-network.html

分类: 虚拟化

Linux下编译安装qemu和libvirt

KVM虚拟机(英语:Kernel-based Virtual Machine),是一种用于Linux内核中的虚拟化基础设施。KVM目前支援Intel VT及AMD-V的原生虚拟技术。KVM在2007年2月被导入Linux 2.6.20核心中。它也被引入FreeBSD。在Mac OS X中,也可以见到KVM。

因为kvm已经集成到Linux中了,所有就不用安装kvm了。

安装qemu

qemu介绍

QEMU 是一个面向完整 PC 系统的开源仿真器。除了仿真处理器外,QEMU 还允许仿真所有必要的子系统,如连网硬件和视频硬件。它还允许实现高级概念上的仿真(如对称多处理系统(多达 255 个 CPU)和其他处理器架构(如 ARM 和 PowerPC)。

下载源文件

下面从git安装qemu最新版qemu官网的git地址:

http://git.qemu-project.org/qemu.git

使用以下命令下载qemu代码到本地来,将来可以用来自己编译和修改,然后发布自己新的qemu。

git clone git://git.qemu.org/qemu.git

编译安装

下载完后,进行编译安装.

### 如果你是从压缩包下载来的,先解压缩
cd /tmp
tar zxvf qemu-x.y.z.tar.gz
cd qemu-x.y.z
### Then you configure QEMU and build it (usually no options are needed):

###git下载及源码包下载都一样了
./configure
 make
### Then type as root user:

make install
### to install QEMU in /usr/local.

你可能在./courfigure出现问题

注意:可能在安装的时候,许多的软件没有安装,需要提前安装,不过会提示你会少了什么

yum install gcc
yum install zlib-devel.x86_64
yum install glib2-devel.x86_64
yum install pixman-devel.x86_64
git submodule update --init dtc   ###会提示缺某个模块,在当前的git目录下运行

安装libvirt

libvirt介绍

libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口(API),而且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如OpenStack、OpenNebula、Eucalyptus等)都在底层使用libvirt的应用程序接口。

下载libvirt

git项目的位置http://libvirt.org/git/?p=libvirt.git

新建一个文件夹,存放git的文件

git clone git://libvirt.org/libvirt.git

编译安装

这部分是参考http://libvirt.org/compiling.html文章

###个人不推荐这个方法,见下面
$ ./autogen.sh --prefix=$HOME/usr
$ make
$ sudo make install

默认状态下,配置和编译后安装的目录与Linux操作系统发行版提供的默认目录可能是不一致的,例如:RHEL 6.3中用系统的RPM包安装的libvirtd、virsh等可执行程序被安装 /usr/sbin/ 目录下,libvirt.so、libvirt-qemu.so等共享库文件被安装在 /usr/lib64/ 目录下,而从前面步骤中可知自己编译安装时,默认会将libvirtd、virsh等安装在 /usr/local/sbin 目录下,而libvirt.so、libvirt-qemu.so 等被安装在 /usr/local/lib/ 目录下。如果想保持对操作系统发型版中安装可执行程序和共享库的目录的一致性, autogen.sh 脚本提供了“–system”参数,带有这个参数来配置,就会尽可能保证安装目录与原生系统的一致性,其命令行操作如下.

###个人推荐这个方法##保持对操作系统发型版中安装可执行程序和共享库的目录的一致性
$ ./autogen.sh --system
### 或者 ./configure --prefix=/usr --localstatedir=/var  --sysconfdir=/etc
$ make
$ sudo make install

安装libvirt可能也会缺少一些软件,比如

yum install libtool.x86_64
autopint : yum install gettext-devel.x86_64
python-config : yum install python-devel.x86_64
pciaccess : yum install libpciaccess.devel.x86_64

检查已经安装的libvirt

# which libvirtd
/usr/sbin/libvirtd

# which virsh
/usr/bin/virsh

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Linux下编译安装qemu和libvirt – https://www.chenyudong.com/archives/install-qemu-libvirt-in-fedora-linux.html

分类: 虚拟化

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑