1. 功能与原理简介

1.1 功能

乘数云(CSYun)是新一代的IaaS(基础架构即服务)云计算管理平台软件。它主要面向的是未来的智能数据中心,具有简单、易用、稳定、灵活、超高性能等特点。可以秒级完成虚拟机的创建,同时支持固态硬盘(SSD)、普通硬盘组成的多存储池,为上层的数据库或其它应用提供高IO性能的支持。通过乘数云平台,可以方便的在物理机上创建和管理虚拟机。同时也可以在虚拟机中添加数据盘,而数据盘可以是创建在在物理机的SSD盘上,也可以是在普通硬盘上。

2. 安装配置

2.1 安装前准备

在一个云环境中,通常有多台物理机,我们可以在其中一台物理机上安装csyun-server程序,csyun-server是一个主控程序,提供了主要管理的功能,同时也提供了web管理界面的服务。

每台物理机上需要安装CentOS7.X,建议安装CentOS7.4。

在每台物理机上我们需要安装csyun-agent程序。

安装python3.6的依赖:

yum install -y tcl tcl-devel tk

同时在操作系统下需要有arping命令,程序会用到。如果没有请安装。 在CentOS7.X下,arping命令在包iputils包中:

yum install -y iputils

需要禁止iptables防火墙:

yum install iptables-services
systemctl disable iptables
systemctl stop iptables

安装ZFS

yum install -y epel-release
yum install -y http://download.zfsonlinux.org/epel/zfs-release.el7_4.noarch.rpm
yum install -y kernel-devel zfs

允许zfs的开机启动:

systemctl enable zfs-import-cache
systemctl enable zfs-mount
systemctl enable zfs-share
systemctl enable zfs-zed
systemctl enable zfs.target

安装kvm及相关虚拟化软件:

yum install -y kvm libvirt python-virtinst qemu-kvm virt-viewer tunctl bridge-utils avahi dmidecode qemu-kvm-tools virt-manager qemu-img virt-install net-tools libguestfs-tools

2.2 软件安装

搭建本云平台通常需要有多台独立的机器,具体需求如下:

  • X86服务器
  • CPU PIII 800M以上
  • 32G内存以上
  • 硬盘300G以上

csyun-server和csyun-agent软件是都是安装在root用户下,也运行root用户下。

安装包如下:

  • csyun-serverX.Y.Z.tar.xz: 其中X.Y.Z是版本号,如1.0.0
  • csyun-agentX.Y.Z.tar.xz: 其中X.Y.Z是版本号,如1.0.0
  • python3.6.X_centos7.tar.xz

把安装包csyun-serverX.Y.Z.tar.xz、csyun-agentX.Y.Z.tar.xz和python3.6.X_centos7.tar.xz解压到/opt目录下即可。 注意csyun-serverX.Y.Z.tar.xz只需要安装在其中的一台物理机上即可,而csyun-agentX.Y.Z.tar.gz和python3.6.X_centos7.tar.xz需要安装在每一台机器上。

为了方便运行命令,可以把/opt/csyun-server/bin目录加入PATH环境变量中:

如在.bash_profile文件中添加:

PATH=$PATH:/opt/clup/bin
export PATH

2.2 配置

2.2.1 建数据库

CSYun需要使用PostgreSQL数据库,所以运行之前,需要创建好用户和数据库:

CREATE USER csyun password 'csyun';
CREATE DATABASE csyun owner csyun;

按/opt/csyun-server/sql/install.sql脚本中的内容创建表和相应的函数:

psql -h 127.0.0.1 -Ucsyun -d csyun -f install.sql

2.2.2 创建存储池

创建虚拟机的OS镜像的存储池

zpool create zp01 /dev/sdX
zfs set dedup=on zp01

根据实际情况把/dev/sdX改成真实的磁盘,上面的命令会清除/dev/sdX上的数据,所以千万不能写错了!

创建数据盘的存储池:

vgcreate vgsata01 /dev/sdY
vgcreate vgssd01 /dev/sdY

