KVM 之一


一:传统的物理机部署方案、虚拟化与云计算定义

服务器选型及采购 — IDC 选择及上架 — 系统选择及安装 — 应用规划及部署 – 域名选择及注册 – DNS 映射 – 外网访问

工信部备案 — 公安部备案 — ICP 备案 ( 电子商务网站 –> ICP 证经营性 ICP 备案),游戏公司文化部 ( 文网文 ) 备案等,在备案没有成功之前网站是不能上线访问的,论坛 BBS 有 BBS 公告备案是备案的前置审批,没有的话备案不成功,还要在公安局系统备案,另外域名接入到一个地方比如机房还要做接入备案,备案在个人名下的备案不能直接转公司,个人注销后网站属于未备案状态随时可能会被封,域名备案一般可以找代理,因为过程比较复杂

传统数据中心面临的问题
  • 服务器资源利用率低下,CPU、内存等不能共享
  • 资源分配不合理
  • 初始化成本高
  • 自动化能力差

集群环境需要大量的服务器主机

1.1 云计算的定义
  • 云计算是一种交付模式
  • 云计算必须通过网络使用
  • 支持弹性横向扩展、按需付费和快速扩展
  • 无需关心基础设置,服务器硬件、存储、机房安全、硬件监控、底层数据安全等无需考虑
1.2 云计算的概念与分类

云计算是概念最早是由 Google 前首席执行官埃里克•施密特(Eric Schmidt)在2006 年8 月9 日的搜索引擎大会上首次提出的一种构想,而“云计算”就是这种构想的代名词,云计算以虚拟化为基础,以网络为中心,为用户提供安全、快速、便捷的数据存储和网络计算服务,包括所需要的硬件、平台、软件及服务等资源,而提供资源的网络就被称为“云”。

  • 公有云:比如 aws、阿里云以及 azure、金山云、腾讯云等都属于公有云,每个人都可以付费使用,不需要自己关心底层硬件,但是数据安全需要考利。

  • 私有云:在自己公司内部或 IDC 自建 Openstack、VMware 等环境

  • 混合云:临时需求使用公有云,但是主要业务放在自己的私有云,即自己的私有云的部分业务和公有云有交接,这部分称为混合云

1.3 云计算的分层
image.png
1.4 虚拟化的分类
  • 服务器虚拟化
    虚拟服务器
  • 桌面虚拟化
    瘦客户机连接 win7 实现普通办公
  • 存储虚拟化
    SAN ( 基于磁盘 )
    NAS ( NFS / Samba )
    GlusterFS
  • 应用虚拟化
    将办公软件虚拟化,最典型的就是 office
  • 网络虚拟化
    SDN
1.5 KVM

kmv 是一种技术,云计算是一种模式,虚拟化是利用相应的技术方法在一台物理机器上将其按照不同的需求划分成多个相同或者不同的虚拟操作系统,并且各个虚拟系统可以同时运行,互不干扰,其中任何一个虚拟系统的损坏都不影响同一物理服务器上的其他虚拟系统


二、虚拟化技术之KVM

Kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的各个主要发行版本中。它使用 Linux 自身的调度器进行管理,所以相对于 Xen,其核心源码很少。KVM 目前已成为学术界的主流 VMM 之一。
KVM 的虚拟化需要硬件支持(如 Intel VT 技术或者 AMD V 技术)。是基于硬件的完全虚拟化。而 Xen 早期则是基于软件模拟的 Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但 Xen 本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件 VMware ESX 系列是基于软件模拟的 Full-Virtualization。

2.1 环境准备
image.png
2.2 安装步骤
  • 确认 CPU 已经支持虚拟化,intel 的 CPU 虚拟化技术叫 vmx,AMD 的 CPU 叫 svm
~]# grep -E   "vmx|svm" /proc/cpuinfo
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat
  • 安装kvm平台及工具包
~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install 
  • 启动libvirtsd并设置为开机启动,librirtd会创建一个桥接的网卡virbr0而且IP地址是192.168.122.1
~]# systemctl  start libvirtd
~]# systemctl  enable  libvirtd
~]# ifconfig  virbr0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:cb:ca:b0  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 为虚拟机分配IP地址的服务
 ~]# ps -aux | grep dns
nobody     2877  0.0  0.0  15552   888 ?        S    13:06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       2878  0.0  0.0  15524   180 ?        S    13:06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       4546  0.0  0.0 112664   980 pts/0    S+   13:29   0:00 grep --color=auto dns
  • 创建磁盘
# 创建一个格式为raw大小为10G的裸磁盘

~]# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G 
Formatting '/opt/CentOS-7-x86_64.raw', fmt=raw size=10737418240 
  • 安装虚拟机
