1. 什么是云计算?
云计算是一种按量付费的模式!云计算的底层是通过虚拟化技术来实现的!
2. 云计算的服务类型
- IAAS 基础设施即服务 虚拟机 ecs openstack
- PAAS 平台即服务 php,java docker容器
- SAAS 软件即服务 企业邮箱服务 cdn服务 rds数据库 开发+运维
3. 为什么要用云计算
小公司:10台 20w+ idc 5w + 100M 10W, 10台云主机,前期投入小,扩展灵活,风险小
大公司:闲置服务器计算资源,虚拟机,出租(超卖计算)
64G 服务器 64台1G 320台1G
国企,银行
4. 云计算的基础KVM虚拟化
-
4.1 什么是虚拟化?
虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。
-
4.2 虚拟化软件的差别
qemu 软件纯模拟全虚拟化软件,特别慢!AIX,兼容性好! xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差! redhat 5.5 xen kvm KVM(linux) 全虚拟机,它有硬件支持cpu,基于内核,而且不需要使用专门的内核 centos6 kvm 性能较好,兼容较好
-
4.3 安装kvm虚拟化管理工具
KVM:Kernel-based Virtual Machine 虚拟化管理工具 libvirt 作用:虚拟机的管理软件 libvirt: kvm,xen,qemu,lxc.... virt virt-install virt-clone 作用:虚拟机的安装工具和克隆工具 qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘 环境要求: centos 7.4 7.6 vmware 宿主机 kvm虚拟机 内存4G,cpu开启虚拟化 IP:10.0.0.11 ## 安装软件包 yum install libvirt virt-install qemu-kvm -y
-
4.4 安装一台kvm虚拟机
## 启动虚拟机管理工具 systemctl start libvirtd.service systemctl status libvirtd.service ## 创建虚拟机 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-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 参数详解: --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 --noautoconsole ## vnc连接 vnc:10.0.0.11:5900 安装系统步骤 略.... 说明: 云主机都没有swap分区
-
4.5 kvm虚拟机的virsh日常管理和配置
显示当前运行虚拟机 virsh list 显示所有虚拟机列表 virsh list --all 启动 start 关机 shutdown 重启 reboot 拔电源关机 destroy 导出配置 dumpxml 例子:virsh dumpxml centos7 >centos7-off.xml 删除 undefine 建议先destroy ,再undefine 导入配置 define 修改配置 edit(自带语法检查) 重命名 domrename (低版本不支持) 挂起 suspend 恢复 resume 查询vnc端口号 vncdisplay 控制台 登录 console 开机启动 autostart 取消开机启动autostart --disable 故障:先 执行undefine,关闭虚拟机就消失了 解决: 随意导出一个配置文件 1. virsh dumpxml xxx>kvm_centos7.xml 2. vim kvm_centos7.xml 修改name 删除uuid 修改虚拟磁盘路径 删除mac地址 3.virsh define kvm_centos7.xml Centos7控制台登录 修改内核参数 (网卡名) grubby --update-kernel=ALL --args="console=ttyS0,115200n8" reboot Centos6控制台登录 1.装系统时必须有swap分区 2.装完系统关闭swap swapoff -a vim /etc/fstab #UUID=0a798927-3f23-4235-b839-64bbe5634f55 swap swap defaults 0 0 3.添加ttyS0的许可,允许root登陆: echo "ttyS0" >> /etc/securetty 4.修改内核参数 sed -i '/\tkernel/s#.*#& console=ttyS0#g' /etc/grub.conf sed -i '/\tkernel/s#.*#& console=ttyS0#g' /boot/grub/grub.conf echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >>/etc/inittab
-
4.6 虚拟磁盘格式转换和快照管理
raw: 裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输 总50G 占用50G qcow2: cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输 总50G 占用2G
-
磁盘工具的常用命令
查看虚拟磁盘信息 qemu-img info test.qcow2 创建一块qcow2格式的虚拟硬盘 qemu-img create -f qcow2 test.qcow2 2G 调整磁盘磁盘容量 qemu-img resize test.qcow2 +20G raw转qcow2: qemu-img convert -f raw -O qcow2 oldboy.raw 1. 必须关机修改 2. 修改配置文件 3. 启动查看
-
快照管理
创建快照 virsh snapshot-create-as centos7 --name install_ok 查看快照 virsh snapshot-list centos7 还原快照 virsh snapshot-revert centos7 --snapshotname install_ok 删除快照 virsh snapshot-delete centos7 --snapshotname install_ok 说明:raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
5. kvm虚拟机克隆
-
完整克隆
自动挡: virt-clone --auto-clone -o web01 -n web02 (完整克隆) --file 可以指定路径 手动挡: qemu-img convert -f qcow2 -O qcow2 -c web01.qcow2 web03.qcow2 virsh dumpxml web01 >web02.xml vim web02.xml #修改虚拟机的名字 #删除虚拟机uuid #删除mac地址 #修改磁盘路径 virsh define web02.xml virsh start web02
-
链接克隆
生成虚拟机磁盘文件 qemu-img create -f qcow2 -b web03.qcow2 web04.qcow2 生成虚拟机的配置文件 /virsh dumpxml web01 >web03.xml vim web03.xml #修改虚拟机的名字 #删除虚拟机uuid #删除mac地址 #修改磁盘路径 导入虚拟机并进行启动测试 virsh define web03.xml virsh start web03 全自动链接克隆脚本: #!/bin/bash mubanji=$1 vm_disk_file='/opt' clone_vm=$2 #创建磁盘文件 qemu-img create -f qcow2 -b $vm_disk_file/${mubanji}.qcow2 $vm_disk_file/${clone_vm}.qcow2 #生成配置文件 virsh dumpxml ${mubanji} >kvm_${clone_vm}.xml sed -ri "s#( <name>)(.*)(</name>)#\1${clone_vm}\3#g" kvm_${clone_vm}.xml sed -i '/ <uuid>/d' kvm_${clone_vm}.xml sed -i '/<mac address=/d' kvm_${clone_vm}.xml sed -ri "s#(<source file=')(.*)('/>)#\1$vm_disk_file/${clone_vm}.qcow2\3#g" kvm_${clone_vm}.xml #导入并启动虚拟机 virsh define kvm_${clone_vm}.xml rm -fr kvm_${clone_vm}.xml virsh start ${clone_vm}
6. kvm虚拟机的桥接网络
默认的虚拟机网络是NAT模式,网段192.168.122.0/24
创建桥接网卡命令
virsh iface-bridge eth0 br0
取消桥接网卡命令
virsh iface-unbridge br0
新虚拟机使用桥接模式
默认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
桥接模式
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
问题1:
如果虚拟机获取不到ip地址:
将已有虚拟机网络修改为桥接模式
a:关机状态下修改虚拟机配置文件:
例如:virsh edit centos7
<interface type='bridge'>
<source bridge='br0'/>
b:启动虚拟机,测试虚拟机网络
如果上层没有开启dhcp,需要手动配置ip地址,IPADDR,NATMASK.GATEWAY,DNS1=180.76.76.76
7. 热添加技术
热添加硬盘、网卡、内存、cpu
-
kvm热添加硬盘
临时生效 virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2 永久生效 virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2 --config 临时剥离硬盘 virsh detach-disk web01 vdb 永久剥离硬盘 virsh detach-disk web01 vdb --config 扩容: 在虚拟机里把扩容盘的挂载目录,卸载掉 在宿主机上剥离硬盘virsh detach-disk web01 vdb 在宿主机上调整容量qemu-img resize 在宿主机上再次附加硬盘virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2 在虚拟机里再次挂载扩容盘 在虚拟机里用xfs_growfs更新扩容盘超级块信息 扩容kvm虚拟机的根分区 关机虚拟机 qemu-img resize web01.qcow2 +20G 开启虚拟机 [root@localhost ~]# fdisk /dev/vda Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-62914559, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): Using default value 62914559 Partition 1 of type Linux and of size 30 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. 重启虚拟机 xfs_growfs /dev/vda1
-
kvm虚拟机在线热添加网卡
临时热添网卡 virsh attach-interface web04 --type bridge --source br0 --model virtio 永久添加网卡 virsh attach-interface web04 --type bridge --source br0 --model virtio --config 有多个网卡需指定mac virsh detach-interface web04 --type bridge --mac 52:54:00:35:d3:71
-
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 临时热添加内存 virsh setmem web04 1024M 永久增大内存 virsh setmem web04 1024M --config 调整虚拟机内存最大值 virsh setmaxmem web04 4G
-
kvm虚拟机在线热添加cpu
装虚拟机时.指定最大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核数 virsh setvcpus web04 4 永久添加cpu核数 virsh setvcpus web04 4 --config 调整虚拟机cpu的最大值 virsh setvcpus web01 --maximum 4 --config
8. kvm虚拟机热迁移
冷迁移kvm虚拟机:配置文件,磁盘文件
链接克隆磁盘文件转换为单独的,再进行迁移
qemu-img convert -f qcow2 -O qcow2 db01.qcow2 db02.qcow2
热迁移kvm虚拟机:配置文件,nfs共享
nfs01:
yum install nfs-utils rpcbind -y
vim /etc/exports
/data 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash)
mkdir /data
systemctl start rpcbind nfs
systemctl enable rpcbind nfs
km02: kvm环境略
yum install nfs-utils rpcbind -y
showmount -e 10.0.0.31:/data
mount -t nfs 10.0.0.31:/data /opt
km01:
yum install nfs-utils rpcbind -y
showmount -e 10.0.0.31
mv /opt/* /srv
mount -t nfs 10.0.0.31:/data/ /opt/
mv /srv/* /opt
virsh migrate --live --verbose web01 qemu+ssh://10.0.0.12/system --unsafe --persistent --undefinesource
-
图形化页面热迁移