开发者社区> 技术小胖子> 正文

云计算之--------高级虚拟化KVM

简介:
+关注继续查看

背景:

       前篇在讨论完云计算后,本次我们来讨论实现云计算的基础--->虚拟化技术,虚拟化官方解释,

是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

       虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

wKiom1eOVM6zA9VcAABZ_Ev36QU403.jpg


分类和业务场景选择:

    1. 一台或几台少量服务器(物理机)

        a. ESXI (常用)

        b. XenServer

    2. 多台服务器(物理机)

        a. KVM (linux内核级支持)    [本次主要讲解

        b. oVirt(开源的RHEV)

        c. openstack(开源,火爆)

        d. Vmware vshpere (虚拟化中的霸主,收费)

        e. RHEV(RedHat收费产品)


 

KVM优势

    1. 嵌入到linux正式kernel(兼容性高) (kernel:linux内核)

    2. 代码(内核)级资源调用,不用上下文切换

    3. 虚拟机就是一个进程,可以通过命令来进行管理虚拟机

    4. 直接支持NUMP(Non uniform memory access) 非统一内存方式

    5. 社区人员多

    6. intel和AMD都支持

    7. RedHat6和CentOS6之后都内置

    5. 其它(被RedHat收购)

        a. 保持开源发展模式

        b. 更好的商业支持级服务保障

        



在开始实战前,我们来讨论一下虚拟化中常见的一个问题

        [一台主机跑多个相同的应用和一个主机上面多个虚拟主机,每个虚拟主机一个应用的区别]

        最终得出的结论如下:

            1. 前者性能好,因为虚拟化管理工具也需要占用计算资源

            2. 前者一个应用故障会影响其它剩余的应用运行状态,后者基于虚拟主机上所以每个应用独立,故障不会互相影响.

            3. 前者不易于管理,后者管理容易

            4. 后者快照,备份,回复容易

   wKioL1eOVLTwhLtBAALL3ueZd-I309.png


介绍了这么多关于虚拟化方面的优势和常识,那如何实现虚拟化呢

    wKioL1eOVQOQcUPSAAEJKEK7tvg199.jpg


下面正式开始实现虚拟化

1.环境准备

[#1#root@kvm ~]# cat /etc/redhat-release 

CentOS Linux release 7.2.1511 (Core)


[#2#root@kvm ~]# uname -a

Linux kvm 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux


2. 安装

[#3#root@kvm ~]#yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install


3. 检查安装

[#4#root@kvm ~]#rpm -qa qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install

virt-install-1.2.1-8.el7.noarch

qemu-kvm-1.5.3-105.el7_2.4.x86_64

virt-manager-1.2.1-8.el7.noarch

qemu-kvm-tools-1.5.3-105.el7_2.4.x86_64

libvirt-1.2.17-13.el7_2.5.x86_64


4. 查看是否支持虚拟化

    a. 标志

        intel vmx

        AMD svm 

    b. 查看是否支有vmx或svm  

[#5#root@kvm ~]# 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 dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf 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 arat epb pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt


5. 创建虚拟机所需硬盘

硬盘格式分类:

    1.全镜像模式

        a. 一次性分配空间,性能高,转换容易

        b. 不支持压缩,快照,镜像,占用空间大

        c. 代表有raw

    2. 稀疏模式

        a. 支持压缩,快照,镜像

        b. 占用空间小, 使用多少占用多少

        c. 代表 qcow2  (后面使用此硬盘格式)


[#6#root@kvm ~]#qemu-img  create -f qcow2  /opt/CentOS-7.1-x86_64.raw  10G     

Formatting '/opt/CentOS-7.1-x86_64.raw', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off


   qemu-img: 通过qemu来创建模拟外部设置(硬盘,网络等), KVM只能模拟CPU和内存

    -f  支持格式,qcow2 稀疏模式

    /opt/CentOS-7.1-x86_64.raw 保存的位置和名称

    10G 指定大小



6. 查看硬盘是否创建成功

[#7#root@kvm ~]#lsmod | grep kvm

kvm_intel             162153  0 

kvm                   525409  1 kvm_intel


7. libvirt设置启动并开机自启

[#8#root@kvm ~]#systemctl enable libvirtd.service

[#9#root@kvm ~]#systemctl start libvirtd.service


8. 创建ISO镜像

    通过Vmware Workstation挂载系统盘

[#10#root@kvm ~]#dd if=/dev/cdrom of=/opt/CentOS-7.1.iso    

1234944+0 records in

1234944+0 records out

632291328 bytes (632 MB) copied, 30.9402 s, 20.4 MB/s


9. 创建虚拟机

[#11#root@kvm ~]# 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


Starting install...

Creating domain...                                       |    0 B     00:01     

Domain installation still in progress. You can reconnect to 

the console to complete the installation process.


    --name  指定虚拟机名称,唯一的

    --virt-type 指定虚拟技术类型 

    --ram 分配内存大小

    --cdrom 指定安装镜像ISO

    --disk 指定硬盘

    --network 指定网络

    --graphics 指定vnc(来宾)访问,并允许所有ip

    --noautoconsole 关闭自动属性


10. 通过VNC连接 

    默认第一个创建的虚拟机端口为5900, 第二个5901,第三个第四个以此类推

    


    设置网卡名为eth0

     光标移动到Install CentOS 7按Tab键,在后面输入net.ifnames=0 biosdevname=0 

    

    wKioL1eOXcvwR6Q-AAAfWWQNy8U317.png


    修改完成后查看网卡名称

    

    wKiom1eO1bvg13MVAAETq0TOINI675.png

11. 通过virsh管理虚拟机


    查看正式在运行的虚拟机 [不显示状态为停止的虚拟机]

    [#12#root@kvm ~]# virsh list

     Id    Name                           State

    ----------------------------------------------------

     4     CentOS-7.1-x86_64              running



    查所所有虚拟机 [包含状态为停止的虚拟机]

    [#13#root@kvm ~]# virsh list --all

     Id    Name                           State

    ----------------------------------------------------

     4     CentOS-7.1-x86_64              running


    正常关闭虚拟机  

    [#14#root@kvm ~]# virsh shutdown CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 is being shutdown

    

    [#15#root@kvm ~]# virsh list --all

     Id    Name                           State

    ----------------------------------------------------

     -     CentOS-7.1-x86_64              shut off


    开启虚拟机

    [#16#root@kvm ~]#virsh start CentOS-7.1-x86_64   

    Domain CentOS-7.1-x86_64 started

    

    [#17#root@kvm ~]#virsh list --all             

     Id    Name                           State

    ----------------------------------------------------

     5     CentOS-7.1-x86_64              running


    挂起虚拟机

    [#18#root@kvm ~]#virsh suspend CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 suspended

    

    [#19#root@kvm ~]#virsh list --all               

     Id    Name                           State

    ----------------------------------------------------

     5     CentOS-7.1-x86_64              paused


    恢复挂起的虚拟机    

    [#19#root@kvm ~]#virsh resume  CentOS-7.1-x86_64 

    Domain CentOS-7.1-x86_64 resumed

    

    [#20#root@kvm ~]#virsh list --all

     Id    Name                           State

    ----------------------------------------------------

     5     CentOS-7.1-x86_64              running


     强制关闭虚拟机(正在运行的数据会丢失)  

    [#21#root@kvm ~]#virsh destroy CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 destroyed

    

    [#22#root@kvm ~]#virsh list --all               

     Id    Name                           State

    ----------------------------------------------------

     -     CentOS-7.1-x86_64              shut off


    删除虚拟机

    [#23#root@kvm ~]#virsh undefine CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 has been undefined

    

    [#24#root@kvm ~]#virsh list --all                

     Id    Name                           State

    ----------------------------------------------------

    

12. 修改kvm虚拟机:

    [#25#root@kvm ~]# virsh edit CentOS-7.1-x86_64    #编辑虚拟机文件

    <vcpu placement='auto' current="1">4</vcpu>    #将cpu设置为自动调整,最低一个,最大四个

    Domain CentOS-7.1-x86_64 XML configuration edited.

    改完之后重启才生效

    [#26#root@kvm ~]# virsh shutdown  CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 is being shutdown

    [#27#root@kvm ~]# virsh start CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 started

    设置成2个cpu

    [#28#root@kvm ~]# virsh setvcpus CentOS-7.1-x86_64 2 --live

    

    设置成3个cpu

    [#29#root@kvm ~]# virsh setvcpus CentOS-7.1-x86_64 4 --live

    总结:只支持热添加,不支持热删除

    

    回虚拟机查看:

    [#30#root@kvm ~]# cat /proc/cpuinfo         ----就可以看到cpu有4核了

    

    

    ########设置内存的热添加与热减少########

    [#31#root@kvm ~]# virsh edit CentOS-7.1-x86_64  

     <memory unit='KiB'>4048576</memory>

      <currentMemory unit='KiB'>1048576</currentMemory>

    改完之后重启才生效

    [#32#root@kvm ~]# virsh shutdown  CentOS-7.1-x86_64

    [#33#root@kvm ~]# virsh start CentOS-7.1-x86_64

    

    更改之后回虚拟机查看,内存从1G变成了721M

    

    KVM之内存管理的气球模式:

    [#34#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon

    balloon: actual=1024

    

    [#35#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 600

     

    回虚拟机查看,内存从721变成了297M

    

    [#36#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 2000

    

    回虚拟机查看,内存从297变成了1697M


    wKiom1eO3HnjNRzIAABgFr1fr3s082.png

        
        

13. 网络设置

    由于创建虚拟机的时候我们指定为--network network=default, 默认使用NAT模式,此时只有创建虚拟的宿主机能够访问此虚拟机.在实践环境中这是不允许的,我们需要将其改为桥接模式,供局域网其它用户访问使用.

    wKiom1eO4QzCV7gqAAA_ukazBzc350.png


    [#31#root@kvm ~]# brctl addbr br0 &&\

    > brctl addif  br0 eth0 && \

    > ip addr del dev eth0 192.168.56.21/24 && \

    > ifconfig br0 192.168.56.21/24 up && \

    > route add default gw 192.168.56.2 &&  \

    > iptables -F


    brctl addbr br0  创建桥接网上 指定名称为br0

    brctl addif  br0 eth0    绑定eth0到br0网桥上

    ip addr del dev eth0 192.168.56.21/24 删除eth0的ip地址

    ifconfig br0 192.168.56.21/24 up 设置桥接br0 ip地址,并开启

    route add default gw 192.168.56.2 设置路由

    iptables -F 清理防火墙

    

    [#32#root@kvm ~]# virsh edit CentOS-7.1-x86_64   #编辑虚拟机xml文件

    修改网络配置

    wKioL1eO44ixemmfAAAvpI-uolI192.png

修改为网桥

wKiom1eO45vSQt3rAAAuc_YBzD8231.png

    重启虚拟机

    [#33#root@kvm ~]#virsh reboot CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 is being rebooted

wKioL1eO6JKzrRRFAAA--aNjibc493.png

   此时虚拟机已与宿主机在同一网段中,可以使用ssh等工具连接.

wKioL1eO6Y7hvmGfAAEWPRVxos0708.png





      本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1827921,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
UNIX环境高级编程笔记之进程环境
本章讲的都是一些非常基础的知识,目的是为了下一章讲进程控制做铺垫,所以,本章就不做过多的总结了,直接看图吧。
731 0
UNIX环境高级编程笔记之标准I/O库
一、总结   文件I/O一章讲了不带缓冲的I/O,本章讲的是带缓冲的I/O。不带缓冲针对的是内核的系统调用,而带缓冲针对的是用户空间的标准库函数,是基于带缓冲的I/O实现的。不带缓冲的I/O通过文件描述符的方式来引用一个文件,而带缓冲的I/O则通过文件流(stream)的方式来引用文件。
729 0
《云计算架构技术与实践》读书笔记(四):XEN/KVM虚拟化引擎介绍
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/75392862 4.1  XEN/KVM虚拟化引擎 4.1.1  虚拟化架构分类 计算虚拟化技术的实现形式是在系统中加入一个虚拟化层,将下层的资源抽象成另一种形式的资源,供上层使用。
1826 0
《Linux KVM虚拟化架构实战指南》——导读
多数主流Linux版本现在都内置KVM,如Red Hat Enterprise Linux,或者将KVM作为独立hypervisor获取,如Red Hat Enterprise Virtualization。红帽的这两个方案都提供KVM虚拟化,但在管理、功能与实施中有重大区别。
1349 0
UNIX环境高级编程笔记之高级I/O
  本章说明了很多高级I/O功能: 非阻塞I/O——发一个I/O操作,不使其阻塞,记录锁,STREAMS机制 I/O多路转接——select和poll函数 readv和writev函数,以及存储映射I/O(mmap函数)
719 0
《UNIX环境高级编程(第3版)》——2.6 选项
选项包括了图2-5中第3列的符号以及图2-19和图2-18中的符号。如果符号常量未定义,则必须使用sysconf、pathconf或fpathconf来判断是否支持该选项。在这种情况下,这些函数的name参数前缀_POSIX必须替换为_SC或_PC。
1389 0
《UNIX环境高级编程(第3版)》——2.5 限制
UNIX系统实现定义了很多幻数和常量,其中有很多已被硬编码到程序中,或用特定的技术确定。由于大量标准化工作的努力,已有若干种可移植的方法用以确定这些幻数和具体实现定义的限制。这非常有助于改善UNIX环境下软件的可移植性。
1802 0
《UNIX环境高级编程(第3版)》——2.9 标准之间的冲突
就整体而言,这些不同的标准之间配合得相当好。因为SUS基本说明和POSIX.1是同一个东西,所以我们不对它们进行特别的说明,我们主要关注ISO C标准和POSIX.1之间的差别。它们之间的冲突并非有意,但如果出现冲突,POSIX.1服从ISO C标准。
1159 0
《UNIX环境高级编程(第3版)》——2.7 功能测试宏
如前所述,头文件定义了很多POSIX.1和XSI符号。但是除了POSIX.1和XSI定义外,大多数实现在这些头文件中也加入了它们自己的定义。如果在编译一个程序时,希望它只与POSIX的定义相关,而不与任何实现定义的常量冲突,那么就需要定义常量_POSIX_C_SOURCE。
1462 0
21117
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载