# 默认网络
~]# 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 4096  --vcpus 4 --cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1511.iso    --disk path=/var/lib/libvirt/images/CentOS-7-x86_64-GenericCloud-1511-ok.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

开始安装......
创建域......                                                                                                                       |    0 B  00:00:01     
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。

# virsh-install命令帮助:
~]# 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:/path、http://host/path
                        ftp://host/path)
  --pxe                 使用 PXE 协议从网络引导
  --import              在磁盘映像中构建虚拟机
  --livecd              将光驱介质视为 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        附加到使用 --location 引导的内核的参数
  --initrd-inject INITRD_INJECT
                        使用 --location 为 initrd 的 root
                        添加给定文件
  --os-variant DISTRO_VARIANT
                        在其中安装 OS 变体的虚拟机,比如
                        'fedora18'、'rhel6'、'winxp' 等等。
  --boot BOOT           配置虚拟机引导设置。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (for containers)
  --idmap IDMAP         为 LXC 容器启用用户名称空间。例如:
                        --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   要使用的管理程序名称 ( kvm、qemu、xen 等等)
  --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
  • 通过 vnc 客户端连接到安装界面,kvm 虚拟机的默认端口从 5900 开始


    image.png
  • 选择安装 centos 安装界面


    image.png
  • 开始正常安装旅程,以下为给内核传递 net.ifnames=0 以及 biosdevname=0 使网卡的命名为 eth*


    image.png
2.3 查看正在运行的虚拟机
# 获取命令帮助
~]# virsh  -help

# 当前正在运行的所有虚拟机
~]# virsh  list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS-7-x86_64                running
 -     CentOS-x86_64                  关闭
 -     CentOS_x86_64                  关闭

# 命令帮助
~]# virsh  list --help
  OPTIONS
    --inactive       列出不活跃的域
    --all            不活跃和活跃的域列表
    --transient      列出临时域
    --persistent     列出持久域
    --with-snapshot  列出现有快照的域
    --without-snapshot  列出没有快照的域
    --state-running  运行状态的域列表
    --state-paused   列出暂停状态的域
    --state-shutoff  列出关闭状态的域
    --state-other    列出其他状态的域
    --autostart      列出启用 autostart 的域
    --no-autostart   列出禁用 autostart 的域
    --with-managed-save  列出有管理的保存状态的域
    --without-managed-save  列出没有管理的保存状态的域
    --uuid           只列出 uuid
    --name           只列出域名
    --table          列出表格(默认)
    --managed-save   标记有管理的保存状态的域
    --title          show domain title

# 列出关闭的虚拟机
~]# virsh  list  --inactive
 Id    名称                         状态
----------------------------------------------------
 -     CentOS-x86_64                  关闭
 -     CentOS_x86_64                  关闭

三、虚拟机管理工具libvirt

是一个免费开源的主流的虚拟化管理工具,有两个组成进程,一个后台主进程,另外提供 API,openstack 就是通过 libvirt 的 API 管理虚拟机,virt-install 就是通过 libvirt 完成的,服务名称叫做 libvirtd,即使此服务 down 了虚拟机不受影响,但是无法管理,openstack 挂了虚拟机不受影响

3.1 配置文件路径
~]# cd /etc/libvirt/qemu/
qemu]# ls  
CentOS-7-x86_64.xml  CentOS_x86_64.xml  CentOS-x86_64.xml  networks
# 保存了虚拟机的配置 xml 配置文件,不能使用 vim 直接更改虚拟机配置文件,需要使用 virsh edit xxx 编辑
3.2 一个完整的虚拟机配置文件
qemu]# cat CentOS-7-x86_64.xml

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit CentOS-7-x86_64
or other application using the libvirt API.
-->

<domain type='kvm'>   # 虚拟化类型 kvm
  <name>CentOS-7-x86_64</name>   # 虚拟机名称
  <uuid>2d92275e-4dab-4f10-adea-c874ea49c9a6</uuid>   # 唯一标示 UUID
  <memory unit='KiB'>1048576</memory>   # 内存
  <currentMemory unit='KiB'>1048576</currentMemory>   # 当前内存
  <vcpu placement='static'>1</vcpu>   # 1 个 cpu 并且是静态分配
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> # hvm标示是硬件虚拟化
    <boot dev='hd'/>   # 从硬盘启动
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>IvyBridge</model>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>   # 磁盘信息
      <driver name='qemu' type='raw'/>
      <source file='/opt/CentOS-7-x86_64.raw'/>
      <target dev='vda' bus='virtio'/>   # 虚拟磁盘,半虚拟化
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    <disk type='block' device='cdrom'> 
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>   # usb 信息
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
    <interface type='network'>   # 网络信息
      <mac address='52:54:00:60:84:d0'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-CentOS-7-x86_64/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>   # 鼠标和键盘
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>   # vnc 接口,从 5900 开始,可以自定义
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='cirrus' vram='16384' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices>
</domain>
3.3 dumpxml 命令,导出虚拟机的 xml 文件
  • 命令帮助
qemu]# virsh  dumpxml  --help
NAME
    dumpxml - XML 中的域信息
  SYNOPSIS
    dumpxml <domain> [--inactive] [--security-info] [--update-cpu] [--migratable]
  DESCRIPTION
    把域信息作为一个 XML 输出到 stdout。
  OPTIONS
    [--domain] <string>  域名,id 或 uuid
    --inactive       显示不活跃定义的 XML
    --security-info  包括 XML 转储中与安全性相关的信息
    --update-cpu     根据主机 CPU 更新虚拟机 CPU
    --migratable     为迁移提供 XML 可用性
  • 导出虚拟机 xml 配置文件,xml 是虚拟机的静态描述文件,如果虚拟机磁盘未被删除则可以恢复,如果虚拟机磁盘被删除则即使有描述文件也难以恢复
qemu]# virsh dumpxml CentOS-7-x86_64 > Centos-7-x86_64.bak.xm
  • undefine
    彻底摧毁一个虚拟机
    命令帮助信息
~]# virsh  undefine --help
  NAME
    undefine - 取消定义一个域

  SYNOPSIS
    undefine <domain> [--managed-save] [--storage <string>] [--remove-all-storage] [--wipe-storage] [--snapshots-metadata] [--nvram]

  DESCRIPTION
    取消定义一个域或者将持久转换为临时。

  OPTIONS
    [--domain] <string>  域名或 uuid
    --managed-save   删除域管理的状态文件
    --storage <string>  删除关联的存储卷(用逗号分开的目标或者源路径列表)(查看 domblklist)
    --remove-all-storage  删除关联的存储卷(小心使用)
    --wipe-storage   擦除删除卷中的数据
    --snapshots-metadata  如果不活跃则删除所有域快照元数据
    --nvram          remove nvram file, if inactive
删除一个虚拟机.png
  • 一个完整的备份删除和恢复的过程
 # 当前所有的虚拟机有两个
~]# virsh  list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS-7-x86_64                running
 -     CentOS-x86_64                  关闭

# 备份
~]# virsh  dumpxml  CentOS-x86_64  > CentOS-x86_64.xml.bak

# 摧毁一个虚拟机
~]# virsh  undefine CentOS-x86_64
域 CentOS-x86_64 已经被取消定义

# 当前只剩一个虚拟机
~]# virsh  list --all 
 Id    名称                         状态
----------------------------------------------------
 2     CentOS-7-x86_64                running

# 从备份的 xml 文件中恢复虚拟机
~]# virsh  define   /root/CentOS-x86_64.xml.bak
定义域 CentOS-x86_64(从 /root/CentOS-x86_64.xml.bak)

# 恢复完成
~]# virsh  list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS-7-x86_64                running
 -     CentOS-x86_64                  关闭

四、CPU 管理

4.1 命令帮助,在安装的时候指定 CPU 的特性
~]# virt-install  --help | grep cpu
  --vcpus VCPUS         为虚拟机配置的 vcpus 数。例如:
                        --vcpus 5   # 指定 CPU 的数量
                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8   # 默认是 5 最大是 10,set 为设值的某一个物理 CPU 核心上,
                                                                相当于 Nginx 的 CPU 绑定
                        --vcpus sockets=2,cores=4,threads=2,
  --cpu CPU             CPU 型号及功能。例如:
                        --cpu coreduo,+x2apic
                        --cpu host
4.2 修改已经存在虚拟机的 CPU
  • 修改宿主机的 CPU 数量并重启宿主机


    image.png
  • 修改虚拟机的 xml 描述文件

# 必须通过vim编辑配置文件
~]# virsh  edit CentOS-7-x86_64
image.png
  • 修改 CPU 配置如下


    image.png
  • 重启虚拟机验证 CPU 数量


    image.png
  • 动态修改 CPU 数量

# 需要宿主机有足够的 CPU 支撑,即修改的数量不能大于宿主机的 CPU 数量
~]# virsh setvcpus   CentOS-7-x86_64 2 –live  
image.png
# 查看新添加的CPU是否在线,即是否处于工作状态
~]# cat /sys/devices/system/cpu/cpu3/online
  • 减小内存,如果创建虚拟机的时候内存是固定的,那么只能减少内存而不能动态添加内存
# 查看当前内存
~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd info balloon
balloon: actual=1024

#尝试增加内存
~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd  balloon 2048

# 增加之后还是之前的大小
~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd info balloon
balloon: actual=1024

# 尝试减少内存
~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd  balloon 512

# 减少之后的大小
~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd info balloon
balloon: actual=512
  • 增加和减小内存之后的效果


    image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容