[未验证部分]

kvm安装前检查

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l # 查看物理机的cpu是否支持虚拟化, 找到flags部分,如果其中输出有VMX或SVM,即表明支持虚拟化技术。
cat /proc/cpuinfo | egrep '(vmx|svm)'

[已验证部分]

修改iptables
其中5900~5999端口是给vnc留的

[root@KVM02 ~]# more /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5900:5999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

安装虚拟环境

# 可以先用yum grouplist查看下,为了避免缺少组件
yum -y groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools"
# 虚拟环境安装好后,开始配置网络,一般都用桥接的方式
yum install bridge-utils

配置网卡,添加bridge网卡
修改/etc/sysconfig/network-scripts/ifcfg-em1文件,并且在同目录下新建ifcfg-br0, 内容如下, 红色部分是尤其需要注意的部分

[root@KVM02 ~]# more /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
UUID=6deaff10-e5af--aa7a-de656005e5f7
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
HWADDR=C4::6B:B9:9F:
IPADDR=192.168.13.11
PREFIX=
GATEWAY=192.168.13.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
BRIDGE=br0
USERCTL=no [root@KVM02 ~]# more /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
UUID=6deaff10-e5af--aa7a-de656005e5f7
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
HWADDR=C4::6B:B9:9F:
IPADDR=192.168.13.11
PREFIX=
GATEWAY=192.168.13.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
USERCTL=no

# 查看内核下面三项是否为0,官网说这是为了disabled netfilter (实际测试好像不需要)

sysctl -a |grep net.birdge
net.bridge.bridge-nf-call-arptables =
net.bridge.bridge-nf-call-iptables =
net.bridge.bridge-nf-call-ip6tables =

# 重启网络, 看bridge是否配置成功

ifconfig 或者
brctl show

# 配置qemu
vi /etc/libvirt/qemu.conf
取消以下注解并修改
vnc_listen = 0.0.0.0
vnc_password = "bigbang"  #vnc连接密码
remote_display_port_min = 5900
remote_display_port_max = 5999

# 修改以上两个端口后, 需要service libvirtd restart才能生效. 而且使用vncviewer连接时需要指定完整端口, 例如 123.123.123.15:15900

创建虚机文件

qemu-img create -f qcow2 /home/kvmdata/centos6.-proto.qcow2 40G

安装

virt-install \
--virt-type kvm \
--name centos-6.8 \
--vcpus= \
--ram \
--disk path=/home/kvmdata/centos6.-proto.qcow2,size=,format=qcow2 \
--network bridge=br0 \
--cdrom=/home/kvmdata/cdroms/CentOS-6.8-x86_64-minimal.iso \
--os-type=linux \
--os-variant=rhel6 \
--graphics vnc,listen=0.0.0.0 --noautoconsole

如果出现Permission denied 错误, 要设置selinux属性

chcon -R -t var_t cdroms/
chcon -t virt_content_t cdroms/CentOS-6.8-x86_64-minimal.iso

查看所在的vnc端口

virsh vncdisplay centos-6.8
:

vnc viewer连接闪退的解决办法:

修改vnc option里面Advanced-->expert-->ColourLevel的值为“rgb222” or “full”即可。
说明:rgb111-- colours,rgb222-- colours,pal8 -- colours,full -- full colours

Guest虚机安装acpid, 以支持virsh shutdown/reboot

yum install acpid
service acpid start

启用virsh console支持( VM为 Centos6)

1) 添加ttyS0的许可,允许root登陆

vi /etc/securetty
# 最后一行添加 ttyS0
vi /etc/grub.conf
# 在 kernel /vmlinuz-2.6.-.el6.x86_64 ... 开头的那行的结尾, 加入 console=ttyS0
vi /etc/inittab,
# 在最后一行后添加 S0::respawn:/sbin/agetty ttyS0

reboot重启

virsh list
# 查看虚机ID, virsh console ID
# 连接虚机console

虚机为Centos7时启用virsh console支持

参考 https://linuxadmin.io/enable-virsh-console-kvm/ . 和 https://blog.ls-al.com/kvm-virsh-console-on-centos-7/ .

克隆虚机

先停止或暂停虚机

virsh shutdown centos-6.8
(or virsh stop centos-6.8)
virt-clone -o centos-6.8 -n vm01 -f /home/kvmdata/vms/vm01.qcow2
virsh start vm01
# 克隆完成之后可能mac地址会有冲突,删除 /etc/udev/rules.d/70-persistent-net.rules 中的eth0的配置,接着把eth1改成eth0,
# 并且修改 ifcfg-eth0 的mac,确认两个配置文件中的mac地址是一样的

