KVM部署、使用、调优
传统数据中心面临的问题:
资源使用率低
资源分配不均
自动化能力差
云计算:
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
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
如果没有的话,需要把上面的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
[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
什么是消息队列
什么是对象存储
作者:曹小贱
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。