有时会报“/dev/sdY not found”,这时用parted /dev/sdc,把分区格式改成msdos方式:

parted /dev/sdY mklabel msdos

往数据库中插入池的定义:

INSERT INTO csyun_storage_pool(pool_id, pool_name, pool_class, pool_type, pool_path)
 VALUES (1, '虚拟机OS池', 0, 103, 'zp01');

INSERT INTO csyun_storage_pool(pool_id, pool_name, pool_class, pool_type, pool_path)
 VALUES (2, 'ISO镜像池', 0, 103, 'zp01/isoimg');

INSERT INTO csyun_storage_pool(pool_id, pool_name, pool_class, pool_type, pool_path)
 VALUES (101, '数据盘SATA池01', 1, 102, 'vgsata01');

INSERT INTO csyun_storage_pool(pool_id, pool_name, pool_class, pool_type, pool_path)
 VALUES (102, '数据盘SSD池01', 1, 102, 'vgssd01');

2.2.3 配置csyun-server

csyun-server的配置文件为:/opt/csyun-server/conf/csyun-server.conf,内容如下:

# 当物理主机有多个IP地址时,会用在这个网络地址中的IP地址标识这台物理主机
pm_network=192.168.0.0

#agent与服务器之间通信的密码
internal_rpc_pass = csyun_pass_pwd
server_rpc_port = 4242
agent_rpc_port = 4243

dns=114.114.114.114,8.8.8.8

db_host = 127.0.0.1
db_port = 5432
db_user = csyun
db_pass = csyun
db_name = csyun


# http服务用户名与密码
http_user = admin
http_pass = cstech
http_auth = 0

各个配置项说明如下:

  • pm_network=192.168.0.0 : 这是一个网络地址,当物理机上有多块网卡和多个IP地址段是,表明云平台使用哪个网段。
  • internal_rpc_pass = csyun_pass_pwd : csyun-server与csyun-agent之间互联通信的密码
  • server_rpc_port = 4242 : csyun-server的内部rpc服务的端口号
  • agent_rpc_port = 4243 : csyun-agent的内部rpc服务的端口号
  • dns=114.114.114.114,8.8.8.8 : 这是为虚拟机指定DNS服务器的地址
  • db_host = 127.0.0.1 : 数据库的IP地址
  • db_port = 5432 : 数据库实例的端口
  • db_user = csyun : 数据库实例的用户名
  • db_pass = csyun : 数据库实例的密码
  • db_name = csyun : 数据库名称
  • http_user = admin : web管理界面的用户名
  • http_pass = cstech : web管理界面的密码
  • http_auth = 1 : web管理界面是否使用验证,生产系统应该设置为1,而在开发环境中,为了避免验证导致调试不方便,可以把此验证关掉。

按实际情况下修改上面的配置参数

2.2.4 配置csyun-agent

csyun-agent的配置文件为:/opt/csyun-agent/conf/csyun-agent.conf,内容如下:

#格式为 key = value
server_address = 192.168.0.5:4242
#agent与服务器之间通信的密码
internal_rpc_pass = csyun_pass_pwd
  • server_address = 192.168.0.5:4242 : 这是csyun-server的rpc服务的IP地址与端口
  • internal_rpc_pass = csyun_pass_pwd : 这是csyun-agent与csyun-server之间内部rpc通信的密码,要与csyun-server.conf中的配置项internal_rpc_pass设置相同的值,否则会导致系统不能正常工作。

2.2.5 配置开机自启动

在安装有csyun-server的机器上,在/opt/csyun-server/scripts下有如下文件

  • csyun-db.service
  • csyun-dhcpd.service
  • csyun-novnc.service
  • csyun-server.service

把csyun-db.service中的内容按实际的数据库安装情况进行修改。

然后把这些文件拷贝到 /etc/systemd/system目录下。

然后做如以下操作:

