Linux系统KVM虚拟化技术
在公司工作时出现了这样一个需求:需要在一台服务器中安装两个系统,分别部署不同的服务,设置不同的系统时间,并且两个系统之间可以互相通讯。在网上查询相关资料后,决定通过KVM实现该功能,现将步骤记录如下。
我这边服务器用的是CentOs7.2版本。虚拟机也使用相同版本。主机名hls 、IP:192.168.1.11。
虚拟机主机名hls01
一、安装前准备
1、 查看CPU是否支持KVM
(e)grep -E '(vmx|svm)' /proc/cpuinfo
如果出现vmx 则表示支持

2、 关闭SELinux
将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled

3、 安装KVM需要的软件包
yum install kvm libvirt kmod-kvm qemu-kvm virt-manager bride-utils virt-install
其中:virt-manager是GUI管理窗口,bridge-utils 用于网络桥接qemu-kvm用来创建虚拟机硬盘,libvirt用来管理虚拟机 virt-install 用来创建虚拟机
4、 安装完成检查模块是否有加载。
lsmod | grep kvm

5、 检查KVM是否安装成功
virsh -c qemu:///system list

6、 开启KVM服务并且设置其开机启动
systemctl start libvirtd
systemctl enable libvirtd
查看KVM状态操作结果
systemctl status libvirtd
systemctl is-enabled libvirtd

7、 网卡配置
启动libvirtd,并将它设为开机启动,启动后使用ifconfig查看发现会自动建立一个名称为virbr0的虚拟网桥,ip默认为192.168.122.1/24,说明libvirtd启动成功,如果默认没有ifconfig命令,使用yum install -y net-tools安装。在多网卡情况下,此网桥默认与eth1网卡绑定。为了向虚拟机提供联网功能,KVM使用virbr0作为默认网络设备,因此在实际应用中,需要将virbr0与连接到实际网络的网卡绑定。
1) 添加网桥br0
vi /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=bridge
BOOTPROTO=static
NM_CONTROLLED=yes
NAME= br0
DEVICE= br0
ONBOOT=yes
IPADDR=192.168.1.12
GATEWAY=192.168.1.1
DNS1=192.168.1.1
也可以根据自己需要设置成自动获取
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=dhcp
然后修改本机的物理网卡
vi
/etc/sysconfig/network-scripts/ifcfg-eth0
在最后面添加 BRIDGE=br0
重启网卡 service network restart
现在访问电脑 使用192.168.1.12就可以了。
二、使用KVM创建虚拟机
1、
创建安装硬盘
使用qemu命令创建一个10G的硬盘(最小10G,可以更多这块硬盘空间就是虚拟机系统硬盘总空间),我这边硬盘的名称为: CentOS-7-x86_64.raw
qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
查看硬盘 ll -h /opt

2、 创建虚拟机
先在根目录下创建一个ISO的目录文件夹用来存放CentOS7的ISO文件
mkdir ISO

virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/root/ISO/OracleLinux-R7-U2-Server-x86_64-dvd.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 –-noautoconsole
其中CentOS-7-x86_64是虚拟机的名称 可以自己随便定 –cdrom 是我们放的ISO文件的路径 –disk path 是我们创建的硬盘路径。
但是我这边在执行的时候出现了一个错误

Permission denied 。最开始我以为是ISO文件没有权限,但是授权之后仍然出现这个问题于是在网上找资料,最终发现是需要修改/etc/libvirt/qemu.conf 配置文件。
vi /etc/libvirt/qemu.conf
需要配置qemu进程的用户和组相关配置,可根据自己的实际情况进行修改,这边我将user和group都设置成root:

配置修改完成后,需要重启libvirtd服务
service libvirtd restart
然后再重新执行上一步就会发现已经开始安装了
这时候使用TightVNC工具 连接主机IP 192.168.1.12

进去之后就是CentOS7的安装界面,一步步安装就行了。

