Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2294486
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: 虚拟化

2011-10-17 10:32:55

1.创建域(虚拟机):包括Volume和描述硬件配置的xml

  1. //前端与节点建立连接


  2. Connect conn=new Connect("qemu+ssh://root@192.168.69/system",false);

  3. //根据xml描述创建新虚拟机并启动


  4. SAXReader reader = new SAXReader();

  5. Document docu = reader.read(new File("/domain.xml"));

  6. String xmlDesc=docu.asXML();

  7. Domain domain=conn.domainCreateXML(xmlDesc, 0);

  8. domain.resume();
补:新建域可以直接加载镜像(.img),但这样镜像只能被一个用户使用。为可以让镜像能被多个用户使用,可使用StorageVol来关联镜像,虚拟机加载该备份即可。

  1. Connect con=new Connect("");
  2. //根据存储池的名字获得StoragePool

  3. StoragePool pool=con.storagePoolLookupByName("default");
  4. SAXReader reader=new SAXReader();
  5. Document docu=reader.read(new File("/volume.xml"));
  6. StorageVol vol=pool.storageVolCreateXML(docu.asXML(), 0);
 
记录下vol的存储地址,赋值到域的配置文件中即可。

删除vol

  1. StorageVol vol=pool.storageVolLookupByName(volName);
  2. vol.delete(0);
补:
StorageVol可以作为镜像的快照,大小很小,只记录了对镜像的修改。
2.迁移/销毁域

  1. //前端与节点建立连接

  2. Connect conn1=new Connect("qemu+ssh://root@192.168.82.70/system",false);
  3. //根据域的uuid-unique id(在生成域时,libvirt自动分配唯一的uuid),返回域。

  4. String uuid="";
  5. Domain domain=conn1.domainLookupByUUIDString(uuid);
  6. Connect conn2=new Connect("qemu+ssh://root@192.168.82.71/system",false);
  7. /*
  8.  * 把域从当前主机迁移到目的主机
  9.  * Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth)
  10.  * dconn:目的主机
  11.  * dname:可选,重命名域在目的机的名字
  12.  * uri:可选,目的机ip
  13.  * bandwidth:迁移带宽,Mbps
  14.  */
  15. domain.migrate(conn2, 1, null, null, 5);
  16. //销毁域

  17. domain.destroy();
补:域的名字、id等信息都在xml配置描述里定义。对于xml文件的操作使用dom4j。

标准domain.xml

    1. <domain type='kvm'>
    2.   <name>test</name>
    3.   <memory>524288</memory>
    4.   <currentMemory>524288</currentMemory>
    5.   <vcpu>1</vcpu>
    6.   <os>
    7.     <type arch='x86_64' machine='pc-0.14'>hvm</type>
    8.     <boot dev='hd'/>
    9.     <bootmenu enable='no'/>
    10.   </os>
    11.   <features>
    12.     <acpi/>
    13.     <apic/>
    14.     <pae/>
    15.   </features>
    16.   <clock offset='localtime'/>
    17.   <on_poweroff>destroy</on_poweroff>
    18.   <on_reboot>restart</on_reboot>
    19.   <on_crash>restart</on_crash>
    20.   <devices>
    21.     <emulator>/usr/bin/qemu-kvm</emulator>
    22.     <disk type='file' device='disk'>
    23.       <driver name='qemu' type='qcow2'/>
    24.       <source file='/var/lib/libvirt/images/test.img'/><!--运行的镜像-->
    25.       <target dev='vda' bus='virtio'/>
    26.       <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    27.     </disk>
    28.     <interface type='network'>
    29.       <mac address='52:54:00:19:25:7b'/>
    30.       <source network='default'/>
    31.       <model type='virtio'/>
    32.       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    33.     </interface>
    34.     <serial type='pty'>
    35.       <target port='0'/>
    36.     </serial>
    37.     <console type='pty'>
    38.       <target type='serial' port='0'/>
    39.     </console>
    40.     <input type='tablet' bus='usb'/>
    41.     <input type='mouse' bus='ps2'/>
    42.     <graphics type='vnc' port='5910' autoport='no' listen='0.0.0.0'/>
    43.     <sound model='ac97'>
    44.       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    45.     </sound>
    46.     <video>
    47.       <model type='cirrus' vram='9216' heads='1'/>
    48.       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    49.     </video>
    50.     <memballoon model='virtio'>
    51.       <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    52.     </memballoon>
    53.   </devices>
    54. </domain>
    标准volume.xml

    1. <volume>
    2.   <name></name>
    3.   <key>/var/lib/libvirt/images/temp.ss</key>
    4.   <source>
    5.   </source>
    6.   <capacity>8589934592</capacity>
    7.   <allocation>139264</allocation>
    8.   <target>
    9.     <path>/var/lib/libvirt/images/temp.ss</path> <!--新卷的地址-->
    10.     <format type='qcow2'/>
    11.     <permissions>
    12.       <mode>0600</mode>
    13.       <owner>0</owner>
    14.       <group>0</group>
    15.     </permissions>
    16.   </target>
    17.    <backingStore>
    18.     <path>/var/lib/libvirt/images/WinXP.img</path><!--关联的镜像-->
    19.     <format type='qcow2'/>
    20.     <permissions>
    21.       <mode>0600</mode>
    22.       <owner>107</owner>
    23.       <group>107</group>
    24.     </permissions>
    25.   </backingStore>
    26. </volume>
    补:dom4j使用示例

  1. SAXReader reader = new SAXReader();
  2. Document docu = reader.read(new File("/domain.xml"));
  3. //更改元素的属性值

  4. Element graphics=docu.getRootElement().element("devices").element("graphics");
  5. Attribute attrPort=graphics.attribute("port");
  6. attrPort.setText(getPort());
  7. //更改元素值

  8. Element nameEle=docu.getRootElement().element("name");
  9. nameEle.setText("new name");
  10. //以字符串形式返回xml

  11. String docXmlText=docu.asXML();
阅读(4701) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~