使用备份文件恢复虚机

mv /etc/libvirt/qemu/centos01.xml /etc/libvirt/qemu/centos1.xml
virsh define /etc/libvirt/qemu/centos1.xml

使用备份文件创建新虚机的话, UUID和mac地址都需要修改, 参考下面的MAC地址冲突的解决.

如果出现uuid重复的错误 virsh define domain is already defined with uuid , 可以命令行下通过uuidgen命令生成新的uuid

[root@KVM01 vms]# uuidgen
6c38ee0f-b583--8ed6-7d1e1d296c4f

MAC地址冲突导致ping丢包

如果直接复制qcow2文件和xml文件进行虚机克隆, 就会导致mac冲突, 现象就是在同一个子网内, 网络启动后, ping丢包. 解决这个问题:
1. 如果在define这个虚机前, 修改xml, 然后再define
2. 如果是define后, 通过virsh edit修改虚机的mac地址, 然后再删除/etc/udev/rule.d/70-persistent-net.rules文件, 重启

    <interface type='bridge'>
<mac address='88:b4:65:d5:53:d6'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

随机的mac地址可以通过下面的命令行生成, 但是要注意, 生成的结果前两位必须是偶数, 如果是奇数的话, define时会认为这个是多播地址而报错

openssl rand -hex  | sed 's/\(..\)/\1:/g; s/.$//'

虚机磁盘性能优化

默认安装下, 虚机磁盘性能非常低, 这是使用qcow2格式时, dd测试的结果

[root@vm_ngx ~]# dd if=/dev/zero of=kwxgd bs=64k count=4k oflag=dsync
+ records in
+ records out
bytes ( MB) copied, 129.695 s, 2.1 MB/s

raw格式测试结果也只是稍好, 达到3.8MB/s, 无论如何, 这种IO速度都是非常差的, 因为宿主机的dd结果大约是156MB/s

尝试的方法: virsh edit [guest name] , 在磁盘的配置中加上 io='native' 参数, 然后将cache改成none, writethrough, writeback分别试试.

<driver name='qemu' type='qcow2' cache='none' io='native'/>

具体的原因如下, 有一篇更详细的说明在这里

One problem of virtual server based on qemu KVM is that IO operations are slow in some cases. The most common reason is that virtual disks are stored on RAID and virtual is using default HDD configuration. It is recommended to turn off cache and set io operations to native.

修改后磁盘性能提升明显, 这个是qcow2格式的结果

[root@vm_db ~]# dd if=/dev/zero of=kwxgd bs=64k count=4k oflag=dsync
+ records in
+ records out
bytes ( MB) copied, 6.61189 s, 40.6 MB/s

raw的结果会更高一些, 约68MB/s, 但是在bs=64k的情况下, 多次执行后, 写入速度陡降至3MB/s左右, 尝试各种参数, 未能解决. bs=1M的情况下没有问题.

Update 2017-09-26: 同一台机器, 升级到Centos7.3后, 进行同样的测试, 在qcow2格式下, 速度达到了30MB/s, 速度高了一个数量级.

常用虚机管理命令

# 查看虚机列表,
virsh list --all
# 查看vnc端口
virsh vncdisplay centos-6.8
# 停止虚机, 需要guest虚机有acpi支持 (yum install acpid, service acpid start)
virsh shutdown centos-6.8
# 关机
virsh destroy centos-6.8
# 启动
virsh start centos-6.8
# 移除虚机
virsh undefine centos-6.8
# 修改虚机配置
virsh edit centos-6.8

通过导出备份的配置文件恢复原KVM虚拟机的定义,并重新define虚拟机, 注意如果修改名称, 修改uuid和mac, 避免重复
[root@KVM ~]# mv /etc/libvirt/qemu/centos01.xml /somewhere/centos1.xml
[root@KVM ~]# virsh define /somewhere/centos1.xml                  #为客户端输出xml配置文件

