一:kvm安装
两台服务器
192.168.115.18 192.168.115.19
0.修改物理服务器时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime yum install ntpdate -y echo "*/5 * * * * root ntpdate cn.pool.ntp.org" >> /etc/crontab && cat /etc/crontab service crond stop && service crond start
1.修改主机名
echo "192.168.1.154 kvm-node154.com kvm-node154" >>/etc/hosts echo "192.168.1.155 kvm-node155.com kvm-node155" >>/etc/hosts cat /etc/hosts
2.修改内核模式(兼容内核)
sed -i "s/default=0/default=1/g" /boot/grub/grub.conf && cat /boot/grub/grub.conf
3.关闭SELINUX
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config && cat /etc/selinux/config
4.关闭防火墙和NetworkManager
chkconfig iptables off chkconfig ip6tables off chkconfig NetworkManager off
5.重启
yum update -y reboot
6.重启完毕后,检测是否支持虚拟化
cat /proc/cpuinfo | grep -E "vmx|svm" --color=always
7.安装kvm虚拟化所需要的模块和工具
yum install kvm python-virtinst libvirt tunctl bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v libguestfs-tools -y
8.配置libvirt客户端服务常用的远程连接别名
vi /etc/libvirt/libvirt.conf uri_aliases = [ "kvm154=qemu+ssh://[email protected]/system", "kvm155=qemu+ssh://[email protected]/system", ]
9.启动libvirtd守护进程进行客户端登录测试
service libvirtd start virsh -c kvm154 virsh -c kvm155
10.配置libvirtd服务端,关闭TLS安装连接,打开TCP连接,设置TCP监听端口,TCP连接不适用认证授权的方式,设置socket的保存位置.
cp /etc/libvirt/libvirtd.conf /etc/libvirt/libvirtd.conf_$(date +%F)
cat >> /etc/libvirt/libvirtd.conf << EOF listen_tls = 0 listen_tcp = 1 tcp_port = "16666" unix_sock_dir = "/var/run/libvirt" auth_tcp = "none" EOF
service libvirtd stop && service libvirtd start
11.使libvirtd关闭TLS和打开TCP功能生效,两种方式
方法一: sed -i 's/#LIBVIRTD_ARGS="--listen"/LIBVIRTD_ARGS="--listen"/g' /etc/sysconfig/libvirtd /etc/init.d/libvirtd restart netstat -tulnp | grep 16666
方法二: libvirtd --listen -d 或者 libvirtd -l -d
12.配置vnc监听地址,默认为127.0.0.1,更改为0.0.0.0,这样做的目的是在创建vm虚拟机时.就不需要指定--vnclisten 0.0.0.0
sed -i 's/#vnc_listen = "0.0.0.0"/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf cat /etc/libvirt/qemu.conf | more
13.查看kvm模块是否正常加载
lsmod | grep kvm
14.查看版本
virsh -version /usr/libexec/qemu-kvm -version
15.关闭NetworkManager网络管理服务器
chkconfig NetworkManager off service NetworkManager stop service NetworkManager status
16.配置br0网卡
cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-br0
eth0配置如下:
[root@kvm-node154 network-scripts]# cat ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:57:87:7F TYPE=Ethernet BRIDGE=br0 UUID=14fbc589-a209-4b37-acd5-60ef51214cdb ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none
br0配置如下:
[root@kvm-node154 network-scripts]# cat ifcfg-br0 DEVICE=br0 HWADDR=00:0C:29:57:87:7F TYPE=Bridge UUID=14fbc589-a209-4b37-acd5-60ef51214cdb ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.1.154 NETMASK=255.255.255.0 GATEWAY=192.168.1.1
17.查看网桥
brctl show
二:kvm创建虚拟机
1.使用virt-install工具创建虚拟机,它会调用qemu-kvm
具体参数:
--name 虚拟机名称 --ram 分配内存,取值值不带单位,直接为数值,默认单位MB --vcpus 分配的cpu个数,不能查过物理服务器总的核心数 --disk 虚拟机的磁盘位置,后面接 path=dir path:磁盘镜像存储的位置. device:设备类型 ,有cdrom ,disk,floppy bus:磁盘类型:ide,scsi,usb,virtio,xen perms:访问权限:rw,ro,sh(共享可读写),默认rw size:磁盘大小,单位GB format:磁盘格式.raw,qcow2,vmdk等 sparse:磁盘使用稀疏格式,即不立即分配指定大小的空间 --network 使用桥接模式 bridge:连接到指定桥接网卡 model:网卡设备型号.e1000,rtl8139,virtio mac:固定mac地址.无论何种方式.对于kvm来说,前三段必须是54:52:00 --cdrom 指定iso镜像的位置 --vnc 指定启用vnc服务 --vncport vnc服务的开放端口,供远程连接使用 --vnclisten 默认为127.0.0.1,只运行自身访问自身,一般改为0.0.0.0 --os-type Linux或者Windows或者unix --os-variant 系统型号.包括 win7|vista|winxp64|winxp|win2k8|win2k3|freebsd8|generic|debiansqueeze|debianlenny|fedora16|fedora15|fedora14|rhel6|rhel5.4|rhel4|sles11|sles10| --accelerate 加速
2.上传iso镜像,到指定目录,创建镜像存储位置
mkdir /iso mkdir /vm
3.创建qcow2的格式的磁盘,必须在创建虚拟机之前先创建磁盘镜像
qemu-img create -f qcow2 /vm/api1-qcow2.img 8G virt-install --name api1 --ram 512 --vcpus 1 --disk /vm/api1-qcow2.img,size=8,device=disk,format=qcow2,bus=virtio,perms=rw --network bridge=br0,model=virtio --cdrom /iso/CentOS-6.6-x86_64-minimal.iso --vnc --vncport 5911 --vnclisten=0.0.0.0 --os-type=linux --os-variant=rhel6 --accelerate
4.Tigervnc连接
IP:5911 ,安装过程,完成安装.重启guestOS,重启完成之后,必须需要手动用virsh start Name命令手动去打开guestOS客户机.
5.创建raw(虚拟机默认磁盘格式)的磁盘.可以直接创建,不需要先创建磁盘镜像.
virt-install --name api2 --ram512 --vcpus 1 --disk /vm/api2-raw.img,size=8,device=disk,format=raw,bus=virtio,perms=rw --network bridge=br0,model=virtio --cdrom /iso/CentOS-6.6-x86_64-minimal.iso --vnc --vncport=5912 --vnclisten=0.0.0.0 --os-tyep=linux --os-variant=rhel6 --acclerate
6.Tigervnc连接
IP:5912 ,安装过程,完成安装.重启guestOS.必须需要手动用virsh start Name命令手动去打开guestOS客户机.
7.虚拟机安装之后,不能使用virsh shutdown Name,需要在虚拟机中安装acpid服务
tigervnc登录到虚拟机,配置eth0的ip地址,确保可以访问外网,然后
yum install -y acpid chkconfig acpid on chkconfig --list | grep acpid reboot
8.虚拟机系统安装之后,配置虚拟机控制台登录配置,可以通过virsh console Name登录
(1)
echo "ttyS0" >> /etc/securetty && cat /etc/securetty
(2)vi /etc/grub.conf
rhgb quiet后面添加:console=ttyS0
(3)
echo "SO:12345:respawn:/sbin/agetty ttyS0 115200" >> /etc/inittab cat /etc/inittab
(4)
virsh shutdown Name sleep 10 && virsh start Name
(5)
virsh console Name 注意虚拟机启动后,隔10s中才有正常启动信息显示.不必紧张.
9.配置VM时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
vi /etc/libvirt/qemu/api2.xml <clock offset='utc'> ===> <clock offset='localtime'>
yum install ntpdate -y ntpdate cn.pool.ntp.org echo "*/5 * * * * root ntpdate cn.pool.ntp.org" >> /etc/crontab service crond restart
三:kvm虚拟机本机克隆
必须需要说明的是.源客户机的状态必须处于关机或者暂停状态.本机克隆使用virt-clone命令进行.会自动生成镜像文件和XML配置文件.
1.本机克隆案例:
物理机IP地址:192.168.1.154 虚拟机名称: api1 虚拟机镜像: /vm/api1-qcow2.img
(1)停止api1 virsh shutdown api1 && sleep 30 && exit 0 (2)开始克隆: virt-clone -o api1 -n api2 -f /vm/api2-qcow2.img (3)启动api2,修改主机名和IP地址 virsh console api2 vi /etc/sysconfig/network HOSTNAME=vm-api2 GATEWAY=192.168.1.1
(4)网卡报错:
Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization. [FAILED]
(5)解决,编辑70-persistent-net.rules
cd /etc/udev/rules.d/ && vi 70-persisten-net.rules
将eth0的网卡的信息注释,将eth1的网卡name改为eth0.先记录下eth1的MAC信息.然后将eth1的mac地址粘贴到ifcfg-eth0中的mac地址.
如图:
(5)编辑api2的XML配置文件
virsh edit api2.xml 更改VNC的端口 port="5912"
四:kvm虚拟机磁盘快照
注意:
只有磁盘格式为qcow2的磁盘才支持磁盘快照和磁盘动态扩展.
1.基本命令
snapshot-list Domain snapshot-create-as Domain shotName snapshot-revert Domain shotName snapshot-delete Domain shotName
2.注意
创建快照必须保证虚拟机是开启的状态.恢复快照必须保证虚拟机是关机状态.
3.例子
Domain Name: api2 shutdown api2 snapshot-create-as api2 api2_httpd snapshot-list api2 snapshot-revert api2 api2_httpd snapshot_delete api2 api2_httpd