一. 云计算
(一). 虚拟化
基于内核的虚拟技术.通过模拟硬件,并在上面跑操作系统.
#linux虚拟化软件:
#qemu 软件纯模拟全虚拟化软件,特别慢!AIX,兼容性好!
#xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差! redhat 5.5 xen kvm
#KVM(linux) 全虚拟机,它有硬件支持cpu,基于内核,而且不需要使用专门的内核 centos6 kvm
#性能较好,兼容较好
#vmware workstations: 图形界面
#virtual box: 图形界面 Oracle
(二). KVM安装
KVM全称: **Kernel-based Virtual Machine **大多数云服务器都是KVM做的虚拟化.可以通过lscpu可看到.内存压缩技术,可以起更多的云主机.所以用KVM.云主机都不要swap.
云主机一旦用swap会非常卡 云主机如果在装机的时候拔电源,会找不到系统镜像文件.从而失败.只有删除再来一次.
参数说明–virt-type kvm虚拟化的类型(qemu)–os-type=linux系统类型–os-variant rhel7系统版本–name centos7虚拟机的名字–memory 1024虚拟机的内存–vcpus 1虚拟cpu的核数–disk /opt/centos2.raw,format=raw,size=10硬盘文件所在的位置及信息.cetnos2为磁盘名字.–cdrom /opt/CentOS-7-x86_64-DVD-1708.iso系统镜像文件–network network=default使用默认NAT的网络–graphics vnc,listen=0.0.0.0不带显示器,所有要借助VNC作为服务端.–noautoconsole可有可无.
#服务器至少4G内存,且CPU要有KVM模块
lsmod|grep kvm
kvm_intel 183621 0
kvm 586948 1 kvm_intel
irqbypass 13503 1 kvm
#安装软件
yum install libvirt virt-install qemu-kvm -y
systemctl start libvirtd.service;systemctl enable libvirtd.service
#在windows上安装VNC-Viewer.VNC-Viewer是一个远程的桌面管理软件支持VNC协议.类似向日葵.因为linux图形界面比较差,装VNC就是借助它来装系统.
#先把.iso镜像文件放在/opt下.然后构建虚拟机.
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
#成功后,会启一个5900端口.然后通过VNC输入服务器的IP+5900就可以看到现象,虚拟出来一个云主机.然后过程就是装系统的过程.过程会比较慢.
(三). KVM的常用命令
生成环境中一定要备份虚拟机的配置文件.
virsh list --all #显示虚拟机的列表,--all会显示状态.
virsh start [虚拟机名字] #启动虚拟机.启动之后就可以通过VNC连接.
virsh shutdown [name] #重启,虚拟机里面必须有系统.
virsh destroy [name] #直接给这台云主机拔电源.
virsh reboot [name] #重启,虚拟机里面必须有系统.
virsh dumpxml centos7 >centos7-off.xml #导出这台虚拟机的配置文件.磁盘文件在构建虚拟机命令的时候所在的路径.虚拟机的磁盘文件和配置文件,只要有这两个就可以将虚拟机进行宿主机之间的迁移.
virsh undefine [name] #如果要强删,先destroy,然后在undefine.undefine实质上是删除的虚拟机的配置文件.yum安装的虚拟机配置文件在/etc/libvirt/qemu/下.
virsh define [虚拟机配置文件] #给虚拟机导入配置.
virsh edit littlefeet.xml #用edit修改配置文件.有语法检查功能.不要直接vim
virsh domrename web01 db01 #改虚拟机的名字,前提是要关机.低版本不能使用.
virsh suspend [name] #挂起
virsh resume [name] #恢复
virsh vncdisplay [name] #显示虚拟机对应的VNC的端口号.查出来的端口号,可以只用这个号端口号登录VNC.
virsh autostart [name] #将虚拟机标记为开机自启.其实原理就在/etc/libvirt/qemu/autostart/目录下创建了个软连接.
virsh autostart --disable [name] #将虚拟机取消标记为开机自启.
virsh console [name] #进入虚拟机的控制台界面.类似于进入VM的界面.ctrl+]才能退出来.进去控制台会卡主,除了退出以外没法进行其他操作.要进行其他操作就需要配置命令行.改内核文件.
#改内核文件.让控制台可以操作.KVM虚拟机只要起来是可以通过远程连接工具连接的.先备份内核文件. /boot/grub2/grub.cfg
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
#改完之后rebbot虚拟机生效.然后就和登录VM一样了.进入console界面.(要敲和回车哦)
(四). KVM的磁盘格式转换和快照管理
KVM支持联众磁盘格式
raw #也叫裸格式,有些高清的数码相机拍出来的就是raw格式.
占用空间比较大,不支持快照功能,不方便传输 ,性能较好,比如总50G,那就占用50G空间. qcow2 #qemu cow(copy on write).
占用空间小,支持快照,性能比raw差一点,方便传输 ,弹性使用,比如总50G 占用2G.更适合传输.
#用qcow2构建虚拟机
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7.2-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
1. 磁盘格式常用命令
qemu-img info littlefeet.raw #查看littlefeet.raw的磁盘类型,如果是qcow2的还会看到快照等信息.
qemu-img create littlefeet.raw 10G #创建一块磁盘,并给10G的空间.默认是创建的是raw格式的硬盘.qcow2类型的硬盘要加 -f (format)
qemu-img create -f qcow2 littlefeet.qcow2 10G #创建qcow2的硬盘.并给10G空间.
qemu-img resize jing.qcow2 +10G #增加10G的存储 或者直接后面接 20G,表示总共存储为20G
qemu-img convert -f raw -O qcow2 /opt/littlefeet.raw /opt/littlefeet.qcow2 #convert转换格式,将rwq转换为qcow2格式.
#转换格式需要先关机,然后virsh edit centos7.将下面的两个改为qcow2
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/> #就这两行,改为qcow2,以前是raw.
<source file='/data/centos2.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
2. 快照管理
#创建快照,只有qcow2的可以创建快照.
virsh snapshot-create-as web1 --name nginx #snapshot-create-as 创建名字为nginx的快照.
virsh snapshot-list web1 #查看快照列表
virsh snapshot-revert web1 --snapshotname 1516574134 #还原快照
virsh snapshot-delete web1 --snapshotname 1516636570 #删除快照
qemu-img snapshot -d nginx web1.qcow2 #不彻底删除快照.删除快照名为nginx的,镜像的磁盘名为web1.qcow2.但是这样不是彻底删除,生成禁用.
(五). 克隆
1. 自动克隆
#自动克隆
virt-clone --auto-clone -o web01 -n web02 #用web01自动克隆web02,克隆的文件会放在同级目录下.
#手动克隆,拷贝的时候里面不能带快照.
cp centos2-clone.qcow2 web02.qcow2 #有快照CP之后起不来,在CP前删掉快照.
virsh dumpxml web01 >web02.xml
vim web02.xml
#修改虚拟机的名字,删除虚拟机uuid,删除mac地址,删除mac后,系统会生成新的,修改磁盘路径
virsh define web02.xml #将修改后的虚拟机配置文件导入.
virsh start web02
2. 链接克隆
官网没有命令支持自动链接克隆.只有写脚本.
####生成磁盘文件
#create -f 创建一个qcow2硬盘类型的文件,-b 基于web01.qcow2为模板,创建的链接硬盘格式名为web03.qcow2
qemu-img create -f qcow2 -b web01.qcow2 web03.qcow2
####生成配置文件
virsh dumpxml web01 >web03.xml
vim web03.xml
#修改虚拟机的名字
<name>web03</name>
#删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
#删除mac地址
<mac address='52:54:00:4e:5b:89'/>
#修改磁盘路径
<source file='/opt/web03.qcow2'/>
#导入文件,并启动.
virsh define web03.xml
virsh start web03
自动链接脚本
cat link_clone.sh
#!/bin/bash
old_vm=$1
new_vm=$2
#1.生成虚拟机磁盘文件
old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'`
disk_tmp=`dirname $old_disk`
qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2
#2.生成虚拟机的配置文件
virsh dumpxml $old_vm >/tmp/${new_vm}.xml
#修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml
#3.导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}
(六). KVM虚拟机的桥接网络
#查看网卡状态
brctl show
#创建桥接网卡命令
virsh iface-bridge eth0 br0
#取消桥接网卡命令
virsh iface-unbridge br0
#构建虚拟机使用桥接模式.DHCP要打开.或者网卡改为静态IP.etho0中的改BOOTPROTO="static"
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
#构建虚拟机使用NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
1. 将现有虚拟机改为桥接模式
#改虚拟机的配置文件.然后在启动,记得改静态IP
<interface type='bridge'>
<source bridge='br0'/>
转载请注明原文地址:https://ipadbbs.8miu.com/read-50327.html