您的位置:首页 > 大数据 > 云计算

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

2016-07-20 01:06 756 查看
背景:
前篇在讨论完云计算后,本次我们来讨论实现云计算的基础--->虚拟化技术,虚拟化官方解释,
是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。




分类和业务场景选择:

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. 后者快照,备份,回复容易





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




下面正式开始实现虚拟化
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




修改完成后查看网卡名称



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





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




[#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文件
修改网络配置


修改为网桥


重启虚拟机

[#33#root@kvm ~]#virsh reboot CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 is being rebooted


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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 服务器 计算机