systemctl daemon-reload
systemctl enable csyun-db
systemctl enable csyun-dhcpd
systemctl enable csyun-novnc
systemctl enable csyun-server

在每台物理机上,在/opt/csyun-agent/scripts下有如下文件:

  • csyun-agent.service

把此文件拷贝到 /etc/systemd/system目录下:

配置csyun-agent的开机自启动:

systemctl daemon-reload
systemctl enable csyun-agent

3. 使用

3.1 后台服务的启动

在每台物理机器上检查csyun-agent是否启动了:

[root@pm02 ~]# systemctl status csyun-agent
● csyun-agent.service - csyun-agent
   Loaded: loaded (/etc/systemd/system/csyun-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-02-21 11:58:53 CST; 4s ago
  Process: 2552 ExecStop=/opt/csyun-agent/bin/csyun-agent stop (code=exited, status=0/SUCCESS)
  Process: 2792 ExecStart=/opt/csyun-agent/bin/csyun-agent start (code=exited, status=0/SUCCESS)
  Process: 2787 ExecStartPre=/opt/csyun-agent/bin/csyun-agent stop (code=exited, status=0/SUCCESS)
 Main PID: 2796 (python)
   CGroup: /system.slice/csyun-agent.service
           └─2796 ../pyenv/bin/python csyun_agent.py start

上面显示“Active: active (running) …”表示已正常启动了。

在控制节点上,查看csyun-db、csyun-server、csyun-dhcpd、csyun-novnc这些服务是否正常启动了:

[root@cssrv01 ~]# systemctl status csyun-db
● csyun-db.service - csyun-server
   Loaded: loaded (/etc/systemd/system/csyun-db.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-02-21 11:55:10 CST; 39min ago
  Process: 2247 ExecStart=/usr/pgsql-9.6/bin/pg_ctl start -D /home/postgres/pgdata (code=exited, status=0/SUCCESS)
  Process: 2233 ExecStartPre=/usr/pgsql-9.6/bin/pg_ctl stop -D /home/postgres/pgdata (code=exited, status=1/FAILURE)
 Main PID: 2279 (postgres)
   CGroup: /system.slice/csyun-db.service
           ├─ 2279 /usr/pgsql-9.6/bin/postgres -D /home/postgres/pgdata
           ├─ 2385 postgres: logger process   
           ├─ 2402 postgres: checkpointer process   
           ├─ 2403 postgres: writer process   
           ├─ 2404 postgres: wal writer process   
           ├─ 2405 postgres: autovacuum launcher process   
           ├─ 2407 postgres: stats collector process   
           └─19838 postgres: csyun csyun 192.168.0.111(65074) idle
...
...
...
 [root@cssrv01 ~]# systemctl status csyun-server
● csyun-server.service - csyun-server
   Loaded: loaded (/etc/systemd/system/csyun-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-02-21 11:55:10 CST; 2min 14s ago
  Process: 2551 ExecStart=/opt/csyun-server/bin/csyun-server start (code=exited, status=0/SUCCESS)
  Process: 2287 ExecStartPre=/opt/csyun-server/bin/csyun-server stop (code=exited, status=0/SUCCESS)
 Main PID: 2579 (python)
   CGroup: /system.slice/csyun-server.service
           └─2579 ../pyenv/bin/python csyun_server.py start
 ...
 ...
 ...
       
 [root@cssrv01 ~]# systemctl status csyun-dhcpd
● csyun-dhcpd.service - csyun-dhcpd
   Loaded: loaded (/etc/systemd/system/csyun-dhcpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-02-21 11:55:10 CST; 33min ago
  Process: 2505 ExecStart=/opt/csyun-server/bin/csyun-dhcpd start (code=exited, status=0/SUCCESS)
  Process: 2288 ExecStartPre=/opt/csyun-server/bin/csyun-dhcpd stop (code=exited, status=0/SUCCESS)
 Main PID: 2558 (python)
   CGroup: /system.slice/csyun-dhcpd.service
           └─2558 ../pyenv/bin/python csyun_dhcpd.py start

 ...
 ...
 ...
     
 
 [root@cssrv01 ~]# systemctl status csyun-novnc
● csyun-novnc.service - csyun-novnc
   Loaded: loaded (/etc/systemd/system/csyun-novnc.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-02-21 11:55:10 CST; 34min ago
  Process: 2240 ExecStart=/opt/csyun-server/bin/csyun-novnc start (code=exited, status=0/SUCCESS)
  Process: 2232 ExecStartPre=/opt/csyun-server/bin/csyun-novnc stop (code=exited, status=0/SUCCESS)
 Main PID: 2252 (python)
   CGroup: /system.slice/csyun-novnc.service
           ├─ 2252 python ./run --web=./web --target-config ./token 6080
           └─17133 python ./run --web=./web --target-config ./token 6080

3.2 web管理界面的使用

在浏览器中输入url: http:<控制节点的ip地址>:8080 就可以打开web管理界面了,如下图所示:

登录界面

输入用户名和密码(用户名为admin,默认密码为cstech)后就可以登录管理界面了:

主界面

在主界面的左边的功能栏中可以看到如下项:

  • 物理机管理: 显示物理机的详细情况
  • 系统存储池管理:显示系统存储池。系统存储池是指存储虚拟机OS镜像以及虚拟机模板镜像的一个文件系统。系统存储池是安装的时候指定的,不能够修改、增 加和删除。
  • 数据存储池管理:放数据盘的存储池,可以增加、删除和修改。
  • 虚拟机模板管理:虚拟机模板有两种类型:“普通模板”、“ISO模板”。“普通模板”是指已做好了一个完整的操作系统镜像,可以通过快速克隆这个已做好的镜像而快速创建出一个虚拟机。而“ISO模板”类型是指只是一个虚拟机的配置模板,需要通过这个配置和选择一个ISO文件来安装出一个新的虚拟机的。
  • 虚拟机管理:这此界面中可以创建、删除、修改虚拟机,也可以启动、停止虚拟机。也可以在此界面中登录虚拟机的控制台。
  • 数据盘管理:在这界面中可以查看和删除数据盘。
  • 注册码管理:在此界面中可以输入注册码。必须有合法的注册码,才可以正常使用乘数云平台。

在介绍各个界面的使用之后,先介绍一下乘数云平台的总体使用流程:

  1. 先安装好乘数云平台,配置好系统存储池的文件系统和路径。
  2. 在“数据存储池管理”界面中添加一个或多个数据存储池,当然不添加也可以,只是这时虚拟机只有默认的一块OS盘,不能添加第二块硬盘(即数据盘)。
  3. 把我们需要的操作系统ISO文件拷贝到所有物理机的/zp01/isoimg目录下,以便下面能通过这个ISO文件安装出一个虚拟机。
  4. 刚安装好的乘数云平台中,“虚拟机模板管理中”虚拟机模板管理中,只有1个默认的“ISO模板”类型的模板。这时在“虚拟机管理”中只能通过“安装”功能安装出一个虚拟机。安装一台虚拟机需要花费一定的时间。注意创建出来的虚拟机需要配置成dhcp的方式分配IP地址。
  5. 当完整安装了第一个虚拟机后,可以把这个虚拟机做成一个模板。方法为在“虚拟机模板管理”界面中,点击“把虚拟机拷贝成模板”按钮。当创建了这个模板后,就可以在“虚拟机管理”界面中通过此模板快速的创建出一个虚拟机了(几秒的时间内就可以完成)。
  6. 创建好虚拟机后,我们还可以为虚拟机中添加一个数据盘。当添加一块数据盘后,我们到虚拟机中就可以看到新添加的数据盘如“/dev/sda”、“/dev/sdb”等等这样的名称。注意,当删除一台虚拟机时,数据盘并不会被删除,而是会变成一块空闲的数据盘,我们可以把这个数据盘挂载到另一个虚拟机中。当然也可以在“虚拟机管理”界面中卸载一块数据盘,这时数据盘也会变成一块空闲的数据盘。数据盘只有在未挂载的情况下才能被删除。要删除未挂载的数据盘需要进入“数据盘管理”界面中

下面我们将详细讲解各个界面的使用。

3.2.1 物理机管理界面

界面如下图所示:

物理机管理界面

在此界面中有一个搜索栏,在搜索栏中可以通过输入物理机的主机名或IP地址搜索物理机。注意可以使用百分号“%”和下划线“_”做通配符来搜索物理机。百分号代表任意多个任意字符,而下划线代表单个任意字符。

在这个界面的列表中,我们需要注意的是“内存占用率(%)”、“CPU占用率(%)”这两列,当这两列表示在这台物理机上创建出所有虚拟机的CPU和内存占用到了这台物理机的多少。通常,当接近100%时,就不要在这台物理机上创建虚拟机了。当然如果我们创建出的虚拟机不启动,不占用资源,这时也可以超过100%。但当这些虚拟机都启动时,特别是内存超过100%时,会导致严重的问题。

3.2.2 系统存储池管理

界面如下图所示:

系统存储池管理界面

在界面中点“查看占用率”按钮,可以查看系统存储池在各台物理机上空间大小及已使用的百分比,如下图所示:

存储池占用率界面

3.2.3 数据存储池管理

界面如下图所示:

数据存储池管理界面

在此界面中可以增加、修改和删除数据存储池,注意,已创建了数据盘的数据存储池是不能被删除的。

点“增加”按钮就出来一个增加数据存储池的界面,如下图所示:

增加数据存储池界面

注意存储池的类型有三类:

  • 文件系统: 表示存储池是建在一个文件系统中,这时在“存储池路径”中输入文件系统的挂载路径,如“/data01”
  • LVM: 表示存储池使用的是一个LVM,这时在“存储池路径”中应该输入的是LVM卷组的名称,如“vgssd01”
  • ZFS: 表示储池池使用ZFS文件系度,这时在“存储池路径”中应该输入的是ZFS的池名称,如“zp01”。

通常我们都使用“LVM”类型的存储池。

3.2.4 虚拟机模板管理

界面如下图所示:

虚拟机模板管理界面

在此界面中,可以增加、修改、删除虚拟机模板,也可以把一个虚拟机拷贝成模板。

点“增加”按钮,弹出增加虚拟机模板的界面,见下图:

添加虚拟机模板界面

模板类型有两种:

  • 普通模板: 当从此类型的模板创建虚拟机时,会把已准备好的的模板的镜像文件直接复制成虚拟机的OS镜像盘。
  • ISO模板: 为从ISO镜像文件中安装一个虚拟机提供配置模板。

在界面的“模板配置”中需要输入一段xml的内容,这个内容是与Linux下的虚拟机管理命令virsh dumpxml中得到的虚拟机的xml配置是基本相同的,但在此xml配置文件,但其中的一些配置项用一些占位符如{vm_name}、{vm_uuid}等取代,一个xml内容的示例如下:

<domain type='kvm'>
  <name>{vm_name}</name>
  <uuid>{vm_uuid}</uuid>
  <title>{vm_title}</title>
  <memory unit='KiB'>{vm_mem_size}</memory>
  <currentMemory unit='KiB'>{vm_mem_size}</currentMemory>
  <vcpu placement='static'>{vm_cpu_cores}</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
  </os>
  <features>
    <acpi></acpi>
    <apic></apic>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Conroe</model>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'></timer>
    <timer name='pit' tickpolicy='delay'></timer>
    <timer name='hpet' present='no'></timer>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'></suspend-to-mem>
    <suspend-to-disk enabled='no'></suspend-to-disk>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'></driver>
      <source file='{vm_os_file}'></source>
      <target dev='vda' bus='virtio'></target>
      <boot order='1'></boot>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'></address>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'></address>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'></master>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'></address>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'></master>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'></address>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'></master>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'></address>
    </controller>
    <controller type='pci' index='0' model='pci-root'></controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'></address>
    </controller>
    <interface type='bridge'>
      <mac address='{mac_address}'></mac>
      <source bridge='br0'></source>
      <model type='virtio'></model>
      <boot order='2'></boot>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'></address>
    </interface>
    <serial type='pty'>
      <target port='0'></target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'></target>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'></target>
      <address type='virtio-serial' controller='0' bus='0' port='1'></address>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'></target>
      <address type='virtio-serial' controller='0' bus='0' port='2'></address>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'></address>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='{vnc_port}' autoport='no' listen='0.0.0.0' keymap='en-us' passwd='{vnc_password}'>
      <listen type='address' address='0.0.0.0'></listen>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'></address>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'></model>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'></address>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'></address>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'></address>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'></address>
    </memballoon>
  </devices>
</domain>

当模板类型为“普通模板”时,占位符如下:

  • {vm_name} : 虚拟机在Linux物理机下的真实名称。
  • {vm_uuid}:虚拟机的uuid
  • {vm_title}:虚拟机的title,即显示的名称
  • {vm_mem_size}:虚拟机的内存大小,单位为KB
  • {vm_cpu_cores}:虚拟机的vcpu数
  • {vm_os_file}:虚拟机的OS镜像文件名
  • {mac_address}:虚拟机网卡的MAC地址
  • {vnc_port}:虚拟机的VNC端口
  • {vnc_password}:虚拟机的VNC密码

当用此模板创建虚拟机时,这些占位符会被替换成真实的值。

当模板类型为“ISO模板”时,多了一个占用符:

  • {iso_file}:这表示ISO镜像文件的路径。

当增加了类型为“普通模板”的虚拟机模板后,需要在每台物理机上增加真正的模板镜像文件后,才能根据此模板创建虚拟机,方法如下:

zfs create zp01/tpl00000001 
cp centos7.4.qcow2 /zp01/tpl00000001/.

上面命令中的“centos7.4.qcow2”是已准备好的安装有操作系统的虚拟机OS盘的镜像文件。

点“把虚拟机拷贝成模板”按钮,弹出如下界面,见下图:

把虚拟机拷贝成模板的界面

在此界面中输入已有虚拟机的ID和模板名称,点“提交按钮”后就开始创建模板。注意只能把已关电的虚拟机拷贝成模板,所以请保证虚拟机处于关电状态中,另在整个创建模板的过程中,千万不要启动虚拟机,否则创建出的模板的镜像文件会存在不一致的情况。

在把虚拟机拷贝成模板的过程中,因为要把镜像文件拷贝到所有物理机上,所以此过程会花费较长的时间,没有完成之前,看到的模板状态都是“同步中”:

把虚拟机拷贝成模板的同步中状态

当状态从“同步中”变成“正常”之后,模板才完成了创建过程。

3.2.5 虚拟机管理

界面如下图所示:

虚拟机管理界面

在此界面中,在搜索框中可以按“物理机名称”、“虚拟机名称”、“虚拟机IP”搜索虚拟机,同样支持通配符百分号“%”及下划线“_”。

上面的一排功能按钮的功能说明如下:

  • 创建:通过类型为“普通模板”的虚拟机模板创建虚拟机,可以在数秒内创建一个虚拟机。
  • 安装:通过类型为“ISO模板”的虚拟机模板以及选择相应的ISO文件安装出一台虚拟机,需要花一定的时间。
  • 删除:把选择中的虚拟机删除掉。
  • 开机:把选择中的虚拟机开机启动。
  • 关机:把选择中的虚拟机关机,这种关机是相当于在操作系统中运行shutdown关机,比较优雅,但有可能关机失败。
  • 强制关机:把选择中的虚拟机强制关机,这种强制关机相当于直接把虚拟机关电,立即关机。
  • 重启:把选择中的虚拟机重启,这种重启是相当于在操作系统中运行reboot命令重启,比较优雅,但有可能重启失败。
  • 强制重启:把选择中的虚拟机强制重启,这种强制重启是相当于按下物理机器的电源的reset键一个强制重启虚拟机,是立即重启。
  • 暂停:把选择中的虚拟机暂停。
  • 恢复:把暂停的虚拟机恢复运行。

点创建按钮,弹出如下对话框:

创建虚拟机界面

在此界面中的模板下拉框中只有类型为“普通模板”的虚拟机模板。

点安装按钮,弹出如下对话框:

安装虚拟机界面

在此界面中的“虚拟机模板”下拉框中只有类型为“ISO模板”的虚拟机模板,在“ISO文件”的下拉框中显示出在物理机/zp01/isoimg目录下的ISO镜像文件。

在列表框中有如下按钮:

  • 登录:进入虚拟机的控制台界面中
  • 详情:会弹出一个会话框,在此会话框中可以查看虚拟机的详细信息,修改虚拟机的一些信息,增加、挂载、卸载数据盘等功能。

点“登录”按钮,弹出如下对话框:

虚拟机控制台界面

在虚拟机控制台界面中,有时没有显示出来,请把鼠标移动到中间,然后单击,然后按回车键,界面就会显示出来。

点“详情”按钮,弹出如下对话框:

虚拟机详情界面

这个对话框中有如下一些切换页:

  • 一般信息:可以查看虚拟机的一些信息,如VNC的地址,可以用VNC软件通过此地址连接到虚拟机的控制台上。
  • 控制台密码:可以查看和设置虚拟机的VNC密码。
  • 数据盘管理:可以为虚拟机添加、挂载、卸载数据盘
  • 修改规格:可以修改虚拟机的内存、CPU数。注意只有关电的虚拟机才能修改内存和CPU数。

切换页中的“控制台密码”的界面如下图所示:

修改虚拟机控制台密码界面

在此界面中,当鼠标单击“密码输入框”时,输入框中的密码会从“******”显示为真正的密码。

切换页中“数据盘管理”的界面如下图所示:

虚拟机数据盘管理界面

在上面的界面中,可以增加、挂载、卸载数据盘。点“增加”按钮,则弹出如下界面:

虚拟机数据盘管理界面

点击“挂载”按钮,则弹出如下界面:

虚拟机挂载数据盘界面

上图中的界面,显示空闲的未挂载的数据库,点其中的“挂载”按钮则完成了相应数据盘的挂载。

在切换页“数据盘管理”的界面中的列表框中点击“卸载”会弹出一个警告框,提示是否卸载此数据盘,如下图所示:

虚拟机卸载数据盘的警告框

注意:如果在虚拟机数据盘做成的文件系统且已被挂载,如果此时强制卸载有可能导致虚拟机不正常,所以千万要在虚拟机中umount掉数据盘的文件系统后再在此界面中卸载此数据盘!!!

切换页中“修改规格”的界面如下图所示:

修改虚拟机规格界面

注意只有在虚拟机在停电的状态下,才能修改虚拟机的内存和CPU。

3.2.6 数据盘管理

界面如下图所示:

数据盘管理界面

在此界面中,点列表框中的“删除”按钮可以删除数据盘。注意只能删除未挂载的数据盘,如果删除已挂载的数据盘,则弹出不允许的对话框,如下图所示;

不允许删除已挂载的数据盘的对话框

3.2.7 注册码管理

当没有输入有效的license时,界面显示如下图所示:

输入注册码界面

因为没有有效的注册吗,此时不能创建虚拟机。

当我们输入有效的license之后,界面显示如下图所示:

注册码信息界面

当实际的物理机超过我们的license中允许的物理机时,显示如下界面:

实际的物理机超过注册码的限制时的界面

注意此时,在超限的物理机上将不能创建虚拟机,在原有的物理机上仍然可以创建虚拟机。 这时请在上面的界面中输入支持足够多的物理机的注册码,即恢复正常。