还有一种方法是先不创建虚拟机硬盘 直接在命令中指定
mkdir –p /home/iso 将iso文件上传到目录下
mkdir -p /home/kvm-bak 创建虚拟机文件存放路径
创建虚拟机
virt-install -n hls01 -r 2048 --disk /home/kvm-bak/hls01.img,format=qcow2,size=20 --network bridge=br0 --os-type=linux --os-variant=none --cdrom /home/iso/ OracleLinux-R7-U2-Server-x86_64-dvd.iso --vnc --vncport=5910 --vnclisten=0.0.0.0
然后就可以用VNC Viewer连接一步步安装。
安装中间出现的问题:使用VNC工具连接到虚拟机直接是黑屏,没法显示安装界面。
这里困扰我几天,找了各种资料、修改了很多配置文件、安装很多包都没有解决。最后偶然发现是我的Linux系统内核问题。我这边使用的是Oracle版本的CentOS系统,默认的是3.8的uek内核与VNC图形不匹配。改成3.10的Red Hat 内核就行。如果是原版的CentOS系统就直接没有这个问题。算是我给自己挖的坑。
解决方法是将默认内核修改步骤如下:
cat /boot/grub2/grub.cfg |grep menuentry 查看系统可用内核
grub2-editenv list 查看系统默认内核
grub2-set-default 'Oracle Linux Server (3.10.0-327.el7.x86_64 with Linux) 7.2' 修改系统默认内核
grub2-editenv list 查看修改结果

三、虚拟机的配置工作
1、查看虚拟机信息
当KVM中的虚拟机启动后,可以在/etc/libvirt/qemu目录下,看到启动的虚拟机的信息

使用命令 virsh edit CentOS-7-x86_64 我们可以看到更多信息并且可以修改。
2、配置网卡
我们可以在安装虚拟机系统时指定使用桥接模式 br0
如果我们已经安装好系统就需要在其XML配置文件中修改。
virsh edit CentOS-7-x86_64

将 type 改为bridge network=’default’改为bridge=’br0’

修改完成后需要重启虚拟机
virsh shutdown CentOS-7-x86_64 ##关闭虚拟机
virsh list --all ##查看所有虚拟机状态
virsh start CentOS-7-x86_64 ##启动虚拟机
主机就可以和虚拟机之间相互通讯了。也可以用SSH连接虚拟机。
3、 CPU热添加(KVM支持CPU的热添加,不过局限是宿主机和虚拟机的系统相同才行,这里宿主机是CentOS7,虚拟机也是CentOS7,所以可以模拟CPU热添加,不过真实生产环境不建议这样操作)
virsh edit CentOS-7-x86_64
将 <vcpu placement='static'>1</vcpu> 修改为:
<vcpu placement='auto' current="1">4</vcpu>
意思是当前cpu为1核,最多可以有4核,修改完虚拟机的配置文件,必须关闭虚拟机再启动,配置才能生效

在主机上通过命令添加核数
virsh setvcpus CentOS-7-x86_64 2 --live ##虚拟机的cpu添加到2core
再通过VNC工具查看虚拟机CPU信息

4、 内存热添加
查看当前虚拟机内存
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
修改当前虚拟机内存为512(可根据实际需要调大或者调小虚拟机内存)
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512

