zoukankan      html  css  js  c++  java
  • kvm虚拟化

    一、kvm虚拟化介绍

    什么是虚拟化

    虚拟化就是通过模拟计算机硬件(cpu,内存,硬盘,网卡)来实现在一台物理服务器上运行同时多个不同的操作系统,
    并且使每个操作系统之间都是互相隔离的

    为什么要学习虚拟化

    目前国内的公有云底层采用的都是kvm虚拟化,经过这几年的快速发展,kvm计算已经非常成熟稳定,
    在任何linux发行版中,kvm都是标配,虚拟化已经成为了一项必备的技能

    虚拟化的应用场景

    场景1:只有一台服务器,但是要运行多个版本的软件,不同版本之间还相互冲突
    
    场景2:机房的迁移,物理机在运输过程中容易损坏,导致数据丢失
    
    场景3:openstack部署太难!步骤太繁琐,如何体验最新版的openstack
    
    场景4:开发环境和测试环境经常损坏,运维重复装系统
    
    场景5:业务的扩张,需要快速部署10个一模一样的集群

    二、安装KVM虚拟机

    环境准备

    主机名      kvm01
    IP         10.0.0.11
    操作系统    centos7
    内存       4G
    硬盘       50G
    
    在处理器设置中勾选 虚拟化 Intel VT-x...
    优化: 
    kvm01在安装系统的时候,不要使用自动分区,自动分区使用的LVM分区,在使用kvm的时候,特别卡! 关闭selinux 关闭firewalld

    安装kvm管理工具

    安装:
    yum install libvirt virt-install qemu-kvm -y
      建议使用光盘安装,会特别快:1、挂载光盘,2、yum源指定光盘.3、安装 介绍: libvirt服务:管理kvm虚拟机的生命周期 virt
    -install工具:创建安装虚拟机 qemu-kvm工具:使用qemu-img为虚拟机提供硬盘

    Linux上的几种虚拟化软件

    qemu  软件纯模拟全虚拟化软件,特别慢!
    xen   性能特别好,需要使用专门修改之后的内核,兼容性差
    KVM   需要cpu支持虚拟化,基于内核,不需要使用专门的内核,兼容行好,性能较好

    准备条件

    在window上安装TightVNC
    tightvnc官网:http://www.tightvnc.com
    
    vnc是一个跨平台的远程桌面软件,待会安装kvm虚拟机系统的时候使用
    
    启动libvirtd服务
    systemctl start libvirtd.service
    systemctl status libvirtd.service

    安装kvm虚拟机

    建议虚拟机内存不要低于1024M,否则安装系统特别慢!
    安装之前创建好目录,并带入系统文件
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    virt-install --virt-type kvm   指定类型
      --os-type=linux 指定客户机
      --os-variant rhel7 发行版本
      --name centos7
      --memory 1024
      --vcpus 1
      --disk /opt/centos2.raw,format=raw,size=10
      --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso
      --network network=default
      --graphics vnc,listen=0.0.0.0
      --noautoconsole

    执行完命令后,赶紧使用TightVNC登陆正在安装的虚拟机,默认端口是5900
    10.0.0.11:5900
    看到熟悉的安装界面,倒计时中,赶紧上下键切换一下
    回车,不用调整内核,网卡也是eth0

    注意,最重要的一点,分区的时候,不要swap分区,选择(i will configure partitioning)
    然后不要选择LVM,选择标准分区(standard Partition)
    添加一个根分区(/),done

    KDUMP取消掉

    网络(NETWORK & HOSTNAME) 打开

    时间选择 上海
    OK,进入安装
    然后设置密码

    三、虚拟机日常管理

    列表list
      virsh list 处于运行状态的
      virsh list --all 所有的 开机start
      virsh start centos7(虚拟机名字) 关机shutdown 拔电源关机destroy
    导出配置dumpxml
      默认是输出到屏幕virsh dumpxml >centos7.xml
      配置文件位于/etc/libvirt/qemu/centos7.xml
      /opt/下的raw文件是模板文件,只要这两个文件在,就可以任意迁移虚拟机 删除undefine
       推荐:先destroy,在undefine 导入配置define
      virsh define centos7.xml 修改配置edit
      有语法错误提示 重命名domrename 注意:低版本不支持 挂起suspend 恢复resume 查询vnc端口号vncdisplay
      新建的虚拟机的端口号会自增
      virsh vncdisplay centos7
      :1 表示5901 开机启动autostart

    四、KVM虚拟机的console登陆

    为什么要使用console链接

    1:常规情况下,安装完 KVM 之后,可能都会通过 VNC 连接到 KVM 虚拟机里面去修改 IP 等信息。
    但是一旦虚拟机比较多的话,打开过多的端口会造成安全问题
    2:很多时候,我们是通过跳板机连接的宿主机,你的window和kvm宿主机没有直达的路由,
    这时候vnc都用不了,如何快速进入到 KVM 虚拟机里面去排查问题呢?

    配置console链接

    在centos7的kvm虚拟机中执行:
    grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    reboot重启生效
    步骤:
    1、通过svn链接到虚拟机,查看IP
    2、链接客户机ssh root@192.168.122.206
    3、执行上面的命令
    4、reboot重启
    5、链接 virsh console centos7
    6、ctrl+] 就会退回到客户机

    作业:centos6的虚拟机如何实现console链接?

    五、KVM虚拟磁盘格式转换和快照管理

    kvm虚拟机的两种常用格式

    raw:裸格式,占用空间比较大,不适合远程传输,不支持快照功能,性能较好
    
    qcow2:cow(copy on write)占用空间小,适合传输,支持快照,性能比raw差一点点

    qemu-img的常用命令

    创建虚拟磁盘
    qemu-img  create  test.raw  10G
    qemu-img create -f qcow2 test.qcow2 10G
    
    查看虚拟磁盘信息
    qemu-img info test.raw
    
    调整虚拟磁盘容量大小
    qemu-img resize test.raw +5G
    
    磁盘格式转换,转换前关机
    qemu-img convert -f raw -O qcow2  test.raw oldboy.qcow2 
    转换完成后,修改配置文件(两个地方,类型和路径)

    实战

    将现有的虚拟机的磁盘格式由raw转换为qcow2,并测试运行

    快照管理

    创建快照
    virsh snapshot-create centos7
    
    查看快照
    virsh snapshot-list centos7
    
    还原快照
    virsh snapshot-revert centos7 --snapshotname 1516574134
    
    删除快照
    virsh snapshot-delete centos7 --snapshotname 1516636570

    快照空间只管创建,不管回收,删除之后,空间还被占用着

    六、KVM虚拟机的克隆

    完整克隆
        实现方法:
        virt-clone -o web01 --auto-clone
      克隆后,新的虚拟机后面多了-lone
      查看以下两者的配置文件的不同
      virsh dumpxml web01 > web01.xml
      virsh dumpxml web01-clone > web01-clone.xml
      vimdiff web01.xml web01-clone.xml
        名字
        uuid
        磁盘文件
        mac地址

    链接克隆 实现方法: shell脚本

    手动实现完整克隆的步骤(100%成功)

    1:克隆虚拟磁盘文件
    cp centos7.qcow2 web03.qcow2
    2:生成新的虚拟机配置文件
    name修改
    uuid删掉
    disk路径/opt/web03.qcow2
    mac地址删除
    3:测试启动
    virsh define web01.xml

    链接克隆(占用空间特别的小)

    qemu-img create -f qcow2 -b cetnos7.qcow2 web04.qcow2
    
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

    链接克隆和完整克隆的区别就在于第一步,完整复制和撞见回血文件的区别

    七、kvm虚拟机的桥接网络

    为什么要使用桥接网络

    我们运行虚拟机的目的是,在虚拟机中运行我们的业务,现在业务所需要的服务都已经运行了,
    可是除了在宿主机上能访问,其他人都访问不了!!!

    创建桥接网络

    创建桥接网络
    1:virsh iface-bridge eth0 br0
    如果报错,无法成功修改,可以自己手工创建br和修改eth0 基于桥接网络创建虚拟机
    2:virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    virt-install --virt-type kvm 
    --os-type=linux
    --os-variant rhel7
    --name web04
    --memory 1024
    --vcpus 1
    --disk /opt/web04.qcow2,format=qcow2,size=10
    --boot hd
    --network bridge=br0 这里指定了桥接网卡
    --graphics vnc,listen=0.0.0.0
    --noautoconsole

    通过vnc连接到虚拟机,查看ip,已经变成了10.0.0.131

    将已有的虚拟机改为桥接网络

    首先是关机状态
    1
    :virsh edit centos7 <interface type='bridge'> <mac address='52:54:00:55:aa:fa'/> <source bridge='br0’/> 这里的default是系统配置的网路,可以通过virsh进入命令命令行输入net-edit default看到
    如果促使dhcp分配的IP,就要修改一下配置 2:修改虚拟机ip地址 /etc/sysconfig/network-scripts/ifcfg-eth0
    修改:
      BOOTPROTO="static"
      删除UUID
    添加:
      IPADDR="10.0.0.132"
      NETMASK="255.255.255.0"
      GATEWAY="10.0.0.254"
      DNS=“223.5.5.5”
    保存,重启网络

    通过vnc连接到虚拟机,查看ip,已经变成了10.0.0.132

    kvm NAT模式网络原理图

    kvm桥接网络原理图

    八、kvm的虚拟添加技术

    什么是热添加技术

    热添加技术就是不停机的情况下,在线热添加硬盘,内存,cpu,网卡等设备,
    热添加技术一般都是在虚拟机资源不够了,又不能停机的情况下使用的,
    热添加技术是虚拟机相对于物理机的一个很大的优势,它让资源分配变得更灵活!

    热添加的类型

    1.热添加硬盘
      创建硬盘
    qemu-img create -f qcow2 centos7-add01.qcow2 5G

      热添加硬盘
    virsh attach-disk web01 /opt/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
    vdb:指定硬盘的名字,因为已经有vba了
    --live 热添加
    cache=none 不分配缓存
    要使用需要给分区
    扩展:硬盘扩容
      虚拟机卸载硬盘
      宿主机剥离硬盘virsh detach-disk
      重置之前的硬盘
      挂载----看到容量没变---删除原分区---修改分区表,让使用所有的空间
      ---partprobe /dev/vdb(通知内核,调整)---查看还是没变
      ---xfs_growfs /mnt(因为用的是xfs,如果是 ft4 用resize2fs /mnt
      ---OK!
    2.热添加网卡   添加网卡
    virsh attach-interface web04 --type bridge  --model  virtio --source br0
      也可以指定network --source 就是default
      一定要指定virtio
      永久修改,要修该配置文件
      在复制一样的,删除MAC,修改类型
    3.热添加cpu   安装参数:
      添加参数maxvcpus=4
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1,maxvcpus=4 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
      执行报错:系统的原因
      解决:maxvcpus 加了一个v ,上面的命令是正确的,不会报错
      热添加cpu
    virsh setvcpus web04 --count=2
      永久修改,要修该配置文件
      
    4.热添加内存
      添加了参数maxmemory=2048
      安装参数
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus=1,maxvcpus=2 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0  --noautoconsole

      热添加内存
    virsh setmem web04 1G
      永久生效要改配置文件

    九、虚拟机的热迁移

    什么是热迁移

    相比KVM虚拟机冷迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机热迁移无需拷贝虚拟磁盘文件,
    但是需要迁移到的宿主机之间需要有相同的目录结构虚拟机磁盘文件,也就是共享存储
    这次通过大家熟悉的nfs来实现,当然也可以采用Glusterfs等分布式文件系统来实现.

    为什么要用热迁移

    上一节我们学习了在线热添加技术,就很容易理解了。假设我初级只有一台16G内存的物理机,
    为了充分利用资源,我可能运行了8台2G内存的虚拟机,然后访问量增加,虚拟机的2G内存不够用了,
    需要扩容,扩容之前我们就需要先迁移一部分虚拟机到其他宿主机上了有的业务特别核心,
    暂停的时间不能太长,这时候就要用到我们的热迁移了。

    热迁移的过程

    假设我们有2台宿主机kvm01和kvm02,在kvm01上挂起虚拟机vm01,
    发送vm的虚拟机配置文件和运行时内存中的数据到kvm02, 接受完毕,kvm02恢复vm01,热迁移完成。

    迁移环境要求

    步骤

    一:在kvm01和kvm02上安装kvm和nfs,配置桥接网卡
    二:在nfs01上安装配置nfs
    三:kvm01和kvm02挂载共享目录/opt
    四:安装一台基于桥接模式的虚拟机
       /data目录下上传准备好的磁盘和配置文件
      安装系统,指定我们自己的磁盘文件和配置
    五:在kvm01上安装图形界面、vnc服务端和virt
    -manager 六:启动vnc服务端 七:使用vnc连接宿主机,使用virt-manager进行迁移 说明:详情可以访问的博客https://www.qstack.com.cn/archives/368.html

    十、机房服务器知识

    服务器宕机、硬盘坏了、网卡换了,就需要进机房了

    一般建议安装远程控制卡,除非断网了,断电了,其他的都可以搞定

    进入之前要预约,

    服务器少的话,可以一台一台的插线检查,多的话可以使用KVM(keyboard video manager)

    文档

    十一、CND的原理

  • 相关阅读:
    Linux 软件安装
    大型网站架构设计原理(书的目录)
    Spring Cloud 学习笔记(二)——Netflix
    Spring Cloud 学习笔记(一)——入门、特征、配置
    RocketMQ与Kafka对比
    分布式开放消息系统(RocketMQ)的原理与实践(转)
    JavaScript Event Loop
    双向链表
    MutationObserver()观察者构造函数用法
    jsonp跨域
  • 原文地址:https://www.cnblogs.com/bubu99/p/12275420.html
Copyright © 2011-2022 走看看