zoukankan      html  css  js  c++  java
  • kvm总结复习

    一、虚拟化概念

    1、虚拟化技术:在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

    2、虚拟化:也就是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机

    3、虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

    虚拟化技术的趋势:

    (1)降低运营成本;

    (2)提高应用兼容性;

    (3)加速应用部署;

    (4)提高服务可用性;

    (5)提升资源利用率;

    (6)动态调度资源;

    (7)降低能源消耗。

    二、虚拟化分类

    1、虚拟化层次种类:

    (1)完全虚拟化:hypervisor(VMWare vsPhere,VirtualPC,KVM)

    (2)准虚拟化(Xen)

    (3)系统虚拟化

    (4)桌面虚拟化

    2、虚拟化架构分类:

    (1)1型虚拟化(Xen,VMWare vsPhere)

    (2)2型虚拟化(KVM,VirtualBox,VMWare Workstation)

    三、kvm组成

    1、KVM:运行在内核空间,提供CPU和内存的虚拟化

      Libvirt:是 KVM 的管理工具。Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh。

      (1)libvirtd是服务程序,接收和处理 API 请求;
      (2)API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
      (3)virsh 是我们经常要用的 KVM 命令行工具。作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。

    2、QEMU:运行在用户空间,提供硬件I/O虚拟化

    3、kvm虚拟化所需组件介绍
      kvm:核心套件
      virt-manager:图形化 KVM 管理软件
      libvirt:提供虚拟机与宿主相互通信的机制
      libvirt-python:允许使用 libvirt API
      python-virtinst:CLI 下创建 KVM 的工具
      libvirt-client:提供 client 访问 kvm 服务器的机制 ,并包含 virsh 命令进行 管理和控制VMs
      qemu-kvm:提供用户级 KVM 环境
      qemu-img:VMs 磁盘管理

    4、KVM 的虚拟化需要硬件支持(需要处理器支持虚拟化:如 Intel 厂商的 Intel-VT ( vmx )技术&&AMD 厂商的 AMD-V ( svm )技术。

      查看是否支持虚拟化:cat /proc/cpuinfo | grep -e vmx -e nx -e svm 或者 egrep '(vmx|svm)' /proc/cpuinfo

    5、kvm虚拟机配置文件位置:/etc/libvirt/qemu

      kvm虚拟机磁盘文件位置:/var/lib/libvirt/images

    四、kvm虚拟机管理

    1、virt-manager图形化

    2、virsh命令行

    (1)基础操作

    virsh list   #列出当前宿主机上处于运行状态的虚拟机
    virsh list --all   #列出当前宿主机上所有的虚拟机
    virsh start vm1 (虚拟机name)   #开启某一台虚拟机
    virsh shutdown vm1 (虚拟机name)   #正常关闭一台虚拟机
    virsh destroy vm1   #强制关闭某一台虚拟机
    virsh autostart vm1   #开机自启动虚拟机vm1
    virsh autostart --disable vm1   #关闭开机自启动
    virsh edit vm1   #编辑某个虚拟机的配置文件
    virsh pool-list   #列出存储池

    (2)创建磁盘镜像

    如:qemu-img create -f qcow2 -o size=9G /export/kvm/test.qcow2
    创建一个大小为 50G 的,格式为 qcow2 的磁盘镜像

    (3)查看磁盘信息

    qemu-img info /export/kvm/test.qcow2

    (4)创建&&管理虚机

    Virt-install:命令行下创建虚拟机的命令,不过在它后面需要跟上很多的参数
      --name: 虚拟机的名字。
      --disk Location: 磁盘映像的位置。
      --graphics : 怎样连接 VM ,通常是 SPICE 。
      --vcpu : 虚拟 CPU 的数量。
      --ram : 以兆字节计算的已分配内存大小。
      --location : 指定安装源路径
      --network : 指定虚拟网络,通常是 virbr0 或者自己设定的 br0
    例如:
    virt-install --name=test --disk path=/export/kvm/test.qcow2 --ram=1024 --vcpus=1 --graphics spice --location=/export/download/software/iso/CentOS-7.3-x86_64-DVD.iso --network bridge=br0

    (5)通过XML文件定义和删除虚机

    virsh destroy   #删除一个域
    virsh define   #从一个 XML 文件定义(但不开始)一个域
    virsh undefine   #删除一个虚机域

    (6)克隆虚机(关机情况下)

    virt-clone -o vm2 -n vm4 -f /var/lib/libvirt/images/vm4.qcow2

    五、kvm通过virsh console 连入虚机

      centos7开启虚拟机的console功能:

    grubby --update-kernel=ALL --args="console=ttyS0"
    reboot

      连入虚机:

    virsh console vm-name

      退出console连接的虚机:按 ctrl+] 组合键退出virsh console

    六、kvm虚拟化透传

      KVM 虚拟化需要处理器对虚拟化技术的支持,当我们需要进行虚拟机嵌套虚拟机时,我们需要让虚拟机中处理器对 VT 功能的支持达到透传的效果。
      nested 虚拟机嵌套( kvm on kvm ):nested 技术,简单的说,就是在虚拟机上跑虚拟机。

    1、查看一层客户端是否支持 VT

    grep vmx /proc/cpuinfo

    2、在物理服务器上为嵌套虚拟机做准备 --- CPU 虚拟化透传
    (1)# vim /etc/modprobe.d/kvm-nested.conf (新建配置文件)

    options kvm_intel nested=1

    (2)重新加载 kvm 模块

    modprobe -r kvm_intel   #-r参数:remove掉kvm_intel模块
    modprobe kvm_intel     #加载kvm_intel模块

    (3)验证是否加载成功

    cat /sys/module/kvm_intel/parameters/nested

      Y ---“Y” 表示 cpu 虚拟化透传功能开启

    3、编辑需要做虚拟化透传的虚拟机的配置文件

    virsh edit centos7 ( Virtual Machine Name )
    <cpu mode='host-passthrough'/>

    4、进入虚拟机中查看cpu是否透传成功

    lsmod | grep kvm

    七、kvm存储管理

      KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。
      Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型;
      Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

      厚置备:厚置备是传统存储置备模型。对于厚置备,预先提供大量存储空间以满足未来的存储需要。但是,空间可能一直未被使用,这样会导致无法充分利用存储容量。
      精简置备:此方法与厚置备相反,通过以灵活的按需方式分配存储空间,可帮助您消除无法充分利用存储的问题。可以通过 ESXi,使用两种模型的精简置备(阵列级别和虚拟磁盘级别)。

      使用文件做 Volume 有很多优点:存储方便、移植性好、可复制
      KVM 支持多种 Volume 文件格式:
      raw:是默认格式,即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。
      qcow2:是推荐使用的格式,cow 表示 copy on write,能够节省磁盘空间(精简置备),支持 AES 加密,支持 zlib 压缩,支持多快照,功能很多。
      vmdk:是 VMWare 的虚拟磁盘格式,也就是说 VMWare 虚机可以直接在 KVM上 运行。

      fdisk:磁盘分区,是Linux发行版本中最常用的分区工具

    m 查看全部可用的参数
    n  添加新的分区
    d 删除某个分区信息
    l 列出所有可用的分区类型(查看)
    t 改变某个分区的类型
    p  打印分区信息(查看分区表信息)
    w  保存分区信息并退出
    q  不保存直接退出

      mkfs:进行格式化,就是安装文件系统的过程mkfs(meke xfs)

      lsblk:用来查看block设备的信息

    八、kvm网络管理

    1、kvm的三种网络模式

    (1)NAT(默认上网):虚拟机利用 host 机器的 ip 进行上网。对外显示一个 ip;

    (2)自带的bridge:将虚拟机桥接到 host 机器的网卡上 ,vm和 host 机器都通过 bridge 上网;对外有同网段的不通 ip,此种方式host却不能和vm联通

    (3)Linux bridge:基本原理就是创建一个桥接接口 br0 ,在物理网卡和虚拟网络接口之间传递数据。此种方式host也可以和vm连通;是 Linux 上用来做 TCP/IP 二层协议交换的设备

    2、linux bridge命令:

    brctl addbr <bridge>        add bridge  #添加网桥
    brctl delbr <bridge>        delete bridge  #删除网桥
    brctl addif <bridge> <device>   add interface to bridge  #向网桥添加接口
    brctl delif <bridge> <device>   delete interface from bridge   #删除网桥上接口
    brctl show [ <bridge> ]        show a list of bridges  #查看网桥列表

    3、Linux bridge 实现 vlan

    (1)查看核心是否提供VLAN功能

    dmesg | grep -i 802

      如果8021q模块没有载入系统,则可以通过使用modprobe模组命令载入802.1q模组,并利用lsmod命令确认模组是否已经载入到核心内。

     modprobe 8021q
     lsmod | grep 8021q

    (2)安装用于查看VLAN配置的工具---vconfig

    (3)创建VLAN接口

    vconfig add ens37 10
    vconfig add ens37 20
    vim ifcfg-ens37.10 && ens37.20
    #############################
    VLAN=yes      #启用vlan
    TYPE=vlan      #类型vlan
    PHYSDEV=ens37    #物理设备网卡
    VLAN_ID=10      #vlan_id
    NAME=ens37.10      
    ONBOOT=yes      #自启
    ZONE=trusted      #开启作用域
    DEVICE=ens37.10      #设备名
    BRIDGE=brvlan-10      #网桥
    #################################

    (4)分别建立网桥brvlan-10,brvlan-20

    brctl addbr brvlan-10
    brctl addbr brvlan-20

    (5)编辑网桥brvlan-10和brvlan-20配置文件:

    #vim ifcfg-brvlan-10
    TYPE=bridge
    BOOTPROTO=static
    NAME=brvlan-10
    DEVICE=brvlan-10
    ONBOOT=yes
    #vim ifcfg-brvlan-20
    TYPE=bridge
    BOOTPROTO=static
    NAME=brvlan-20
    DEVICE=brvlan-20
    ONBOOT=yes

    (6)将网桥brvlan-10接到网口ens37.10,brvlan-20接到网口ens37.20

    brctl addif brvlan-10 ens34.10
    brctl addif brvlan-20 ens34.20

    (7)重启网络服务

    4、网卡配置bond(绑定)

    (一)网卡bond(绑定),也称作网卡捆绑。就是将两个或者更多的物理网卡绑定成一个虚拟网卡。网卡是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在应用部署中是一种常用的技术。

          多网卡绑定实际上需要提供一个额外的软件的bond驱动程序实现。通过驱动程序可以将多块网卡屏蔽。对TCP/IP协议层只存在一个Bond网卡,在Bond程序中实现网络流量的负载均衡,即将一个网络请求重定位到不同的网卡上,来提高总体网络的可用性。

    (二)网卡绑定的目的
       1.提高网卡的吞吐量。
       2.增强网络的高可用,同时也能实现负载均衡。

    (三)网卡配置bond(绑定)bond模式:

      1、Mode=0(balance-rr) 表示负载分担round-robin,平衡轮询策略,具有负载平衡和容错功能
      bond的网卡MAC为当前活动的网卡的MAC地址,需要交换机设置聚合模式,将多个网卡绑定为一条链路。
      2、Mode=1(active-backup) 表示主备模式具有容错功能,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。
      3、Mode=2(balance-xor) 表示XOR Hash负载分担(异或平衡策略),具有负载平衡和容错功能
      每个slave接口传输每个数据包和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)。
      4、Mode=3(broadcast)  表示所有包从所有interface发出,广播策略,具有容错能力,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。  
      5、Mode=4(802.3ad) 表示支持802.3ad协议(IEEE802.3ad 动态链接聚合) 和交换机的聚合LACP方式配合(需要xmit_hash_policy)。
      6、Mode=5(balance-tlb) 适配器传输负载均衡,并行发送,无法并行接收,解决了数据发送的瓶颈。 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。  
      7、Mode=6(balance-alb) 在5的tlb基础上增加了rlb。适配器负载均衡模式并行发送,并行接收数据包

      5和6不需要交换机端的设置,网卡能自动聚合。4需要支持802.3ad。0,2和3理论上需要静态聚合方式,但实测中0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。

    常用的有三种:
      mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
      mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
      mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

    (四)网卡配置bond

    1、编辑bond配置文件

    TYPE=Ethernet
    BOOTPROTO=none
    DEVICE=ens37
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes

    2、导入bonding模块

    modprobe bonding
    lsmod | grep bonding

    3、创建bond0,并桥接到br1

    #vim ifcfg-bond0
    DEVICE=bond0
    TYPE=Bond
    NAME=bond0
    BONDING_MASTER=yes
    BOOTPROTO=static
    USERCTL=no
    ONBOOT=yes
    BONDING_OPTS="mode=6 miimon=100"
    BRIDGE=br1

    4、创建br1网桥

    # vim ifcfg-br1
    TYPE=Bridge
    DEVICE=br1
    ONBOOT=yes
    BOOTPROTO=static
    NAME=br1

    5、创建虚拟网口vlan10,vlan20的配置文件

    # vim ifcfg-br1.10 && 20
    VLAN=yes
    TYPE=vlan
    PHYSDEV=br1
    VLAN_ID=10
    NAME=br1.10
    ONBOOT=yes
    ZONE=trusted
    DEVICE=br1.10
    BRIDGE=brvlan-10

    6、创建vlan的网桥

    ]# vim ifcfg-brvlan-10 &&20
    TYPE=bridge
    BOOTPROTO=static
    NAME=brvlan-10
    DEVICE=brvlan-10
    ONBOOT=yes

    7、连接网桥和虚拟网口

     brctl addif brvlan-10 br1.10
     brctl addif brvlan-20 br1.20

    8、重启网络服务

    九、虚机迁移

      系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行。

    1、冷迁移

      使用scp将一台宿主机里的虚拟机配置XML文件及磁盘qcow2文件拷贝到另一台宿主机上,来克隆虚拟机;使用virsh define定义配置文件,安装时如果报错,需要删除虚拟机,修改配置文件信息(disk文件位置和interface类型),再重新使用virsh define定义安装。

    2、热迁移

      热迁移(又叫动态迁移、实时迁移),即虚拟机保存( save ) / 恢复 (restore) :将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。

      迁移的要求:两边的宿主机硬件要一致,一定有共享存储

    3、nfs搭建过程

    (1)服务端下载nfs-utils,并开启rpvbind 和nfs

    (2)写入配置文件:

    # vim /etc/exports
    /PATH HOSTNAME(rw,sync)/(ro)

    (3)showmount -e 

    (4)客户端下载nfs-utils,并启动

    (5)showmount -e 检查挂载信息,并挂载

  • 相关阅读:
    iOS
    iOS多线程编程之GCD的常见用法
    iOS多线程编程之GCD的基本使用
    iOS多线程编程之线程的状态
    iOS多线程编程之GCD介绍
    iOS多线程编程之线程间的通信
    iOS多线程编程之创建线程安全
    iOS多线程编程之创建线程
    iOS多线程编程之多线程简单介绍
    服务网关
  • 原文地址:https://www.cnblogs.com/renyz/p/11757958.html
Copyright © 2011-2022 走看看