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
什么是消息隊列
什么是對象存儲












免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM