Pages

Wednesday, 23 March 2016

架设KVM虚拟化服务器

kvm

  1. 要安装必要的软件包,从终端中输入:
    sudo apt-get install qemu-kvm libvirt-bin
    在安装了libvirt-bin后,用于管理虚拟机的用户需要被添加到libvirtd组。这样做会赋予这个用户 进入到高级网络选项的权限。
    sudo adduser $USER libvirtd
  2. 安装virt-install
    sudo apt-get install virtinst
  3. 安装guest
    sudo virt-install -n web_devel -r 256 \
    --disk path=/var/lib/libvirt/images/web_devel.img,bus=virtio,size=4 -c \
    ubuntu-14.04-server-i386.iso --network network=default,model=virtio \
    --graphics vnc,listen=0.0.0.0 --noautoconsole -v
  4. 网络配置
    如果按第3步中network=default,guest可以访问外网,但不能访问host和其他guest。如果用作服务器的话,显然不行。
    故如下配置bridge:
    安装bridge相关工具
    sudo apt-get install bridge-utils
    编辑/etc/network/interfaces
    auto lo
        iface lo inet loopback
    
        auto eth0
        iface eth0 inet manual
    
        auto br0
        iface br0 inet static
                address 192.168.0.10
                network 192.168.0.0
                netmask 255.255.255.0
                broadcast 192.168.0.255
                gateway 192.168.0.1
                bridge_ports eth0
                bridge_stp off
                bridge_fd 0
                bridge_maxwait 0
    or DHCP:
    auto lo
        iface lo inet loopback
    
        auto eth0
        iface eth0 inet manual
    
        auto br0
        iface br0 inet dhcp
                bridge_ports eth0
                bridge_stp off
                bridge_fd 0
                bridge_maxwait 0
    重启网络服务:
    sudo /etc/init.d/networking restart
    or
    sudo ifup br0
    通过virsh创建bridge虚拟网络:
    virsh
        net-create bridge.xml
    xml内容:
    <network>
        <name>host-bridge</name>
        <forward mode="bridge"/>
        <bridge name="br0"/>
        </network>
    编辑guest配置,将网络由nat模式改为bridge 
    edit <guest domain>
    <interface type='network'>
        <mac address='00:11:22:33:44:55'/>
        <source network='default'/>
        </interface>
    改为:
    <interface type='bridge'>
        <mac address='00:11:22:33:44:55'/>
        <source bridge='br0'/>
        </interface>
    关闭虚拟机,并重启libvirtd服务:
    sudo /etc/init.d/libvirtd restart
    启动虚拟机,检测下是桥接是否运行正常,下图vnet0是guest虚拟网卡,br0是桥接网卡,eth1为物理网卡:
    # brctl show
        bridge name     bridge id               STP enabled     interfaces
        br0             8000.e41f13b416f6       no              eth1
                                                                vnet0
  5. oem激活
    请参看此篇,这里不作详解了.

    相关帖子:
    http://briteming.blogspot.com/2016/05/ubuntukvmvirtiowindows.html
    http://briteming.blogspot.com/2012/01/kvm.html
    ----------
    virsh

    virsh链接域

    qemu:///session (local access to per-user instance)
    qemu+unix:///session (local access to per-user instance)
    qemu:///system (local access to system instance)
    qemu+unix:///system (local access to system instance)
    qemu://example.com/system (remote access, TLS/x509)
    qemu+tcp://example.com/system (remote access, SASl/Kerberos)
    qemu+ssh://root@example.com/system (remote access, SSH tunnelled)


    虚拟机管理

    list –all 查看所有虚拟机

    virsh shutdown <domin> 关闭虚拟机domin,如果不设置domin则关闭所有的虚拟机

    virsh destory <domin> 强制关闭虚拟机

    virsh start <domin> 启动虚拟机

    直接操作domain

    edit domain-id 编辑XML配置文件,等效于:

    virsh dumpxml domain > domain.xml

    edit domain.xml

    virsh define domain.xml

    managedsave domain-id 保存当前运行的虚拟机的状态,当虚拟机再次启动的时候会恢复到之前保存的状态

    migrate optional –live –suspend domain-id desturi migrateuri 迁移虚拟机到其他机器 –live表示动态迁移,–suspend表示迁移到目的地时虚拟机处于paused状态,desturi是迁移到目的地主机的URI,migrateuri是迁移机器的URI。

    save domain-id state-file 保存一个正在运行的虚拟机的状态到一个文件中,以便以后恢复到此状态,一旦保存后虚拟机将不会再运行,占有的资源也会释放,virsh restore可以恢复到此前的状态。eg:save 12 /tmp/test

    restore state-file 恢复到之前保存的一个状态.eg:restore /tmp/test

    setmem domain-id kilobytes 改变当前虚拟机分配的内存,立即生效,单位KB

    setmaxmem domain-id kilobytes 设置一个虚拟机可分配的最大内存,它不改变当前使用的内存

    setvcpus domain-id count 改变当前虚拟机的vcpu个数

    resume domain-id 从挂起状态恢复一个虚拟机

    vcpuinfo domain-id 显示一些虚拟机的vcpu信息,包括几个vcpu,运行时间,和那个物理cpu亲和

    vcpupin domain-id vcpu cpulist 把vcpu绑定到物理cpu,vcpu的数量必须提供,cpulist是一个以逗号分割的物理cpu列表

    vncdisplay domain-id 显示vnc监听的地址和端口

    快照命令


    snapshots可以保存一个domain的disk memory device在某个时间点的状态以便将来会使用到,保存的文件名称必须是唯一的

    snapshot-create domain xmlfile 给domain创建一个snapshot,详细内容保存在xmlfile中

    snapshot-current domain 显示一个domain的当前的snapshot

    snapshot-list domain 显示一个domain的所有的snapshot

    snapshot-revert domain snapshot 恢复一个domian到以前的snapshot

    snapshot-delete domain snapshot –children 删除一个domain的snapshot

    调试

    所有的日志以及虚拟机启动的命令都在libvirt日志目录中。
    cat /var/log/libvirt/libvirtd.log