KVM安装和配置的更多相关文章

  1. 烂泥:虚拟化KVM安装与配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近打算把公司的服务器全部做成虚拟化,一是跟有效的利用了服务器,二也是对自己是一个学习的机会. KVM的安装与配置步骤如下: 1. 查看是否支持虚拟化 ...

  2. kvm安装及配置

     yum install kvm libvirt python-virtinst qemu-kvm virt-viewer bridge-utils virt-install 修改网卡信息 /etc/ ...

  3. Linux KVM 安装配置

    --------------------------一.前言二.环境三.安装与配置四.创建kvm虚拟机 一.前言 KVM,即Kernel-based Virtual Machine的简称,是一个开源的 ...

  4. CentOS 7.5下KVM的安装与配置

    由于没有物理机可用,在自己的VMware Workstation中CentOS 7.5下搭建完成. 首先查看VMware Workstation是否支持虚拟化,把红框内打钩即可. 虚拟化开启并安装Ce ...

  5. KVM安装配置笔记

    系统环境centos6.6 一.KVM安装前系统相关操作: (1)修改内核模式为兼容内核启动 # grep -v "#" /etc/grub.confdevice (hd0) HD ...

  6. KVM安装部署

    KVM安装部署 公司开始部署KVM,KVM的全称是kernel base virtual machine,对KVM虚拟化技术研究了一段时间, KVM是基于硬件的完全虚拟化,跟vmware.xen.hy ...

  7. OpenStack云计算快速入门之二:OpenStack安装与配置

    原文:http://blog.chinaunix.net/uid-22414998-id-3265685.html OpenStack云计算----快速入门(2) 该教程基于Ubuntu12.04版, ...

  8. 云计算之KVM安装(二)

    云计算之KVM安装(二) 调整虚拟机 虚拟化Intel使用的是intel VT-X AMD使用的是AMD-V 创建虚拟机步骤 1.准备虚拟机硬盘 2.需要系统iso镜像 3.需要安装一个vnc的客户端 ...

  9. 烂泥:kvm安装windows系统蓝屏

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近一直在学习有关KVM的知识,实验一直是在虚拟机VM中进行的.今天刚好公司有一台空闲的服务器,直接拿来安装centos.kvm等等,然后相关的配置. ...

随机推荐

  1. 华硕 RT-AC54U路由器固件功能说明

    引言 华硕 RT-AC54U这款路由器固件,界面做的非常不错(起码比OpenWrt要好看).功能也比較强悍,可是对于刚入手这个固件的用户可能会对此固件的一些非常好用的功能无从下手,所以这里我就写下了这 ...

  2. 突发奇想之:源码及文档,文档包括源码---xml格式的源码,文档源码合并;注释文档化,文档代码化;

    目前源码和文档一般都是分开的,我在想为什么 源码不就是最好的文档么? 但是一般源码都是文本text的,格式化需要人为统一规范,所以源码中的文档在现实中不是那么的易于实践. 而且 源码 不能包括图片.附 ...

  3. C#如何判断线程池中所有的线程是否已经完成(转)

    其 实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用 ThreadPool.GetAvailableThr ...

  4. c++字符串split 函数实现

    - 经常遇到字符串分割问题,但是相对于c++而言实现比较麻烦,直接遍历一遍也很冗余 - 另外也适用于,在字符串中找到某个字符的所有位置 //函数功能:将输入字符串s,以字符串c(;)进行拆分,拆分结果 ...

  5. 如何查看Isilon的节点的CPU的信息?

    使用Isilon自带的命令 isi_hw_status 使用如下的命令 dmidecode --type processor 笔者只是想了解一下F800的CPU有多少个core.上面的命令都可以获得这 ...

  6. TextureView SurfaceView 简介 案例

    简介 Android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率相对较低.视频或者opengl内容往往是显示在SurfaceView中的 ...

  7. 浅析 @PathVariable 和 @RequestParam

    一.代码实例 首先,上两个地址: 地址1:http://localhost:8989/SSSP/emps?pageNo=2 地址2:http://localhost:8989/SSSP/emp/7 如 ...

  8. [Algorithm] How many times is a sorted array rotated?

    Given a sorted array, for example: // [2,5,6,8,11,12,15,18] Then we rotated it 1 time, it becomes: / ...

  9. ASP入门(六)-Response对象

    Response对象可以从服务器向用户发送输出的结果. Response几种常用方法 方法 描述 BinaryWrite 向浏览器输出二进制的内容 Clear 清除已经缓冲的HTML输出 End 停止 ...

  10. (纪录片)《星际穿越》中的科学 The Science of Interstellar

    简介: 导演: Gail Willumsen编剧: Gail Willumsen主演: 克里斯托弗·诺兰 / 乔纳森·诺兰 / 基普·索恩 / 马修·麦康纳类型: 纪录片 / 短片制片国家/地区: 美 ...