zoukankan      html  css  js  c++  java
  • KVM安装和配置

    [未验证部分]

    kvm安装前检查

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数
    # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
    # 查看物理CPU个数
    cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
    # 查看每个物理CPU中core的个数(即核数)
    cat /proc/cpuinfo| grep "cpu cores"| uniq
    # 查看逻辑CPU的个数
    cat /proc/cpuinfo| grep "processor"| wc -l
    
    # 查看物理机的cpu是否支持虚拟化, 找到flags部分,如果其中输出有VMX或SVM,即表明支持虚拟化技术。
    cat /proc/cpuinfo | egrep '(vmx|svm)'

    [已验证部分]

    修改iptables
    其中5900~5999端口是给vnc留的

    [root@KVM02 ~]# more /etc/sysconfig/iptables
    # Firewall configuration written by system-config-firewall
    # Manual customization of this file is not recommended.
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 5900:5999 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT


    安装虚拟环境

    # 可以先用yum grouplist查看下,为了避免缺少组件
    yum -y groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools"
    # 虚拟环境安装好后,开始配置网络,一般都用桥接的方式
    yum install bridge-utils

    配置网卡,添加bridge网卡
    修改/etc/sysconfig/network-scripts/ifcfg-em1文件,并且在同目录下新建ifcfg-br0, 内容如下, 红色部分是尤其需要注意的部分

    [root@KVM02 ~]# more /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    TYPE=Ethernet
    UUID=6deaff10-e5af-4774-aa7a-de656005e5f7
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=none
    HWADDR=C4:34:6B:B9:9F:50
    IPADDR=192.168.13.11
    PREFIX=24
    GATEWAY=192.168.13.1
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME="System eth0"
    BRIDGE=br0
    USERCTL=no
    
    [root@KVM02 ~]# more /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    TYPE=Bridge
    UUID=6deaff10-e5af-4774-aa7a-de656005e5f7
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=none
    HWADDR=C4:34:6B:B9:9F:50
    IPADDR=192.168.13.11
    PREFIX=24
    GATEWAY=192.168.13.1
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME="System eth0"
    USERCTL=no


    # 查看内核下面三项是否为0,官网说这是为了disabled netfilter (实际测试好像不需要)

    sysctl -a |grep net.birdge
    net.bridge.bridge-nf-call-arptables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-ip6tables = 0


    # 重启网络, 看bridge是否配置成功

    ifconfig 或者
    brctl show


    # 配置qemu
    vi /etc/libvirt/qemu.conf
    取消以下注解并修改
    vnc_listen = 0.0.0.0
    vnc_password = "bigbang"  #vnc连接密码
    remote_display_port_min = 5900
    remote_display_port_max = 5999

    # 修改以上两个端口后, 需要service libvirtd restart才能生效. 而且使用vncviewer连接时需要指定完整端口, 例如 123.123.123.15:15900

    创建虚机文件

    qemu-img create -f qcow2 /home/kvmdata/centos6.8-proto.qcow2 40G


    安装Centos

    virt-install 
      --virt-type kvm 
      --name centos-6.8 
      --vcpus=2 
      --ram 4096 
      --disk path=/home/kvmdata/centos6.8-proto.qcow2,size=40,format=qcow2 
      --network bridge=br0 
      --cdrom=/home/kvmdata/cdroms/CentOS-6.8-x86_64-minimal.iso 
      --os-type=linux 
      --os-variant=rhel6 
      --graphics vnc,listen=0.0.0.0 --noautoconsole

     
    如果出现Permission denied 错误, 要设置selinux属性

    chcon -R -t var_t cdroms/
    chcon -t virt_content_t cdroms/CentOS-6.8-x86_64-minimal.iso 

    安装Ubuntu, 这里使用的是img格式, 不需要提前创建, img格式是非压缩格式, 会占用分配的硬盘大小. 安装结束后提示移除安装介质, 直接回车即可, 重启后就没有cdrom了.

    virt-install   
       --virt-type kvm 
       --name ubuntu03 
       --vcpus=2 
       --ram 4096 
       --disk path=/home/kvmdata/vms/ubuntu03.img,size=40 
       --network bridge=br0 
       --cdrom /home/kvmdata/cdroms/ubuntu-18.04.1-live-server-amd64.iso 
       --os-type=linux 
       --os-variant=ubuntu18.04 
       --graphics vnc,listen=0.0.0.0 
       --noautoconsole
    

    查看所在的vnc端口

    virsh vncdisplay centos-6.8
    :0


    vnc viewer连接闪退的解决办法:

    修改vnc option里面Advanced-->expert-->ColourLevel的值为“rgb222” or “full”即可。
    说明:rgb111--8 colours,rgb222--64 colours,pal8 -- 256 colours,full -- full colours

     Guest虚机安装acpid, 以支持virsh shutdown/reboot

    yum install acpid
    service acpid start

    启用virsh console支持( VM为 Centos6)

    1) 添加ttyS0的许可,允许root登陆

    vi /etc/securetty
    # 最后一行添加 ttyS0
    vi /etc/grub.conf
    # 在 kernel /vmlinuz-2.6.32-431.el6.x86_64  ... 开头的那行的结尾, 加入 console=ttyS0
    vi /etc/inittab,
    # 在最后一行后添加 S0:12345:respawn:/sbin/agetty ttyS0 115200

    reboot重启

    virsh list 
    # 查看虚机ID,
    
    virsh console ID
    # 连接虚机console

    虚机为Centos7时启用virsh console

    参考 https://linuxadmin.io/enable-virsh-console-kvm/ . 和 https://blog.ls-al.com/kvm-virsh-console-on-centos-7/ .

    虚机为Ubuntu18.04时启用virsh console

    systemctl enable serial-getty@ttyS0.service
    systemctl start serial-getty@ttyS0.service
    


    克隆虚机

    先停止或暂停虚机

    virsh shutdown centos-6.8
    (or virsh stop centos-6.8)
    virt-clone -o centos-6.8 -n vm01 -f /home/kvmdata/vms/vm01.qcow2
    virsh start vm01
    # 克隆完成之后可能mac地址会有冲突,删除 /etc/udev/rules.d/70-persistent-net.rules 中的eth0的配置,接着把eth1改成eth0,
    # 并且修改 ifcfg-eth0 的mac,确认两个配置文件中的mac地址是一样的

    使用备份文件恢复虚机

    cp /home/backup/centos01.xml /home/kvm/vms/node1.xml
    virsh define /home/kvm/vms/node1.xml

     在virsh define前,需要编辑xml文件,修改UUID和mac地址. virsh define会根据xml,在/etc/libvirt/qemu下创建对应的xml

    如果出现uuid重复的错误 virsh define domain is already defined with uuid , 可以命令行下通过uuidgen命令生成新的uuid

    [root@KVM01 vms]# uuidgen 
    6c38ee0f-b583-4642-8ed6-7d1e1d296c4f

    MAC地址冲突导致ping丢包

    如果直接复制qcow2文件和xml文件进行虚机克隆, 就会导致mac冲突, 现象就是在同一个子网内, 网络启动后, ping丢包. 解决这个问题:
    1. 如果在define这个虚机前, 修改xml, 然后再define
    2. 如果是define后, 通过virsh edit修改虚机的mac地址, 然后再删除/etc/udev/rule.d/70-persistent-net.rules文件, 重启

        <interface type='bridge'>
          <mac address='88:b4:65:d5:53:d6'/>
          <source bridge='br0'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>

    随机的mac地址可以通过下面的命令行生成, 但是要注意, 生成的结果前两位必须是偶数, 如果是奇数的话, define时会认为这个是多播地址而报错

    openssl rand -hex 6 | sed 's/(..)/1:/g; s/.$//'

    虚机磁盘性能优化

    默认安装下, 虚机磁盘性能非常低, 这是使用qcow2格式时, dd测试的结果

    [root@vm_ngx ~]# dd if=/dev/zero of=kwxgd bs=64k count=4k oflag=dsync
    4096+0 records in
    4096+0 records out
    268435456 bytes (268 MB) copied, 129.695 s, 2.1 MB/s

    raw格式测试结果也只是稍好, 达到3.8MB/s, 无论如何, 这种IO速度都是非常差的, 因为宿主机的dd结果大约是156MB/s

    尝试的方法: virsh edit [guest name] , 在磁盘的配置中加上 io='native' 参数, 然后将cache改成none, writethrough, writeback分别试试.

    <driver name='qemu' type='qcow2' cache='none' io='native'/>

    具体的原因如下, 有一篇更详细的说明在这里

    One problem of virtual server based on qemu KVM is that IO operations are slow in some cases. The most common reason is that virtual disks are stored on RAID and virtual is using default HDD configuration. It is recommended to turn off cache and set io operations to native.

    修改后磁盘性能提升明显, 这个是qcow2格式的结果

    [root@vm_db ~]# dd if=/dev/zero of=kwxgd bs=64k count=4k oflag=dsync
    4096+0 records in
    4096+0 records out
    268435456 bytes (268 MB) copied, 6.61189 s, 40.6 MB/s

    raw的结果会更高一些, 约68MB/s, 但是在bs=64k的情况下, 多次执行后, 写入速度陡降至3MB/s左右, 尝试各种参数, 未能解决. bs=1M的情况下没有问题.

    Update 2017-09-26: 同一台机器, 升级到Centos7.3后, 进行同样的测试, 在qcow2格式下, 速度达到了30MB/s, 速度高了一个数量级.


    常用虚机管理命令

    # 查看虚机列表,
    virsh list --all
    # 查看vnc端口
    virsh vncdisplay centos-6.8
    # 停止虚机, 需要guest虚机有acpi支持 (yum install acpid, service acpid start)
    virsh shutdown centos-6.8
    # 关机
    virsh destroy centos-6.8
    # 启动
    virsh start centos-6.8
    # 移除虚机
    virsh undefine centos-6.8
    # 修改虚机配置
    virsh edit centos-6.8

    通过导出备份的配置文件恢复原KVM虚拟机的定义,并重新define虚拟机, 注意如果修改名称, 修改uuid和mac, 避免重复
    [root@KVM ~]# mv /etc/libvirt/qemu/centos01.xml /somewhere/centos1.xml
    [root@KVM ~]# virsh define /somewhere/centos1.xml                  #为客户端输出xml配置文件

  • 相关阅读:
    redis事务
    redis杂项
    redis的发布订阅
    redis持久化
    redis常用配置参考.txt
    python语法流程控制
    用户交互与数据类型
    编程语言与Python介绍
    计算机的五大组成部分
    jieba库的基本介绍及爬虫基本操作
  • 原文地址:https://www.cnblogs.com/milton/p/7478236.html
Copyright © 2011-2022 走看看