KVM虚拟化搭建及其KVM中LVM扩容
前言:
公司项目方最近有两台物理服务器系统分别为CentOS 7.2。需要部署KVM虚拟化,第一台服务器A需要虚拟出三台虚拟机(均为CentOS 7.2系统),服务器B上需要虚拟出三台CentOS 7.2 系统和两台windows server2012 系统。其中六台CentOS 7.2 虚拟机需要部署我们自己的平台,两台windows分别部署客户的平台。下面来为大家说一下KVM虚拟化的搭建,以及创建虚拟机的两种办法,及其操作使用。
KVM小课补:
今天这一章内容是利用linux内核的一个模块kvm,并使用一些辅助工具来搭建虚拟机,完成和esxi类似的操作(vsphere虚拟化平台,底层需要ESXI,使用vcenter管理esxi,从而实现了虚拟机的迁移,备份,高可用等操作,但是安装成本很高,需要购买正版。),实现linux虚拟化。KVM直接整合到了linux内核,因此在性能、安全性、兼容性、稳定性上都有好的表现。我们都知道,使用虚拟化技术可以为公司节约成本,可以在一台物理机上运行多个系统,充分利用物理机的资源。
搭建KVM虚拟化:
准备环境:
建议使用一台物理机来配置kvm环境,需要cpu支持intel VT等硬件虚拟化功能。
检查虚拟化:
cat /proc/cpuinfo | grep vmx
确认有结果输出。则表示该机器支持或已配置intel VT。vmx(intel)或svm(AMD) 支持虚拟技术。
配置yum源:
#首先需要把你要使用CentOS系统上传到服务器。
#挂载centos镜像
mount -o loop CentOS-7-x86_64-Everything-1511.iso /mnt/cdrom
#修改yum仓库地址
cat yum.repo.d/my.repo
[base]
name=mycentos
baseurl=file:///mnt/cdrom
gpgckeck=0
enabled=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7
安装软件包:
yum install libvirt qemu-kvm virt-install bridge-utils qemu-img virt-manager libguestfs
启动服务,并设置为开机自启动:
systemctl start libvirtd
理论: 设置kvm网络
在libvirt中运行kvm网络有两种方法:nat和bridge,默认是nat(用户模式),用户模式可以访问外网,但是无法从外部访问虚拟机网络,所以用的不是很多,我们一般做的服务器都需要外网的访问,所有我们多数情况采用桥接模式(bridge),这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机。
调整网络配置,建立虚拟网桥。配置之前,需要先备份一下,要修改的文件。
配置网桥br0,让eth0或者em1桥接到br0上。
#cat ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HOTPLUG=yes
TYPE=Ethernet
PEERDNS=no
BRIDGE=br0
NM_CONTROLLED=no
#cat ifcfg-br0
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
TYPE=Bridge
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
GATEWAY=xxx.xxx.xxx.xxx
PEERDNS=no
DELAY=0
STP=yes
NM_CONTROLLED=no
下面就是创建虚拟机:
有两种方法:
第一种:创建虚拟机
#准备虚拟机ISO文件
/tmp/CentOS-7-x86_64-Everything.iso
#创建一块虚拟磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/server-1.qcow2 750G
#启动镜像安装虚拟机
virt-install --virt-type kvm --name server-1 --ram 16384 --vcpu 8 \
--disk /var/lib/libvirt/images/server-1.qcow2,format=qcow2 \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--cdrom=/tmp/CentOS-7-x86_64-Everything.iso
#使用vnc登入虚拟机,安装系统。
#系统安装完成之后,需要更改虚拟机的配置
virsh edit server-1
<memory unit=‘KiB‘>33554432</memory> #在条件允许的情况下,一般建议将内存提升至32G
<currentMemory unit=‘KiB‘>33554432</currentMemory>
<vcpu placement=‘static‘>16</vcpu> #在条件允许的情况下,一般建议将CPU提升至16核
<interface type=‘bridge‘> #修改网桥模式,在type=‘bridge‘修改成网桥
<mac address=‘52:54:00:17:fa:65‘/>
<source bridge=‘br0‘/> #修改网桥模式,在source brige=‘br0‘修改成br0网桥
<model type=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
</interface>
###使用vnc-server连接宿主机5900端口,然后安装系统。
列出所有虚拟机
virsh list --all
查看虚机vnc端口
virsh vncdisplay server-1
:0
0则表示5900+0就是虚机的vnc端口
安装完毕后关闭虚机
第二种方法是建立在第一种发放之上的。将现有的虚拟机server-1.xml和server-1.qcow2文件,拷贝几份(自己需要几个虚拟机拷贝几份),拷贝之前需要关闭虚拟机,使用命令如下:
virsh shutdown server-1 关闭虚拟机
virsh undefine server-1 把server-1.xml文件undefine下来
修改sever-1.xml文件,修改如下:
需要修改name 、uuid、 memory、vcpu、mac地址(因为是cp的文件,所以必须修改mac地址,不修改会造成虚拟机之间无法通信)等等。修改文件必须虚拟机关机并undefine下来,不然修改不生效。
修改完成后,在使用virsh define server-1.xml ,并 virsh start server-1 启动。
使用virsh list --all看一下虚拟机的状态。如果是running状态表示已经启动了。
以上是两种方法:第二种建议要细心,思路清晰,不然请选择第一种方法。
创建Windows虚机
准备文件:
1.准备iso镜像文件
/tmp/windows2008R2-x64.iso
2.准备virtio驱动iso
创建虚拟磁盘
# qemu-img create -f raw /tmp/win1.raw 40G
启动虚拟
# virt-install --name win1 --ram 2048 --vcpus 2 \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--disk path=/tmp/win1.raw,device=disk,bus=virtio \
--cdrom=/tmp/virtio-win.iso \
--disk path=/tmp/windows2012-x64.iso,device=cdrom \
--os-type windows --os-variant win1
###使用vnc-server连接宿主机5900端口,然后安装系统。
列出所有虚拟机
virsh list --all
查看虚机vnc端口
virsh vncdisplay server-1
:0
0则表示5900+0就是虚机的vnc端口
安装系统过程中
默认情况下Windows检测不到可用的安装磁盘。 需要加载驱动,选择光驱的viostor目录,按照系统版本加载相应的驱动
如手动安装加载磁盘驱动:浏览 E:\viostor\xxx\xxxx\viostor.inf
完成系统安装,使用Administrator登录系统。
注意:
由于服务器在机房,我远程连接,和机房服务器不在一个网,需要使用跳板机连接物理服务器来部署KVM的,要想使用VNC客户端工具,需要在物理服务器上开启VNC proxy功能,命令如下:
iptables -I INPUT 1 -p tcp --dport 5900:5910 -j ACCEPT
使用VNC连接虚拟机修改完IP地址等信息后,需要立刻关闭VNC的5900端口,防止被黑客扫描攻击。
iptables -D INPUT -p tcp --ports 5900:5990 -j ACCEPT
查看防火墙规则:
iptables -L -n
KVM上虚拟机LVM扩容流程及其命令:
逻辑卷扩容根分区的方法:
1:首先新加一块磁盘,连接至主机。开机,进入系统。使用root登录,运行fdisk,将新加的磁盘分区(此处省略)。我们这里假设将全部磁盘容量只分一个区,分区为/dev/sdb1;
2:创建pv: pvcreate /dev/sdb1
3:扩展VG:vgextend centos /dev/sdb1
4:运行vgdisplay ,查看扩展后的VG,如果显示容量增加,表示,VG扩展成功;
5:扩展LV: lvextend -L + n(M,或G) /dev/mapper/centos-root
6 xfs_growfs /dev/VolGroup/lv_root
修改文件位置:
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/>
<source file=‘/data/vm/huge.img‘/>
<target dev=‘vdb‘ bus=‘virtio‘/>
</disk>
create一个:
qemu-img create -f qcow2 /data/vm/huge.img 500G
简单报错分析:
1、几台KVM服务器上虚拟机无法通信,检查方法:
1)检查一下虚拟机本身的网卡信息,IP是否正确、是否MAC地址冲突、等等。
2)检查是否有默认路由,创建默认路由命令格式如下:
ip r add default 【xxxxip地址】 via dev br0
3)检查网卡是否为桥接模式,使用命令brctl show查看,是否桥接是错误
例如:KVM配置的br0桥接,使用命令brctl show查看,是否虚拟机使用的是br0 或者virbr0模式。
如果在NAT方式下,会使用virbr0进行通信,以允许虚拟机访问网络服务。
目前我们环境是桥接,所有没有作用。查看和禁用:
# virsh net-list
# virsh net-destroy default
# virsh net-undefine default
# service libvirtd restart
或者
#ifconfig virbr0 down
#brctl delbr virbr0
4)如网络不通,可以查看是否为混杂模式,命令如下:
设置混杂模式命令:
ifconfig 【网卡名称】 promisc
使用ifconfig看看是否设置为混杂模式。
KVM虚拟化常用命令操作汇总:
virsh list --all 查看虚拟机状态
virsh start kvm01 开机
virsh shutdown kvm01 关机(虚拟机需开启acpid服务)
virsh destroy kvm01 强制开机
virsh suspend kvm01 挂起虚拟机
virsh resume kvm01 恢复挂起的虚拟机
virsh snapshot-create kvm01 建虚拟机快照(建快照镜像格式要为qcow2格式)
virsh snapshot-list kvm01 查看虚拟机快照
virsh snapshot-revert kvm01 1489386302 恢复虚拟机快照
virsh edit kvm01 编辑配置文件
virsh autostart kvm01 设置物理机开机自动启动虚拟机
virsh dumpxml kvm01 > kvm01.xml 导出虚拟机配置文件
/etc/libvirt/qemu/ 虚拟机配置文件默认目录
virsh undefine kvm01 删除一个虚拟机(会一起删除配置文件,镜像不删除)
virsh define /etc/libvirt/qemu/kvm01.xml 重新定义一个虚拟机
virt-clone -o kvm01 -n kvm02 -f /var/lib/libvirt/images/kvm02.img 克隆虚拟机(/etc/udev/rules.d/70-persistent-net.rules启动后删除)
qemu-img info kvm01 查看虚拟机镜像格式
qemu-img convert -f raw -O qcow2 kvm01.img kvm01.qcow2 转换虚拟机镜像格式
qemu-img create -f qcow2 /var/lib/libvirt/images/kvm01-1.img 20G 新建虚拟机镜像磁盘
virsh attach-disk kvm01 /var/lib/libvirt/images/kvm01-1.img vdb --cache=none --subdriver=qcow2 在线添加虚拟机镜像硬盘
本文出自 “卢春宁” 博客,谢绝转载!
原文地址:http://luchunning.blog.51cto.com/12092606/1959382