6、安装kvm虚拟机
6.1、虚拟机开启虚拟化:
6.2、检查linux虚拟机cpu是否开启了虚拟化:
egrep -o 'vmx|svm' /proc/cpuinfo
vmx
6.3、安装kvm管理和安装kvm虚拟机的软件包:
yum install -y qemu-kvm libvirt
#qemu-kvm:kvm用户空间管理工具;libvirt:管理kvm虚拟机的软件;
systemctl enable libvirtd
systemctl start libvirtd
#设置管理kvm虚拟机的libvirt软件开机自启动;
yum install -y virt-install
#安装虚拟机用的包
ip addr #查看网卡,生成了两个虚拟网卡;
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:9b:c4:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:9b:c4:26 brd ff:ff:ff:ff:ff:ff
#默认通过主机的eth0网卡nat到外网,和vmware很像;
6.4、创建qcom2格式的虚拟机的磁盘:
1、qemu-img create -f qcow2 /opt/CentOS-7-x86_64.qcow2 10G
qcom2格式的磁盘特点是虚拟机用多少取多少,但总大小不会超过10G;
2、提示:如何创建raw格式的虚拟机磁盘:
该磁盘的特点是分配给虚拟机多少磁盘,虚拟机就占用多少的磁盘;
qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
#创建一个raw格式为10G的虚拟磁盘;
6.5、创建磁盘格式为qcow2格式的虚拟机:
1、通过xshell或scrt的文件传输工具将linux镜像传到/tmp/文件夹下,不要通过rz进行传输,因为
通过rz命令传输时会限制传输文件的大小;
2、新建立一个桥接网卡,远程访问虚拟机:
(1)特别注意:因为在新建网卡的时候会切断和服务器之间的远程连接,所以最好使用
脚本进行创建虚拟机;
(2)脚本如下:
cat /root/br0.sh
#!/bin/bash
brctl addbr br0
#创建一个桥接网br0;
brctl addif br0 eth0
#将桥接网卡br0代替eth0网卡,此时会断开连接,最好使用脚本;
ip addr del 10.0.0.200/24 dev eth0
#删除eth1的ip地址,实际上物理ip没有删除;
ifconfig br0 10.0.0.200/24 up
#设置br0网卡的ip地址;
route add -net 0.0.0.0/0 gw 10.0.0.253 br0
#添加网关;
(3)查看桥接网卡:
brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c292e46c3 no eth0
virbr0 8000.5254009bc426 yes virbr0-nic
(4)将脚本加入到开机自启动中:
chmod +x /etc/rc.d/rc.local
echo '/bin/sh /root/br0.sh' >>/etc/rc.local
3、进行创建:
(1)创建虚拟机命令:
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --vcpus 1 \
--disk /opt/CentOS-7-x86_64.qcow2,format=qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location=/tmp/CentOS-7-x86_64-DVD-1804.iso
参数说明:
--name #虚拟机的名称;
--ram #虚拟机的内存大小;
--vcpus #虚拟机cpu的个数;
--location #虚拟机安装镜像;
--disk #虚拟机安装磁盘;
--network #虚拟机使用的网络模式,这里使用bridge=br0(桥接模式);network=default使用的默认模式即nat模式'virbr0';
--graphics #虚拟机使用图形化模式进行安装;
vnc,listen=,prot= #tighvnc监听的网卡和端口号,不指定端口号默认监听的端口号是5900,开多个虚拟机时依次加1;
--noautoconsole #不自动试图连接到客户机控制台,由vnc客户端进行连接;
--os-type #系统类型;
--os-variant #系统的版本,osinfo-query os用于查看系统所对应的版本;
(2)提示:如何创建磁盘格式为 raw的虚拟机:
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --vcpus 1 \
--disk /opt/CentOS-7-x86_64.raw \
--network bridge=br0 \
--graphics vnc,listen=172.16.1.200,port=5900 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location=/tmp/CentOS-7-x86_64-DVD-1804.iso
6.6、使用TightVNC连接虚拟机:
TightVNC连接到10.0.0.100:5900
提示:安装完虚拟机后需要快速连接到虚拟机,因为超时60秒后会自动安装操作系统;
6.7、安装虚拟机和优化:
(1)参考文档'2.14、制作Centos模板及优化操作';
(2)查看ip:
brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c292e46c3 no eth0
virbr0 8000.5254009bc426 yes virbr0-nic
6.8、在宿主机上对虚拟机进行管理:
1、对虚拟机状态操作:
(1)查看虚拟机状态:
virsh list --all
Id 名称 状态
----------------------------------------------------
1 CentOS-7-x86_64 running
(2)停止虚拟机:
virsh shutdown CentOS-7-x86_64
(3)启动虚拟机:
virsh start CentOS-7-x86_64
(4)彻底删除虚拟机:
virsh undefine CentOS-7-x86_64
#说明:undefine参数尽量少用;
rm -f /opt/CentOS-7-x86_64.raw
#删除虚拟机的磁盘文件;
(5)查看宿主机的状态:
virsh nodeinfo
CPU 型号: x86_64
CPU: 1
CPU 频率: 2001 MHz
CPU socket: 1
每个 socket 的内核数: 1
每个内核的线程数: 1
NUMA 单元: 1
内存大小: 4193716 KiB
(6)查看虚拟机的信息:
virsh dominfo CentOS-7-x86_64
Id: -
名称: CentOS-7-x86_64
UUID: be71d967-2a11-444f-9b23-9f8a36c18312
OS 类型: hvm
状态: 关闭
CPU: 1
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
(7)克隆虚拟机:
virt-clone -o CentOS-7-x86_64 -n CentOS-7-x86_64-clone -f /opt/CentOS-7-x86_64-clone.qcow2
(8)
//强制关闭KVM虚拟机
virsh destroy name
//挂起KVM虚拟机
virsh suspend name
//恢复挂起的虚拟机
virsh resume name
//编辑KVM虚拟机的xml配置文件
virsh edit name
//删除创建的KVM虚拟机
virsh undefine name
1)参数解释:
-o #表示源虚拟机;
-n #表示克隆后虚拟机的名字;
-f #表示克隆新的虚拟机的存放路径;
(8)查看虚拟机的磁盘位置:
virsh domblklist CentOS-7-x86_64
目标 源
------------------------------------------------
vda /opt/CentOS-7-x86_64.qcow2
hda -
2、虚拟机cpu和内存的热添加:
(1)热添加说明:
修改宿主机中的'/etc/libvirt/qemu/CentOS-7-x86_64.xml'文件;
实现虚拟机的cpu和内存热添加,宿主机和虚拟机必须是centos7;
在宿主机上修改了相应虚拟机的xml文件,需要重启虚拟机后才能获得xml文件上增减的资源;
一般不推荐虚拟机的热增加,推荐关机操作(修改虚拟机对应的xml文件);
(2)cpu热添加:
virsh edit CentOS-7-x86_64
1)修改前xml文件中cpu的配置参数:
<vcpu placement='static'>1</vcpu>
2)修改后xml文件中cpu的配置参数:
<vcpu placement='auto' current="1">4</vcpu>
#需要重启虚拟机;
3)热添加cpu命令:
virsh setvcpus CentOS-7-x86_64 2 --live
(3)内存热添加:
virsh edit CentOS-7-x86_64
1)修改前xml文件中内存的配置参数:
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
2)修改后xml文件中内存的配置参数:
<memory unit='KiB'>1548576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
#需要重启虚拟机;
3)热增加内存:
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 1224
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
#查看当前虚拟的内存;
3、对虚拟机的网络进行操作:
(1)说明:
当安装虚拟机时使用的是'network=default'参数,则网络模式为nat,自动分配ip地址,地址段为
192.168.122.0/24;当改为bridge=br0后则为桥接模式,外面可以访问到虚拟机,需要自己分配ip地址;
由nat转到桥接需要先创建br0桥接网卡,然后再配置相应虚拟机的xml文件,由桥接改为nat模式只需配
置相应虚拟机xml文件即可;
(2)网卡模式为nat时的xml文件配置:
<interface type='network'>
<source network='default'/>
(3)网卡模式为桥接时的xml文件配置:
<interface type='bridge'>
<source bridge='br0'/>
(4)添加多块网卡:
在xml配置文件中添加如下内容,其中mac地址可以自己随便定义;
<interface type='bridge'>
<mac address='52:54:00:dd:2a:88'/>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
(5)在虚拟机运行的情况下修改虚拟机相对应的xml文件需要重启虚拟机后xml才会生效;
4、对虚拟机的磁盘进行操作;
(1)方法一(添加额外的磁盘):
1)关闭虚拟机:
virsh shutdown CentOS-7-x86_64
2)创建增加的磁盘:
qemu-img create -f qcow2 /opt/CentOS-7-x86_64_add.qcow2 2G
3)编辑相应虚拟机的xml文件,添加如下内容:
virsh edit CentOS-7-x86_64
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/opt/CentOS-7-x86_64_add.qcow2'/>
<target dev='vdb' bus='virtio'/>
</disk>
4)在额外的磁盘上进行磁盘分区;
(2)方法二(直接扩充磁盘的大小):
1)关闭虚拟机:
virsh shutdown CentOS-7-x86_64
2)扩充虚拟机的磁盘:
qemu-img resize /opt/CentOS-7-x86_64.qcow2 +5G
3)在大的磁盘上分增加的空间;
4)注意:
6.9、虚拟机的优化管理:
1、cpu的优化:
(1)interl vt-x/ept或amd-v/rvi
(2)上下文切换:
1)宿主机
ring 0
#用户空间,用户态;
ring 3
#内核空间,内核态;
2)虚拟机
ring 0
ring 3
(3)缓存:绑定gemu线程绑定到一个内核上,提高cpu缓存的命中率,但是kvm的灵活度会降低;
taskset -cp 1 25718
2、内存的优化:
(1)EPT技术:
虚拟机:虚拟内存
虚拟机:物理内存
宿主机:虚拟内存
宿主机:物理内存
(2)大页内存(增加内存一页的大小,默认是开启的,提高虚拟机内存的io性能):
cat /sys/kernel/mm/transparent_hugepage/enabled
(3)KSM内存合并,相同的页合并:
ps -aux | grep ksm | grep -v grep
root 28 0.0 0.0 0 0 ? SN 13:21 0:00 [ksmd]
root 934 0.0 0.0 115300 952 ? S 13:22 0:00 /bin/bash /usr/sbin/ksmtuned
3、I/O优化:
(1)2.6 内核: Noop CFQ AS Deadline 默认:CFQ
(2)3.10内核: Noop CFQ Deadline 默认:Deadline
(3)查看系统内核io的调度算法,如果是ssd硬盘需要使用的是noop内核调度;
cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
4、虚拟机问题:
(1)kvm虚拟机在宿主机中就是个进程;
ps -aux | grep kvm #CentOS-7-x86_64
root 622 0.0 0.0 0 0 ? S< 13:34 0:00 [kvm-irqfd-clean]
qemu 2012 9.2 7.8 1761060 314616 ? Sl 13:52 1:32 /usr/libexec/qemu-kvm -name CentOS-7-x86_64 -S -machine pc
(2)libvirt后台进程和api;
(3)如果libvirt停止不会影响虚拟机,主要的影响是不能够管理kvm虚拟机;
ps -aux | grep libvirtd
root 1263 0.0 0.4 1338772 16636 ? Ssl 13:34 0:01 /usr/sbin/libvirtd
6.10、kvm虚拟机补充:
1、qemu-kvm磁盘读写的缓冲(cache)的五种模式:
当你对VM读写磁盘的性能有不同的要求的时候,你可以在其启动的参数(cache=xxxx)
里面进行一个合理的选择。默认的是writeback。
(1)cache=writethrough:
该模式对应的标志位是O_DSYNC,仅当数据被提交到了存储设备里面的时候,写操作
才会被完整的通告。此时host的页缓存可以被用在一种被称为writethrough缓存的模式。
guest的虚拟存储设备被告知没有回写缓存(writeback cache),因此guest不需要为了
操纵整块数据而发送刷新缓存的指令了。此时的存储功能如同有一个直写缓存(writethrough cache)一样。
(2)cache=none:
所对应的标志位是O_DIRECT,在 none 模式下,VM的IO操作直接
在qemu-kvm的userspace缓冲和存储设备之间进行,绕开了host的页缓冲。
这个过程就相当于让vm直接访问了你的host的磁盘,从而性能得到了提升。
(3)cache=writeback:
对应的标志位既不是 O_DSYNC 也不是 O_DIRECT ,在writeback模式下,IO操作会经过
host的页缓冲,存放在host页缓冲里的写操作会完整地通知给guest。
除此之外,guest的虚拟存贮适配器会被告知有回写缓存(writeback cache),所以为了能够
整体地管理数据,guest将会发送刷新缓存的指令.类似于带有RAM缓存的磁盘阵列(RAID)管理器。
(4)cache=unsafe:
该模式与writeback差不多,不过从guest发出的刷新缓存指令将会被忽视掉,这意味着使用者
将会以牺牲数据的完整性来换取性能的提升。
(5)cache=directsync:
该模式所对应的标志位是O_DSYNC和O_DIRECT,仅当数据被提交到了存储设备的时候,写
操作才会被完整地通告,并且可以放心地绕过host的页缓存。
就像writethrough模式,有时候不发送刷新缓存的指令时很有用的.该模式是最新添加的一种cache模式,
使得缓存与直接访问的结合成为了可能。
2、QCOW2和ROW 区别:
(1)kvm虚拟机中需要选择磁盘镜像的格式,通常的选择有两种,一种是raw镜像格式,一种是qcow2格式。
(2)raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来
管理的,Linux下的文件系统可以很好的支持空洞的特性,所以,如果你创建了一个100G的raw格式的文件,ls看的时
候,可以看到这个文件是100G的,但是用du 来看,这个文件会很小。
(2)qcow2是kvm支持的磁盘镜像格式,我们创建一个100G的qcow2磁盘之后,无论用ls来看,还是du来看,都是很小的。
这说明了,qcow2本身会记录一些内部块分配的信息的。
(3)无论哪种格式,磁盘的利用率来说,都是一样的,因为实际占用的块数量都是一样的。但是raw的虚拟机会比qcow2的虚拟机
IO效率高一些,实际测试的时候会比qcow2高25%,这个性能的差异还是不小的,所以追求性能建议选raw。
raw唯一的缺点在于,ls看起来很大,在scp的时候,这会消耗很多的网络IO,而tar这么大的文件,也是很耗时间跟CPU的,解决
方法是把raw转换成qcow2的格式,对空间压缩就很大了。而且速度很快。转换命令如下:
#qemu-img convert -O qcow2 disk.raw disk.qcow2
#qemu-img convert -O raw disk.qcow2 disk.raw
3、虚拟机cpu和内存的超配比例:
默认OpenStack的CPU超配比例是1:16,内存超配比例是1:1.5。cat /proc/cpuinfo里面的逻辑核数,再x16就是你能够分配给虚拟机的vcpu个数。
宿主机的物理内存x1.5就是可以分给虚拟机的内存;
6.11、KVM虚拟机快照:
1.查看磁盘格式raw格式需要转换成qcow2
[root@centos7 ~]# qemu-img info /data/centos7u4-node1.raw
image: /data/centos7u4-node1.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
2.必须关闭虚拟机进行磁盘转换
[root@centos7 ~]# virsh shutdown centos7u4-node1
[root@centos7 ~]# qemu-img convert -f raw /data/centos7u4-node1.raw -O qcow2 /data/centos7u4-node1.qcow2
//convert 将磁盘文件转换为指定格式的文件
//-f 指定需要转换文件的文件格式
//-O 指定要转换的目标格式
//转换完成后,将新生产一个目标映像文件,原文件保存
3.修改KVM虚拟机配置文件配置文件
[root@centos7 ~]# virsh edit centos7u4-node1
<driver name='qemu' type='qcow2'/>
<source file='/data/centos7u4-node1.qcow2'/>
4.对虚拟机当前进行快照拍摄
[root@centos7 ~]# virsh snapshot-create centos7u4-node1
Domain snapshot 1523494907 created
5.查看虚拟机快照
[root@centos7 ~]# virsh snapshot-list centos7u4-node1
Name Creation Time State
------------------------------------------------------------
1523494907 2018-04-11 21:01:47 -0400 running
//检查当前虚拟机最新快照版本
[root@centos7 ~]# virsh snapshot-current centos7u4-node1|less
//快照xml文件存放路径
[root@centos7 ~]# ls /var/lib/libvirt/qemu/snapshot/centos7u4-node1/
1523494907.xml 1523495036.xml
6.恢复快照
[root@centos7 ~]# virsh snapshot-revert centos7u4-node1 1523494907
//确认恢复版本正确
[root@centos7 ~]# virsh snapshot-current centos7u4-node1|grep "1523494907"
<name>1523494907</name>
<creationTime>1523494907</creationTime>
7.删除快照
[root@centos7 ~]# qemu-img info /data/centos7u4-node1.qcow2
image: /data/centos7u4-node1.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.8G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1523494907 282M 2018-04-11 21:01:48 00:16:25.489
2 1523495036 282M 2018-04-11 21:03:56 00:18:29.210
Format specific information:
compat: 1.1
lazy refcounts: false
#删除最近一个快照
[root@centos7 ~]# virsh snapshot-delete centos7u4-node1 1523495036
Domain snapshot 1523495036 deleted
6、安装kvm虚拟机的更多相关文章
- 11.安装KVM虚拟机
安装KVM虚拟机是一大难题,不按照虚拟机物理机128G内存和强劲的CPU无法充分利用.也不便于后面的jenkins自动部署.安装KVM虚拟机过程我是借鉴了网上下载的马哥linux KVM那块的内容 ...
- CentOS 7.5 安装KVM虚拟机(Windows)
一.KVM环境搭建1.检测系统是否支持cat /proc/cpuinfo | egrep 'vmx|svm' KVM是基于x86虚拟化扩展(Intel VT 或者 AMD-V)技术的虚拟机软件,所以查 ...
- 命令行安装kvm虚拟机、桥接网络、用virt-manager管理
宿主机CentOS Linux release 7.2.1511 (Core),内核3.10.0-327.el7.x86_64 1.配置宿主机网络桥接 想让虚拟机有自己的ip且外网可访问,需要在安装虚 ...
- Centos7使用pxe安装KVM虚拟机
Centos7使用pxe安装KVM虚拟机 一.安装服务所需的软件 [root@localhost ~]yum install nginx dhcp vsftpd syslinux -y [root@l ...
- (转)CentOS7安装KVM虚拟机详解
原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E ...
- centos7安装kvm虚拟机
一 centos7安装kvm虚拟机 1.验证CPU是否支持KVM 结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的. [root@centos ~]# egrep '(vmx| ...
- centos6.2安装kvm虚拟机
http://www.wenzizone.com/2012/03/06/centos_6-2_install_kvm.html KVM虚拟机简介 kernel-based Virtual Machin ...
- 如何在CentOS6.4系统上安装KVM虚拟机
CentOS6.4系统上安装KVM虚拟机 备注:以下操作说明是经过实验验证后总结出来的笔录,有需要的朋友可以进行参考,以下是基于VMware12.5.2虚拟机版本上安装的实验环境. 一.安装KVM ...
- vmware安装kvm虚拟机
1. 概述 本篇博客主要使用运行在win10专业版上的vmware workstation 15 pro虚拟化软件,安装centos7.7最小化系统,并在centos7上安装kvm虚拟机,实现快速创建 ...
随机推荐
- [Qt] 基本概念
QObject :所有 Qt 类的基类 QWidget类:包含所有组件的类 Widgets:组件,组成Qt界面的基本元素 window:界面,是不含有父组件的组件 Child Widgets:子组件, ...
- xsos:一个在Linux上阅读SOSReport的工具
xsos:一个在Linux上阅读SOSReport的工具 时间 2019-05-23 14:36:29 51CTO 原文 http://os.51cto.com/art/201905/596889 ...
- TrueCrypt与CryptSetup双系统全盘加密(图文)
http://blog.topsec.com.cn/truecrypt%E4%B8%8Ecryptsetup%E5%8F%8C%E7%B3%BB%E7%BB%9F%E5%85%A8%E7%9B%98% ...
- Linux软件安装管理之——dpkg与apt-*详解
Linux软件安装管理之--dpkg与apt-*详解 [Linux软件安装管理系列]- - 传送门: - -<Linux软件安装管理之--源码安装详解> - -<Linux软件安装管 ...
- 如何解决在WordPress安装Redis插件时需要输入FTP问题?
用LAMP或者LNMP搭建Worepress的时候,安装主题或者插件时候,往往提示需要输入FTP服务端信息的问题,其实这是一个坑,可以完全避免的 我们只需在wp-config.php文件最后添加以下代 ...
- Servlet中的过滤器和监听器
1.什么是过滤器? Servlet规范中定义的一种特殊的组件,用来拦截容器的调用过程.容器收到请求之后,首先调用过滤器,然后再调用Servlet 2.生命周期: 1.servlet:servlet的生 ...
- SpringCloud Alibaba实战(3:存储设计与基础架构设计)
1.存储设计 在上一章中,我们已经完成了基本业务流程的梳理和服务模块的划分,接下来,开始设计数据存储. 虽然在微服务的理论中,没有对数据库定强制性的规范,但一般,服务拆分之后,数据库也会对应的拆分. ...
- OFRecord 数据集加载
OFRecord 数据集加载 在数据输入一文中知道了使用 DataLoader 及相关算子加载数据,往往效率更高,并且学习了如何使用 DataLoader 及相关算子. 在 OFrecord 数据格式 ...
- MinkowskiPooling池化(上)
MinkowskiPooling池化(上) 如果内核大小等于跨步大小(例如kernel_size = [2,1],跨步= [2,1]),则引擎将更快地生成与池化函数相对应的输入输出映射. 如果使用U网 ...
- 实时双频Wi-Fi如何实现下一代车内连接
实时双频Wi-Fi如何实现下一代车内连接 How real simultaneous dual band Wi-Fi enables next-generation in-vehicle connec ...