• KVM部署、使用、调优


    传统数据中心面临的问题:
    资源使用率低
    资源分配不均
    自动化能力差
    云计算:
    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
    Image(14)
    Image(15)
    tomcat提供几个端口?
    全虚拟化:直接使用底层的硬件 比如:KVM
    半虚拟化:通过一个中间件,来调用底层的硬件 比如:xen
    硬件虚拟化:
    软件虚拟化:
    应用虚拟化:
    一个机器跑八个tomcat和跑八个虚拟机跑八个tomcat
    kvm是一个内核模块
    qemu是将网络IO和硬盘IO的虚拟化
    安装软件
    [root@oldboy-node1 ~]# yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install
    检查是否支持虚拟化
    [root@oldboy-node1 ~]# grep -E "(vmx|svm)" /proc/cpuinfo
    vmx:inter
    svm:amd
    [root@oldboy-node1 ~]# lsmod  | grep kvm
    kvm_intel             148081  0
    kvm                   461126  1 kvm_intel
    创建硬盘
    [root@oldboy-node1 ~]# qemu-img create -f raw /opt/CentOS-7.1-x86_64.raw 10G
    Formatting '/opt/CentOS-7.1-x86_64.raw', fmt=raw size=10737418240
    启动libvirtd服务
    [root@oldboy-node1 ~]# systemctl enable libvirtd.service
    [root@oldboy-node1 ~]# systemctl start libvirtd.service
    [root@oldboy-node1 ~]# systemctl status libvirtd.service
    磁盘拷贝
    [root@oldboy-node1 ~]# dd if=/dev/cdrom of=/opt/CentOS-7.1.iso
    建立虚拟机
    [root@oldboy-node1 ~]#virt-install --name CentOS-7.1-x86_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.1.iso --disk path=/opt/CentOS-7.1-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    修改网卡的名称(使用tab键)
    net.ifnames=0 biosdevname=0
    基本的操作
    关闭虚拟机
    virsh shudown CentOS-7.1-x86_64(主机名)
    virsh destroy CentOS-7.1-x86_64(主机名)
    打开虚拟机
    virsh start CentOS-7.1-x86_64
    删除虚拟机
    virsh undefine CentOS-7.1-x86_64
    查看虚拟机(全部)
    virsh list  --all
    编辑虚拟机
    virsh edit CentOS-7.1-x86_64
    挂起
    virsh suspended CentOS-7.1-x86_64
    恢复
    virsh resume CentOS-7.1-x86_64
    查看正在运行的虚拟机:
    ps -aux |grep kvm
    kvm虚拟机就是一个KVM进程。
    cd /etc/libvirt/qemu
    CPU热添加
    virsh edit 主机名     这里设置的最大是4个
    <vcpu placement='auto' current="1">4</vcpu>

    virsh shutdown 主机名
    virsh start 主机名
    热添加,添加两个cpu
    virsh setvcpus 主机名 2 --live
    网络配置
    只需要将虚拟机的网卡启动就可以,他的KVM机器会启动一个dhcp服务器。
    [root@linux-node1 network-scripts]# ps aux|grep dns
    nobody     2248  0.0  0.0  15524   880 ?        S    14:07   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --dhcp-script=/usr/libexec/libvirt_leaseshelper
    存在这里面
    cat /var/lib/libvirt/dnsmasq/default.conf
    strict-order
    pid-file=/var/run/libvirt/network/default.pid
    except-interface=lo
    bind-dynamic
    interface=virbr0
    dhcp-range=192.168.122.2,192.168.122.254
    dhcp-no-override
    dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
    dhcp-lease-max=253
    dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
    addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
    按装 ifconfig工具
    yum -y install net-tools
    CPU热添加(只能是CentOS7)
    要实现CPU热添加,就必须首先设置CPU的总数,且热添加的总数不能超过CPU的综合数。
    方式一:修改xml文件

    [root@linux-node1 network-scripts]# virsh  edit CentOS-7.1-1-x86_64
    原:<vcpu placement='static'>1</vcpu>
    现:<vcpu placement='auto' current='1'>4</vcpu>
         VCPU匹配方式是自动,当前是1,最大是4
    需要重启才能实现
    在虚拟机中查看
    cat /proc/cpuinfo |grep "processor"|wc -l
    1
    在kvm中设置cpu
    virsh setvcpus CentOS-7.1-x86_64 2 --live
    Image(16)
    Image(17)
    如果没有的话,需要把上面的O置为1
    virsh setvcpus CentOS-7.1-x86_64 3 --live
    热添加只能加,不能减。(开机状态)
    方式二:在安装的时候
    [root@linux-node1 network-scripts]# virt-install --help |grep cpu      
      --vcpus VCPUS         Number of vcpus to configure for your guest. Ex:
                            --vcpus 5
                            --vcpus 5,maxcpus=10,cpuset=1-4,6,8
                            --vcpus sockets=2,cores=4,threads=2,
    内存热膨胀和压缩,总数不能超过最大内存
    [root@linux-node1 network-scripts]# virsh  edit CentOS-7.1-1-x86_64
    最大内存<memory unit='KiB'>4048576</memory>
    当前内存<currentMemory unit='KiB'>1048576</currentMemory>
     

    查看
    virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon
    设置
    virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 600

    #硬盘:
    全镜像模式  稀疏模式
    raw         qcow2
    qemu-img

    [root@oldboy opt]# brctl addbr br0
    [root@oldboy opt]# brctl show
    [root@oldboy ~]# brctl addif br0 eth0 && ip addr del dev eth0 10.0.0.111/24 && ifconfig br0 10.0.0.111/24 up && route add default gw 10.0.0.2 && iptables -F

    Image(18)

    Image(19)









    [root@linux-node1 ~]# brctl addbr br0
    [root@linux-node1 ~]# brctl show    
    bridge name     bridge id               STP enabled     interfaces
    br0             8000.000000000000       no
    virbr0          8000.525400035327       yes             virbr0-nic
    [root@linux-node1 ~]# brctl addif br0 eth0                                                      
    [root@linux-node1 ~]# ip addr del dev 10.0.0.100/24
    [root@linux-node1 ~]# ifconfig br0 10.0.0.100/24 up


    关闭防火墙
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    查看selinux
    getsebool

    全虚拟化  半虚拟化
    原本实现方式:
        虚拟机的虚拟内存===>虚拟机的物理内存
        宿主机的虚拟内存===>宿主机的物理内存
    现在实现方式:EPT(inter)
         虚拟机的虚拟内存=====EPT=====宿主机的物理内存
    内存的优化
    内存寻址:EPT
    内存合并:KSM
    大页内存: khugepaged  把连续的4K内存合并成为2M
    内存的合并
    [root@linux-node1 ~]# ps aux |grep ksmd
    root        280  0.0  0.0      0     0 ?        SN   20:37   0:00 [ksmd]
    大页内存
    [root@linux-node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
    [always] madvise never
    [root@linux-node1 ~]# ps aux |grep khugepaged
    root        281  0.0  0.0      0     0 ?        SN   20:37   0:02 [khugepaged]

    I/O优化:
    Virtio 半虚拟化
    I/O调度算法:
    CentOS7上默认有三种:noop deadline cfq
    [root@linux-node1 ~]# dmesg |grep scheduler
    [    1.385817] io scheduler noop registered
    [    1.385820] io scheduler deadline registered (default)
    [    1.385851] io scheduler cfq registered
    默认是deadline
    [root@linux-node1 ~]# cat /sys/block/sda/queue/scheduler
    noop [deadline] cfq
    修改成cfg
    [root@linux-node1 ~]# echo cfq > /sys/block/sda/queue/scheduler 
    [root@linux-node1 ~]# cat /sys/block/sda/queue/scheduler       
    noop deadline [cfq]
    永久的修改:改内核参数
    [root@linux-node1 ~]# elevator=noop
    SSD的话,一定要改成noop,那样性能是最好的。


    什么是RestAPI
     
    什么是SOA
    什么是消息队列
    什么是对象存储











  • 相关阅读:
    7 重排序与happens-before
    6 Java内存模型基础知识
    5 Java线程间的通信
    Java线程的状态及主要转化方法
    《The Boost C++ Libraries》 第一章 智能指针
    python通过swig调用静态库
    使用gdb调试
    Rsync服务部署使用
    UNP学习总结(二)
    read()函数的困惑
  • 原文地址:https://www.cnblogs.com/caoxiaojian/p/5073541.html
Copyright © 2020-2023  润新知