1:什么是虚拟化?
虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。
什么是云计算?
云计算是一种按量付费的模式,它的底层主要通过虚拟化技术来实现的!
云计算的服务类型:
a:IAAS 基础设施即服务
b:PAAS 平台即服务
c:SAAS 软件即服务
2:为什么要用虚拟化?
kvm: 兼容较好,性能较好! 支持内存压缩技术
qemu:最早,最慢,兼容性最强,模拟所有硬件, x86,arm,power AIX
xen: 性能最好,兼容性最查,使用专门定制的内核,
vmware ESXI商业软件: 最贵,好用
virtual box: 开源
没有虚拟化之前:
计算机的硬件配置越来越高
512G 内存,4路 8核16线程 ,12* PCI-E 1T的SSD;
ntp服务,安装多个mysql,安装多个tomcat,安装....
linux开源的,很多软件都有依赖包openssl nginx
充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。
场景1:同一台物理机运行多个php版本 php5.3(openssl,gd) php5.5 php7.2
场景2:机房的迁移,解决了硬件和系统的依赖
场景3:openstack环境,软件发布方式
场景4:开发环境和测试环境,使用虚拟化
只靠一台物理服务器,30台虚拟机
场景5:业务的快速部署
从头安装系统,安装服务,配置
克隆虚拟机,改ip,
虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖
KVM安装
1.内存不能小于4G
处理器选择虚拟化Intel VT-x/EPT 或者AMD-V/RVI(V)
2.kvm虚拟化管理软件的安装
yum install libvirt virt-install qemu-kvm -y
3.在windows上安装VNC 安装操作用的
VNC Viewer 4.exe或者TightVNC
4.启动服务并加入开机自启
systemctl start libvirtd.service
systemctl enable libvirtd.service
5.安装虚拟机,需要一个ISO镜像(如果重新安装虚拟机,需要把修改磁盘分区的名字和主机名)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos1.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
检查端口
netstat -lntup|grep 5900
使用VNC进行连接
--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 磁盘的格式
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso 使用的镜像
--network network=default 使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 图形图像使用VNC客户端进行安装
--noautoconsole
raw:10G 不支持做快照,性能好
qcow2: 支持快照
6.进行安装KVM
①磁盘分区只用分一个根分区
②KDUMP关闭 Enable kdump
③开启网卡自启动
④调整时区
7.KVM的管理命令(主配置文件在 /etc/libvirt/qemu/)
virsh list 查看运行状态的虚拟机
virsh list --all 查看所有虚拟机
virsh shutdown 主机名 关机虚拟机
virsh destroy 主机名 拔电源关机
virsh reboot 主机名 重启
virsh dumpxml web > web.xml 备份
virsh undefine 主机名 删除虚拟机
virsh define web.xml 恢复虚拟机
做迁移
mv /opt/web.qcow2 /data/web.qcow2
virsh edit web 然后修改配置文件(找到磁盘分区disk 修改磁盘分区的新位置,启动测试)
virsh domrename web web01 修改主机名(需要先关机)
virsh suspend web01 挂起虚拟机
virsh resume web01 恢复挂起(需要注意一下时间)
virsh vncdisplay web01 查看主机的端口号
virsh autostart web01 开机自启 前提systemctl enable libvirtd.service (在/etc/libvirt/qemu/autostart/ 查看有哪些主机是开机自启)
virsh autostart --disable web01 关闭开机自启
console登录
需要配置KVM虚拟主机的内核(修改完重启reboot) 先把原先的配置文件进行备份
在虚拟主机上用ip addr 查看IP 在shell上连接
grubby --update-kernel=ALL --args="console=ttyS0,115200n8" 网卡为eth的
grubby --update-kernel=ALL --args="net.ifnames=0 biosdevname=0" 网卡为ens的
virsh console web01 按两下回车登录
退出Ctrl +]
磁盘管理:
raw: 裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输 总50G 占用2G
qcow2:cow (copy on write)占用空间小,支持快照,性能比raw差一点,方便传输 总50G 占用2G
qcow2支持扩容,不支持缩容,raw支持扩容也支持缩容 (不要缩容,容易丢失数据)
qemu-img create -f qcow2 /data/centos.qcow2 10G 创建qcow2的磁盘 不加-f 默认为raw
qemu-img info /data/web.qcow2 (加磁盘的路径) 查看磁盘的信息
qemu-img resize /data/web.qcow2 20G(原来10G先在扩成20G 或者写+10G) 扩展磁盘大小
磁盘转换:raw转换为qcow2(虚拟机要关闭)
qemu-img convert -f raw -O qcow2 /data/web.raw /data/web.qcow2
原格式 目标格式 源文件 目标文件
改完之后需要修给配置文件
virsh edit web
修改前
<driver name='qemu' type='raw'/>
<source file='/data/web.raw'/>
修改后
<driver name='qemu' type='qcow2'/>
<source file='/data/web.qcow2'/>
快照管理
virsh snapshot-create-as web01(主机名) --name int_OK(快照名) 创建快照
virsh snapshot-list web01 查看快照
virsh snapshot-revert web01 --snapshotname(指定恢复快照的名称) int_OK 还原快照(注意时间)
virsh snapshot-delete web01 --snapshotname int_OK 删除快照
raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
克隆管理(尽量克隆不带快照的模板机)
1.完整克隆(必须关机或者挂起)
自动克隆
virt-clone --auto-clone -o web01 -n web02
手动
cp web01.qcow2 web02.qcow2 拷贝1的磁盘
virsh dumpxml web01 > web02.xml 拷贝web01的配置文件
修改vim web02.xml
<name>web02</name> 修给web01名字为web02
<uuid>d2b27539-ca27-4978-a1d0-264e04cd42f8</uuid> 删除uuid这行(开机自动生成)
<source file='/data/web02.qcow2'/> 修改web01磁盘目录为web02的磁盘目录
<mac address='52:54:00:70:4e:58'/> 删除mac addr的mac的地址(开机自动生成)
导入web02的配置文件(然后开机)
virsh define web02.xml
2.链接克隆
qemu-img create -f qcow2 -b web01.qcow2 web03.qcow2 拷贝1的磁盘 类型为 qcow2 以web01为引用盘
virsh dumpxml web01 > web03.xml 拷贝web01的配置文件
修改vim web02.xml
<name>web03</name> 修给web01名字为web03
<uuid>d2b27539-ca27-4978-a1d0-264e04cd42f8</uuid> 删除uuid这行(开机自动生成)
<source file='/data/web02.qcow2'/> 修改web01磁盘目录为web03的磁盘目录
<mac address='52:54:00:70:4e:58'/> 删除mac addr的mac的地址(开机自动生成)
导入web03的配置文件(然后开机)
virsh define web03.xml
最简单的链接克隆
qemu-img create -f qcow2 -b web01.qcow2 web04.qcow2 拷贝1的磁盘 类型为 qcow2
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
KVM的桥接网络
1.创建桥接网卡(只能零时添加,开机就没)
virsh iface-bridge eth0(绑定的网卡) br0(桥接网卡的名称)
取消桥接网卡
virsh iface-unbridge br0
如果命令行执行不成功可以
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"
vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.11"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
STP="on"
DELAY="0"
重新创建一个虚拟主机(前提有磁盘)
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
登录虚拟主机
virsh console web04
dhclient 获取ip地址(服务器必须是开启DHCP模式)
查看IP地址 用ssh连接
修改旧的的虚拟主机网络(先关机,修改完配置重启||开机修改 需要先关机,在开机,不能reboot)
修改前
<interface type='network'>
<mac address='52:54:00:70:4e:58'/>
<source network='default'/>
修改后
<interface type='bridge'>
<mac address='52:54:00:70:4e:58'/>
<source bridge='br0'/>
启动 virsh start web04
KVM虚拟主机在线热添加磁盘
先添加一块盘
qemu-img create -f qcow2 /data/web04_add.qcow2 10G
添加到虚拟主机上
virsh attach-disk web04(主机名) /data/web04_add.qcow2(新盘位置,必须是绝对路径) vdb(在虚拟主机上叫什么名字) (默认添加raw盘)
virsh detach-disk web04 vdb 取消挂载的盘
virsh attach-disk web04 /data/web04_add.qcow2 vdb --subdriver qcow2 正确的添加盘的格式
virsh attach-disk web04 /data/web04_add.qcow2 vdb --subdriver qcow2 --config 写到配置文件中,永久挂载(不加 --config 都是临时添加)
登录到虚拟主机
virsh console web04
fdisk -l 查看磁盘情况
mkfs.xfs /dev/vdb 格式化盘
mount /dev/vdb /mnt 挂载磁盘
如果vdb盘不够用 ,需要先扩容
umount /mnt
在服务器上再把vdb给取消挂载
virsh detach-disk web04 vdb 取消挂载的盘
qemu-img resize /data/web04_add.qcow2 10G 给磁盘添加内存
virsh attach-disk web04 /data/web04_add.qcow2 vdb --subdriver qcow2 再把vdb添加到虚拟主机上
在虚拟主机上先挂(不能直接格式化,不然数据会丢)
fdisk -l 看磁盘容量添加了没有
mount /dev/vdb /mnt 挂载
xfs_growfs /dev/vdb 更新分区表
查看数据是否丢失
根分区扩容:
1)在宿主机上关闭虚拟机并调整虚拟机磁盘大小
qemu-img resize web02.qcow2 +10G
2)虚拟机中fdisk重新分区
fdisk /dev/vda
3)重启之后,执行xfs_growfs /dev/vda1,
如果虚拟机磁盘文件系统是ext4:resize2fs /dev/vda1
KVM虚拟主机在线热添加网卡
先查看在存在的网卡类型
virsh edit web04
<model type='virtio'/>
virsh attach-interface web04 bridge br0 --model virtio --config 添加桥接网卡 添加网卡model 指定网卡类型 不加config就是临时添加
virsh attach-interface web04 network default --model virtio --config 添加net网卡
virsh detach-interface web04 bridge|network取消网卡类型 --mac 跟上mac地址 拆除网卡
KVM虚拟主机在线热添加内存
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole(内存只能添加到2048)
在虚拟主机上
free -m 查看内存
virsh setmem web04 1024M 添加内存(根据创建虚拟主机的时候设置最大添加到多少 ,不能超过最大限制)
virsh setmem web04 1024M --config 永久生效
virsh setmem web04 512M 减内存(不建议使用)
KVM虚拟主机在线热添加cpu
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole(cpu的核数最大添加到10个)
lscpu 查看CPU的核数(CPU(s))
virsh setvcpus web04 2 添加cpu的核数
virsh setvcpus web04 2 --config 添加到配置文件
如果想在原有的KVM虚拟主机上添加内存和CPU
virsh edit web04
修改前
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
修改后
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>524288</currentMemory>
<vcpu placement='static' current='4'>10</vcpu>
KVM虚拟主机的迁移
冷迁移
把配置文件和磁盘发送到另一台服务器上,另一台服务器需要有KVM的管理环境
热迁移
主机 ip地址 软件 配置要求
kvm01 10.0.0.11 kvm管理软件+nfs客户端 2G,开启虚拟化
kvm02 10.0.0.12 kvm管理软件+nfs客户端 2G,开启虚拟化
nfs01 10.0.0.31 nfs服务端 1G
1)准备两台kvm宿主机,配置桥接网络,nfs客户端
2)安装nfs服务端
3)kvm宿主机挂载nfs服务端,挂载点一定要是同一个目录
4)启动一台新虚拟机,该虚拟机磁盘文件存储在共享存储上
NFS主机上
yum install nfs-utils -y 下载nfs
vim /etc/exports 配置nfs
/data 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash)
mkdir /data 创建共享目录
systemctl restart nfs 启动
cat /var/lib/nfs/etab 查看是否启动成功
KVM01和KVM02上配置(两台主机名不能一样,需要做hosts解析)
vim /etc/hosts 做hosts解析
10.0.0.11 kvm01
10.0.0.12 kvm02
mount 10.0.0.31:/data /opt 挂载
在KVM01上创建虚拟主机并实现热迁移
cp /data/web04_add.qcow2 /opt/ 拷贝web04的磁盘文件
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web05(不能和现有的虚拟主机主机名一样) --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /opt/web04.qcow2(指定读取的磁盘) --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
virsh migrate --live --verbose web05(虚拟主机名) qemu+ssh://10.0.0.12/system --unsafe 热迁移的命令
在KVM02上查看
virsh list 查看迁移的主机有没有迁移过来
图形化热迁移(需要安装VNC客服端)
在kvm01上安装图形界面、vnc服务端和virt-manager
yum groups install "GNOME Desktop" -y
yum install tigervnc-server.x86_64 -y
yum install virt-manager -y
启动vnc服务端
vncserver :1 启动5901端口的vnc服务端
vncserver -kill :1 关闭5901端口的vnc服务端
netstat -lntup 找到Xvnc(590X)的端口
window进行连接即可
https://www.qstack.com.cn/archives/368.html 详细请查看