zoukankan      html  css  js  c++  java
  • kvm-新

    kvm-新

    KVM

    IBM,文档:http://www.ibm.com/developerworks/cn/linux/l-using-kvm/
    lxd容器虚拟化:https://linuxcontainers.org/lxd/introduction/

    准备前

    安装系统时,关闭网卡自动命名,装完系统网卡名为eth0
    kvm

    关闭selinux 防火墙

    systemctl disable firewalld
    systemctl disable NetworkManager

    准备前配置好网卡IP

    bond0=eth0+eth1
    yum install bridge-utils -y
    [root@Final network-scripts]# cat ifcfg-eth0
    BOOTPROTO=none
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    NM_CONTROLLED=no
    MASTER=bond0
    USERCTL=no
    SLAVE=yes
    [root@Final network-scripts]# cat ifcfg-eth1
    BOOTPROTO=none
    NAME=eth1
    DEVICE=eth1
    ONBOOT=yes
    NM_CONTROLLED=no
    MASTER=bond0
    USERCTL=no
    SLAVE=yes
    [root@Final network-scripts]# cat ifcfg-bond0 
    BOOTPROTO=static
    NAME=bond0
    DEVICE=bond0
    TYPE=Bond
    BONDING_MASTER=yes
    BOOTPROTO=static
    ONBOOT=yes
    BONDING_OPTS="mode=0 miimon=500"
    BRIDGE=br0
    [root@Final network-scripts]# cat ifcfg-br0 
    TYPE=Bridge
    BOOTPROTO=static
    NAME=br0
    DEVICE=br0
    ONBOOT=yes
    IPADDR=192.168.10.254
    NETMASK=255.255.255.0
    
    [root@Final network-scripts]# cat ifcfg-eth2 
    TYPE=Ethernet
    BOOTPROTO=dhcp
    DEFROUTE=yes
    NAME=eth2
    DEVICE=eth2
    ONBOOT=yes
    NM_CONTROLLED=no

    注:弄了半天网卡服务起不来
    eth2用dhcp的地址,要加NM_CONTROLLED=no
    若网卡服务起不来,使用journalctl -f -u network 查看日志

    1、确认CPU已经支持虚拟化,intel的CPU虚拟化技术交vmx,AMD的CPU交svm

    grep -E "vmx|svm" /proc/cpuinfo

    2、安装kvm平台及工具包及桌面

    yum -y install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install
    yum groupinstall "GNOME Desktop" -y
    注安装桌面环境若有问题
    file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x86_64 conflicts with file from package grub2-common-1:2.02-0.65.el7.centos.2.noarch
    Error Summary
    解决方法
    yum update grub2-common -y

    3、启动 libvirtsd 并设置为开机启动,librirtd 会创建一个桥接的网卡 virbr0 而且 IP 地址是 192.168.122.1

    systemctl  start libvirtd
    systemctl  enable  libvirtd
    ifconfig  virbr0

    4、为虚拟机分配 IP 地址的服务

    ps -aux | grep dns

    5、创建磁盘

    qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G #创建一个格式为raw大小为10G的裸磁盘
    qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.5.qcow2 50G  #创建一个稀疏格式为qcow2大小为50G的裸磁盘

    6、开始安装

    #virsh-install命令帮助:
    [root@linux-node1 ~]# virt-install  --help
    usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options]
    
    使用指定安装介质新建虚拟机。
    
    optional arguments:
      -h, --help            show this help message and exit
      --version             show program's version number and exit
      --connect URI         使用 libvirt URI 连接到 hypervisor
    
    通用选项:
      -n NAME, --name NAME  客户端事件名称
      --memory MEMORY       配置虚拟机内存分配。例如:
                            --memory 1024 (in MiB)
                            --memory 512,maxmemory=1024
      --vcpus VCPUS         为虚拟机配置的 vcpus 数。例如:
                            --vcpus 5
                            --vcpus 5,maxcpus=10,cpuset=1-4,6,8
                            --vcpus sockets=2,cores=4,threads=2,
      --cpu CPU             CPU 型号及功能。例如:
                            --cpu coreduo,+x2apic
                            --cpu host
      --metadata METADATA   配置虚拟机元数据。例如:
                            --metadata name=foo,title="My pretty title",uuid=...
                            --metadata description="My nice long description"
    
    安装方法选项:
      --cdrom CDROM         光驱安装介质
      -l LOCATION, --location LOCATION
                            安装源(例如:nfs:host:/pathhttp://host/path
                            ftp://host/path)
      --pxe                 使用 PXE 协议从网络引导
      --import              在磁盘映像中构建虚拟机
      --livecd              将光驱介质视为 Live CD
      -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                            附加到使用 --location 引导的内核的参数
      --initrd-inject INITRD_INJECT
                            使用 --locationinitrdroot
                            添加给定文件
      --os-variant DISTRO_VARIANT
                            在其中安装 OS 变体的虚拟机,比如
                            'fedora18'、'rhel6'、'winxp' 等等。
      --boot BOOT           配置虚拟机引导设置。例如:
                            --boot hd,cdrom,menu=on
                            --boot init=/sbin/init (for containers)
      --idmap IDMAPLXC 容器启用用户名称空间。例如:
                            --idmap uid_start=0,uid_target=1000,uid_count=10
    
    设备选项:
      --disk DISK           使用不同选项指定存储。例如:
                            --disk size=10 (new 10GiB image in default location)
                            --disk /my/existing/disk,cache=none
                            --disk device=cdrom,bus=scsi
                            --disk=?
      -w NETWORK, --network NETWORK
                            配置虚拟机网络接口。例如:
                            --network bridge=mybr0
                            --network network=my_libvirt_virtual_net
                            --network network=mynet,model=virtio,mac=00:11...
                            --network none
                            --network help
      --graphics GRAPHICS   配置虚拟机显示设置。例如:
                            --graphics vnc
                            --graphics spice,port=5901,tlsport=5902
                            --graphics none
                            --graphics vnc,password=foobar,port=5910,keymap=ja
      --controller CONTROLLER
                            配置虚拟机控制程序设备。例如:
                            --controller type=usb,model=ich9-ehci1
      --input INPUT         配置虚拟机输入设备。例如:
                            --input tablet
                            --input keyboard,bus=usb
      --serial SERIAL       配置虚拟机串口设备
      --parallel PARALLEL   配置虚拟机并口设备
      --channel CHANNEL     配置虚拟机沟通频道
      --console CONSOLE     配置虚拟机与主机之间的文本控制台连接
      --hostdev HOSTDEV     将物理 USB/PCI/etc
                            主机设备配置为与虚拟机共享
      --filesystem FILESYSTEM
                            将主机目录传递给虚拟机。例如:
                            --filesystem /my/source/dir,/dir/in/guest
                            --filesystem template_name,/,type=template
      --sound [SOUND]       配置虚拟机声音设备模拟
      --watchdog WATCHDOG   配置虚拟机 watchdog 设备
      --video VIDEO         配置虚拟机视频硬件。
      --smartcard SMARTCARD
                            配置虚拟机智能卡设备。例如:
                            --smartcard mode=passthrough
      --redirdev REDIRDEV   配置虚拟机重定向设备。例如:
                            --redirdev usb,type=tcp,server=192.168.1.1:4000
      --memballoon MEMBALLOON
                            配置虚拟机 memballoon 设备。例如:
                            --memballoon model=virtio
      --tpm TPM             配置虚拟机 TPM 设备。例如:
                            --tpm /dev/tpm
      --rng RNG             配置虚拟机 RNG 设备。例如:
                            --rng /dev/random
      --panic PANIC         配置虚拟机 panic 设备。例如:
                            --panic default
    
    虚拟机配置选项:
      --security SECURITY   设定域安全驱动器配置。
      --numatune NUMATUNE   为域进程调整 NUMA 策略。
      --memtune MEMTUNE     为域进程调整内粗策略。
      --blkiotune BLKIOTUNE
                            为域进程调整 blkio 策略。
      --memorybacking MEMORYBACKING
                            为域进程设置内存后备策略。例如:
                            --memorybacking hugepages=on
      --features FEATURES   设置域 <features> XML。例如:
                            --features acpi=off
                            --features apic=on,eoi=on
      --clock CLOCK         设置域 <clock> XML。例如:
                            --clock offset=localtime,rtc_tickpolicy=catchup
      --pm PM               配置 VM 电源管理功能
      --events EVENTS       配置 VM 生命周期管理策略
      --resource RESOURCE   配置 VM 资源分区(cgroups)
    
    虚拟化平台选项:
      -v, --hvm             客户端应该是一个全虚拟客户端
      -p, --paravirt        这个客户端一个是一个半虚拟客户端
      --container           这台虚拟机需要一个容器客户端
      --virt-type HV_TYPE   要使用的管理程序名称(kvmqemuxen
                            等等)
      --arch ARCH           模拟的 CPU 构架
      --machine MACHINE     要模拟的机器类型
    
    其它选项:
      --autostart           引导主机时自动启动域。
      --wait WAIT           等待安装完成的分钟数。
      --noautoconsole       不要自动尝试连接到客户端控制台
      --noreboot            完成安装后不要引导虚拟机。
      --print-xml [XMLONLY]
                            输出所生成域 XML,而不是创建虚拟机。
      --dry-run             完成安装步骤,但不要创建设备或者定义
                            虚拟机。
      --check CHECK         启用或禁用验证检查。例如:
                            --check path_in_use=off
                            --check all=off
      -q, --quiet           禁止无错误输出
      -d, --debug           输入故障排除信息
    
    使用 '--option=?' 或者 '--option help' 查看可用子选项
    有关示例及完整选项语法,请查看 man page
    • 默认网络
    [root@linux-node1 ~]# virt-install  --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/opt/CentOS-7-x86_64-DVD-1511.iso --disk path=/opt/CentOS-7-x86_64.raw  --network network=default --graphics  vnc,listen=0.0.0.0 --noautoconsole
    • 桥接网络:
    virt-install  --virt-type kvm --name  openstack-middleware1    --ram 1024  --vcpus 4 --cdrom=/ISO/CentOS-7-x86_64-DVD-1804.iso --disk path=/var/lib/libvirt/images/centos7.5.qcow2 --network bridge=br0  --graphics  vnc,listen=0.0.0.0  --noautoconsole
    • 安装Windows:
    qemu-img create -f qcow2   /var/lib/libvirt/images/Windows-2008_r2-x86_64.qcow2  200G
    virt-install --virt-type kvm  --name  Win_2008_r2-x86_64 --ram 3072  --vcpus=2 --os-type=windows --cdrom=/usr/local/src/windows_server_2008_r2.iso --disk path=/var/lib/libvirt/images/Windows-2008_r2-x86_64.qcow2,format=qcow2,bus=virtio   --disk path=/usr/local/src/virtio-win-0.1.141_amd64.vfd,device=floppy     --network bridge=br0,model=virtio  --graphics  vnc,listen=0.0.0.0 --noautoconsole

    开始安装......

    我们可以用VNC客户端来连接
    vnc

    • 注:若SSH连接很慢
    1、使用了 dns 反查,这样的话当 ssh 某个 IP 时,系统会试图通过 DNS 反查相对应的域名,如果 DNS 中没有这个 IP 的域名解析,则会等到 DNS 查询超时才会进行下一步,消耗很长时间
    
    vim /etc/ssh/sshd_config
    UseDNS no
    
    默认情况下会有一行被注释掉的记录 #UseDNS yes,虽然这条记录被注释掉了,但 ssh 缺省情况下 UseDNS 的值是 yes,所以要显式的指定该值为 no
    重新启动 ssh 服务
    service sshd restart
    
    2、这种情况在本地主机或远程主机启动图形的情况下比较明显,该参数似乎是在做图形方面的认证,具体功能还不清楚,但修改以后可以明显提高 ssh 远程登录速度
    修改 GSSAPIAuthentication 参数为 no,默认是 yes
    重新启动 ssh 服务
    service sshd restart

    虚拟机磁盘的格式

    根据存储数据方式的不同可以分为两种格式,一种是稀疏模式。一种是全镜像模式,全镜像模式无法做快照,IO 层面是有 qemu 模拟的,CPU 和内存是有 KVM 实现的,以下是 KVM 的功能:

    KVM 所支持的功能包括:

    • 支持CPU 和 memory 超分(Overcommit)
    • 支持半虚拟化I/O (virtio)
    • 支持热插拔 (cpu,块设备、网络设备等)
    • 支持实时迁移(Live Migration)
    • 支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV)
    • 支持 内核同页合并 (KSM )
    • 支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构

    磁盘格式的转换

    https://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm3/index.html
    raw 转换为 qcow2

    qemu-img convert -f raw centos.img -O qcow2 centos.qcow2

    qcow2 转换为 raw

    qemu-img convert -O qcow2 my.raw myqow.qcow

    VMDK 转换为 qcow2

    qemu-img convert -f vmdk -O qcow2 xxx.vmdk    xxx.img

    查看磁盘详细信息

    qemu-img   info xxx.raw  #查看raw格式的磁盘信息
    qemu-img  info xxx.qcow #查看qcow格式的磁盘信息

    宿主机的优化

    全虚拟化和半虚拟化,内核态 Ring 0 可以直接访问周边的硬件设备,CPU、内存、网卡和硬盘等,应用运行在 Ring 3 是用户态,用户态不能直接操作硬件,如果要操作硬件会产生系统调用,客户端的操作系统不能工作在 Ring 0,因此 Intel 提供 vt-x 提供加速上下文切换,KVM 在系统里面是一个 qemu 进程,进程要受到 CPU 的调度,在多核 CPU 进程可能会被调度到任意 CPU 核心,CPU 的一级缓存是使用静态内存做的,二级缓存是使用高速的动态内存,缓存是将经常访问的数据缓存下来以加速访问速度,将进程绑定在一个 CPU 可以提高缓存的命中率:

    CPU 绑定优化

    taskset  --help
    用法:taskset [选项] [掩码 | cpu列表] [pid|命令 [参数...]]
    
    选项:
     -a, --all-tasks         在给定 pid 的所有任务(线程)上操作
     -p, --pid               在存在的给定 pid 上操作
     -c, --cpu-list          以列表格式显示和指定 CPU
     -h, --help              显示此帮助
     -V, --version           输出版本信息

    默认行为是运行一条新命令:
    taskset 03 sshd -b 1024
    您可以获取现有任务的掩码:
    taskset -p 700
    或设置掩码:
    taskset -p 03 700
    使用逗号分隔的列表格式而不是掩码:
    taskset -pc 0,3,7-11 700
    列表格式中的范围可以带一个跨度参数:
    例如 0-31:2 与掩码 0x55555555 等效

    taskset -cp 2 42340 #将进程号为42340的进程指定运行在第二核心CPU

    内存优化

    内存 EPT 技术:
    系统将内存识别为虚拟内存,包含物理内存和交换分区,KVM 是一个进程,EPT 是 Intel 用于加快内存映射的技术

    大页内存,加快内存寻址:
    cat /proc/meminfo
    ...
    Hugepagesize: 2048 kB #Centos 7默认已开启

    开启内存合并
    cat /sys/kernel/mm/transparent_hugepage/enabled #将连续的没有使用的内存合并为2M一个表,减少内存碎片

    IO 优化

    使用 virtIO 半虚拟化的 IO 技术,让磁盘知道其运行在虚拟机环境当中

    磁盘的调度算法

    顺序读写远大于随机读写,系统的 IO 调度器是

    cat /sys/block/sda/queue/scheduler #Centos 7 默认只有 3 个,Centos 6 有 4 个
    noop:不进行调度,用于 SSD

    [deadline]:最后期限算法,防止写操作因为不能读取而被饿死的情况

    cfq:完全公平,公平分配 IO 访问,Centos 6 的默认算法

    写入磁盘的几种方式

    writeback:同时使用了虚拟机和物理机的 pagecache,会被同时写入到虚拟机和物理机的 pagecache 在写入到物理磁盘缓存,这种方式写入速度快但是假如突然断电会导致出现数据丢失而导致数据一致性出现问题,本方式性能最好但是不安全。

    None:将数据直接写入到物理磁盘缓存在写入磁盘,速度次于 writeback。

    writethrough:直接写入到物理磁盘,突然断电的话数据丢失最少,但是速度比较慢,因为绕过了上面的两层 pagecache 即没有使用缓存。

    web 站点适用于使用 writeback,即读多写少的情况,对于需要提供数据安全的场景必须数据库等推荐使用 writethrough,KVM 默认就是使用的 writethrough:
    disk

    注:此笔记部分为摘录

  • 相关阅读:
    负margin的原理及应用
    css display:flex 属性
    MapReduce api实战
    配置YARN高可用
    Yarn 分布式资源调度
    MapReduce 案例与概述
    HDFS 伪分布式集群搭建
    Hadoop的HA高可用实验
    Hadoop HDFS 集群的分布式搭建
    Zookeeper分布式协调服务
  • 原文地址:https://www.cnblogs.com/fina/p/11194464.html
Copyright © 2011-2022 走看看