四、迁移虚拟机
虚拟机建好后,最大的好处就是任由我们折腾,而不用担心重装系统的麻烦。所以一定要知道虚拟机怎么复制迁移,这里有两种情况,一种是本机上镜像复制,另一种是将本机镜像迁移到其他服务器上
1、 本机复制
先关闭虚拟机 virsh shutdown CentOS-7-x86_64
创建一个克隆的虚拟机硬盘 mkdir -p /home/kvm-img
使用 virt-clone 克隆CentOS-7-x86_64为新的虚拟机
virt-clone -o CentOS-7-x86_64 -n CentOS-7-x86_64_01 -f /home/kvm-img/ CentOS-7-x86_64_01.img
克隆完成 使用 virsh list –all 查看虚拟机的状态
开启CentOS-7-x86_64_01然后修改IP地址主机名
virsh start CentOS-7-x86_64_01
hostname hls02
vi /etc/hostname
重启虚拟机 reboot
2、 将虚拟机镜像(CentOS-7-x86_64_01)迁移到其他服务器上
先找到虚拟机的配置文件和镜像文件的位置然后将CentOS-7-x86_64_01.img放到新服务器的/home/kvm-img目录下,将CentOS-7-x86_64_01.xml放到 /etc/libvirt/qemu 目录中
都改名为CentOS-7-x86_64_02
复制一个 CentOS-7-x86_64_02.xml 将里面所有CentOS-7-x86_64_01替换为CentOS-7-x86_64_02,然后把UUID换为新的 同时注意xml中的source file 文件路径要修改。
定义新的虚拟机 virsh define /etc/libvirt/qemu/ CentOS-7-x86_64_02.xml
按照需要修改IP,主机名然后重启就行了。
3、删除虚拟机
如果虚拟机在工作中可以先关闭也可以直接destroy然后再undefine移除
virsh destroy CentOS-7-x86_64
virsh undefine CentOS-7-x86_64
如果虚拟机已经关闭直接undefine 移除就行
再删除相应的文件
/var/lib/libvirt/images/CentOS-7-x86_64
/etc/libvirt/qemu/CentOS-7-x86_64
Linux系统KVM虚拟化技术的更多相关文章
- Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 (1).KVM虚拟机克隆 KVM虚拟克隆命令virt-clone [选项] 常用选项 ...
- Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机
(1).虚拟化产品对比介绍 虚拟化技术有以下三种:仿真虚拟化,这是一种对系统硬件没有要求,但性能最低的虚拟化技术:半虚拟化,这是一种直接使用物理硬件,性能高,但需要修改内核的虚拟化技术:全虚拟化,这是 ...
- Linux的桌面虚拟化技术KVM(二)——远程桌面管理
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 远程桌面管理,指的是远程图形界面管理,所以要保证物理机要有图形化界面. (1).VNC管理 安装VNC-server服务,并进行配置 [ro ...
- Linux的桌面虚拟化技术KVM(五)——virsh常用命令
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照 Linux的桌面虚 ...
- Linux的桌面虚拟化技术KVM(四)——虚拟机镜像格式对比与转换
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照 (1).常用镜像格 ...
- KVM虚拟化技术
KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machi ...
- [转] KVM虚拟化技术生态环境介绍
KVM虚拟化技术生态环境介绍 http://xanpeng.github.io/wiki/virt/kvm-virtulization-echosystem-intro.html kvm和qemu/q ...
- KVM虚拟化技术(二)KVM介绍
KVM:Kernel Virtual Machine KVM是基于虚拟化扩展的x86硬件,是Linux完全原生的全虚拟化解决方案.部分半虚拟化支持,主要是通过半虚拟网络驱动程序的形式用于Linux和W ...
- KVM虚拟化技术(一)虚拟化简介
一 .虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模 拟多CPU并行,允许一个平台同时运行多个 ...
随机推荐
- Python方法和属性的动态绑定 --面向对象
需要了解的: __ slots __:属于魔术变量,即:系统实现某些特定功能的变量 __ slots __: 1.限定类实例能添加的属性 2.对当前类起作用,对继承的子类是不起作用的 实操: # co ...
- pycharm配置可视化数据库
出于数据库安全性,数据库管理员会给数据库配置SSH,也就是为数据库增加一个安全协议(通信加密),加大外部用户对该数据库远程连接的难度. 利用SSH通道来连接远程数据库时需要以下信息:远程数据库服务器I ...
- 跟踪mqttv3源码(一)
Spring整合MQTT pom.xml <!-- MQTT消息队列 --> <dependency> <groupId>org.eclipse.paho</ ...
- linux逻辑卷管理(LVM)
1. 逻辑卷(LVM)的原理 LVM(Logical Volume Manager)逻辑卷管理 是在物理磁盘和文件系统的之间添加一个逻辑层,通过对底层物理磁盘的封装,以逻辑卷的方式呈现给上层应用,通过 ...
- MySQL数据库(2)
上一篇我们讲述过MySQL创建数据库,数据表的内容,其中涉及到了几个约束: NOT NULL 非空约束 PRIMARY KEY 主键约束 UNIQUE KEY 唯一约束 其实还有两个约束 ...
- sql server中的varchar和Nvarchar有什么区别?
很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大 ...
- vue做nav切换
话不多说,直接上代码. 关键:通过点击来改变thisindex ,又thisinde == index来控制class是否含active来控制样式 简单效果如下:
- 新建ui文件及相应.h和.cpp文件
1.在Qt Creator中新建一个任意的项目(如untitled): 2.在该项目中添加QT设计师界面类: 3.将新建的3个文件(.ui..h..cpp)拷贝到目标项目文件夹中: 4.分别在目标 ...
- windows下Xshell远程访问虚拟机
下载Xshell 5软件在windows下安装 安装好后Xshell 5启动软件 下一步,检查虚拟机,配置是否正确 下一步,设置网络,保障虚拟机系统能够连接网络 下一步,进入虚拟机系统,检查虚拟机网络 ...
- Xshell配置使用linux的图形界面
1.配置Xshell如下图 2.在命令行中执行"gnome-panel". 3.或者使用xstart,配置如下图: