知识回顾:


常见的虚拟化软件 ——

VMware:vSphere、VMware Workstation

RedHat:KVM、RHEV

Oracle:Oracle VirtualBox 

MicroSoft:Hype-V、Virtual PC

Citrix:Xen


虚拟化实现程度:

完全虚拟化

半虚拟化

硬件辅助虚拟化

云计算的三大模型:

IaaS:基础架构即服务

PaaS:平台即服务

SaaS:软件即服务   【DaaS,数据库即服务】


公有云:公开的,多个不同的企业、个人共用

私有云:私有的,单个企业或者个人独有

KVM平台的实现

软件组:虚拟化、虚拟化客户端、虚拟化平台、虚拟化工具

虚拟网络类型:

    桥接模式 —— 虚拟机与真机网络直接相连的 【手动添加br0】

    隔离模式 —— 虚拟机只能通过虚拟网络连到宿主机   【手动添加virbr1】


网络访问类型:

    NAT模式 —— 虚拟机共享宿主机virbr0接口地址访问外网 【自动配置】

    路由模式 —— 虚拟机把宿主机当成路由器 【需管理员手动配置】

添加br0桥接接口:

1. 建立ifcfg-br0配置文件

    #cp  .. ../ifcfg-eth0  .. ../ifcfg-br0

    #vim  .. ../ifcfg-br0

    NAME="br0"

    TYPE="Bridge"


2. 把物理网卡eth0加入到br0桥接

    #vim  .. ../ifcfg-eth0

    .. ..

    BRIDGE=br0


3. 重启network服务

KVM图形化管理工具:

    virt-manager 虚拟化管理器


    ** virbr1接口(隔离模式 network1)

KVM识别的接口:

     default

     network1

Linux系统ifconfig识别的接口:

     virbr0

     virbr1

KVM服务器远程管理:

方式1:先登录KVM服务器,再运行管理工具

     client# ssh  -X  root@KVM服务器

     kvmsvr# virt-manager  &


方式2:先打开管理工具,再连接KVM服务器

     client# virt-manager &

     .. .. 添加到KVM服务器的SSH连接



SSH密钥对验证的实现:

1. 客户机上创建密钥对文件

2. 由客户机把公钥部署给KVM服务器

3. 客户机免密码访问KVM服务器



故障1:上不了TTS、连不上FTP服务器

原因:有多个DHCP服务

排除方法:找到冗余的DHCP服务,限制监听接口

[root@stu53 ~]# cat /etc/sysconfig/dhcpd

DHCPDARGS="vmnet1 virbr1"


故障2:KVM虚拟机与真机无法互相访问

CentOS真机:

   stuXX

   br0:172.40.X.Y

   virbr1:192.168.4.1/24


svr5虚拟机:

   eth0:192.168.4.5/24


pc205虚拟机:

   eth0:192.168.4.205/24


故障3:ssh到svr5无法连接

原因:当前连接的目标主机地址以前曾经连结过(另一台主机)

排除方法:在SSH客户机上删除一个文件 ~/.ssh/known_hosts


—— 为KVM虚拟机改名

1. 导出原有虚拟机的XML描述

    #virsh  dumpxml  原虚拟机名  >  new.xml

2. 修改导出的XML描述【名称、UUID】

    #vim  new.xml

3. 根据修改之后的XML描述导入新名称的虚拟机

    #virsh  define  new.xml

4. 删除原有虚拟机

    #virsh  undefine  原虚拟机名


—— 复制KVM虚拟机

1. 获得原有虚拟机的XML描述

    #virsh  dumpxml  原虚拟机名  >  new.xml

2. 修改导出的XML描述【名称、UUID、磁盘文件、MAC地址】

    #vim  new.xml

3. 为新虚拟机拷贝磁盘文件

    #cp  ..../原虚拟机磁盘  ..../新虚拟机磁盘

4. 根据修改之后的XML描述导入新名称的虚拟机

    #virsh  define  new.xml

三合一操作 :

virsh  edit  虚拟机名称


快速复制虚拟机:

1. virsh  edit  原有虚拟机

    .. .. 修改配置(名称、UUID、磁盘、MAC)、:wq保存

2. cp  原有虚拟机的磁盘   新虚拟机的磁盘

virsh管理操作

XML描述文件 —— virsh  edit  虚拟机

virsh  net-edit  虚拟接口

virsh  net-destroy  虚拟接口

virsh  net-start  虚拟接口

其他管理操作:

virt-viewer直接访问窗口终端

virt-clone克隆




KVM虚拟化的命令行管理

LVM逻辑卷在虚拟机存储中的应用


#########################################################


练习一:virsh 命令工具的基本操作


virsh //直接进交互模式

virsh  nodeinfo   //查看KVM节点(服务器)信息

virsh  list   //列出正在运行的虚拟机

virsh  list  --all   //列出所有虚拟机(包括未启动的)

virsh  dominfo  虚拟机名称   //查看指定虚拟机的信息

virsh  start  虚拟机名称   //将指定的虚拟机开机

virsh  reboot  虚拟机名称   //将指定的虚拟机重启

virsh  shutdown  虚拟机名称   //将指定的虚拟机正常关机

virsh  destroy  虚拟机名称   //将指定的虚拟机强制关机(相当于拔电源)

virsh  autostart  虚拟机名称   //将指定的虚拟机设置随KVM自动开机

virsh  autostart  --disable  虚拟机名称   //将指定的虚拟机设置不随KVM自动开机



练习二:使用虚拟机的XML描述文件


1. 为已有的虚拟机改名


1)导出虚拟机 rh6_n1 的XML描述信息,保存为 new.xml 文件

[root@kvmsvr ~]# virsh  dumpxml  rh6_n1  >  new.xml


2)修改 new.xml

[root@kvmsvr ~]# vim  new.xml

  rhel6_node1   //修改为新的虚拟机名称

  c33a4aad-c555-48b3-a0a9-893ad0b4775e   //修改UUID值(可执行uuidgen命令获得)

.. ..  


3)根据 new.xml 建立新的虚拟机

[root@kvmsvr ~]# virsh  define  new.xml 

定义域 rhel6_node1(从 new.xml)


[root@kvmsvr ~]# virsh  list  --all

 Id    名称                         状态

----------------------------------------------------

 1     rh6_n1                         启用

 -     rhel6_node1                    关闭



4)删除原虚拟机的 XML 描述

[root@kvmsvr ~]# virsh  destroy  rh6_n1   //强制关机

域 rh6_n1 被删除


[root@kvmsvr ~]# virsh  undefine  rh6_n1   //删除虚拟机定义

域 rh6_n1 已经被取消定义


[root@kvmsvr ~]# virsh  list  --all   //确认删除结果

 Id    名称                         状态

----------------------------------------------------

 -     rhel6_node1                    关闭



2. 复制虚拟机


1)导出虚拟机 rhel6_node1 的XML描述信息,保存为 rh6_n2.xml 文件

[root@kvmsvr ~]# virsh  dumpxml  rhel6_node1  >  rh6_n2.xml


2)修改 rh6_n2.xml

[root@kvmsvr ~]# vim  rh6_n2.xml

  rh6_n2       //修改为新的虚拟机名称

  c33a4aad-c555-48b3-a0a9-893ad0b4775e   //修改UUID值(可执行uuidgen命令获得)

   

     

                //因为复制,应改用其他虚拟磁盘      .. ..

   

.. ..

   

      //修改网卡的MAC地址

.. .. 


3)复制虚拟机 rhel6_node1 的磁盘文件

[root@kvmsvr ~]# cp  -p  /data/p_w_picpaths/node1.img  /data/p_w_picpaths/node2.img


4)根据 rh6_n2.xml 建立新的虚拟机

[root@kvmsvr ~]# virsh  define  rh6_n2.xml 

定义域 rh6_n2(从 rh6_n2.xml)



练习三:访问虚拟机窗口、虚拟机克隆


1. virt-viewer  虚拟机名称   //与 virt-manager 管理方式基本一样


2. virt-clone  -o  模板虚拟机  -n  新虚拟机名称  -f 克隆后的虚拟机磁盘路径




练习四:LVM快照的创建、使用、验证


1. 建立测试LV、格式化、挂载,写入数据

[root@kvmsvr ~]# lvcreate  -L  200MB  -n  lvsrc  vg_data

[root@kvmsvr ~]# mkfs.ext4  /dev/vg_data/lvsrc

[root@kvmsvr ~]# mount  /dev/vg_data/lvsrc  /mnt/lvsrc

[root@kvmsvr ~]# dd  if=/dev/zero  of=/mnt/lvsrc/file1  bs=1M  count=100


2. 建立快照LV、挂载及访问

[root@kvmsvr ~]# lvcreate  -L  50M  -n  lvsnap  -s  /dev/vg_data/lvsrc

[root@kvmsvr ~]# mount  /dev/vg_data/lvsnap  /mnt/lvsnap

[root@kvmsvr ~]# df  -hT  |  grep  lvs

/dev/mapper/vg_data-lvsrc   ext4     194M  106M   79M  58% /mnt/lvsrc

/dev/mapper/vg_data-lvsnap  ext4     194M  106M   79M  58% /mnt/lvsnap


3. 快照卷的崩溃验证(可用空间耗尽)、快速重建

[root@kvmsvr ~]# dd  if=/dev/zero  of=/mnt/lvsnap/file2  bs=1M  count=60

dd: 正在写入"/mnt/lvsnap/file2": 只读文件系统

.. ..

45703168字节(46 MB)已复制,0.164632 秒,278 MB/秒


Message from syslogd@localhost at Jun 23 18:12:52 ...

 kernel:journal commit I/O error   //快照卷已崩溃


[root@kvmsvr ~]# lvremove  /dev/vg_data/lvsnap     //删除崩溃的快照卷


[root@kvmsvr ~]# lvcreate   -L   200M  -n   lvsnap   -s   /dev/vg_data/lvsrc

    //重建快照卷



练习五:从命令行创建虚拟机(建模板机)


1. 为虚拟机准备磁盘(逻辑卷)

[root@kvmsvr ~]# lvcreate  -L  20G  -n  lv_node1  vg_data

.. ..


2. 创建新的虚拟机,并从命令行安装RHEL 6.5系统(PXE方式)

[root@kvmsvr ~]# virt-install \

--name node1  --vcpus=1  --ram=1024  \

--disk path=/dev/vg_data/lv_node1 \

--network  network=network1  --pxe


    !!!! 详细可参考 man  virt-install 手册页

    !!!! 对于非PXE安装,应改用 --location=安装源URL


3. 初始化模板虚拟机,关机备用(平时应闲置)

[root@localhost ~]# touch  /.unconfigured

.. ..   //下次开机后会要求重设键盘、时区、root口令、网络等信息


[root@localhost ~]# shutdown  -h  now





练习六:利用LVM快照技术快速建新虚拟机


1. 根据模板机的 LV 建立快照卷

[root@kvmsvr ~]# lvcreate  -s  -n  rh6_snap1 -L 10G /dev/vg_data/lv_node1

  Logical volume "rh6_snap1" created


2. 导出模板机的XML描述,并修改为新虚拟机的定义(新名称、新UUID、新磁盘设备)

[root@kvmsvr ~]# virsh  dumpxml  node1  >  rh6muban.xml

[root@kvmsvr ~]# vim rh6muban.xml

  rh6_snap1         //修改名称

  a990f28e-4adc-14bc-9fcf-7353877d5c27   //修改UUID

            //修改磁盘路径

    //修改网卡MAC地址

  .. ..

  另存为  rh6_snap1.xml


3. 建立新的虚拟机

[root@kvmsvr ~]# virsh  define  rh6_snap1.xml   //导入

定义域 rh6_snap1(从 rh6_snap1.xml)

[root@kvmsvr ~]# virsh  list  --all   //确认结果

.. ..

-     rh6_snap1                       关闭



#########################################################