KVM 【SNAT/DNAT2种配置实现以及扁平化网络模式(flat)实现/virsh2种动态迁移实现】

-------------------------------------------------------------------------
###KVM SNAT配置过程
-------------------------------------------------------------------------
#增加一个br0网桥(不跟任何网卡绑定)
brctl addbr br0
#激活网桥
ifconfig br0 up
#给br0配置IP地址
ifconfig br0 10.0.0.1/24
 
#1.使用virsh创建两台虚拟机vm01和vm02,这两台虚拟机网卡都接到br0上
#2.ip地址分别为10.0.0.11、10.0.0.12(注意:两台虚拟机的mac不能相同)
#3.将这两台虚拟机的网关设置为10.0.0.1即br0的ip地址
 
#测试用vm1 ping 10.0.0.1可以ping通,用vm2 ping 10.0.0.1也可以ping通
#但是vm1 ping 不通vm2
#需要在宿主机中开启ipv4转发功能。编辑/etc/sysctl.conf修改内容为net.ipv4.ip_forward=1,然后执行sysctl -p使修改立即生效。
#开启后vm1和vm2即可ping通
 
#在nat表上添加SNAT转发功能即来自10.0.0.0/24的数据包且从eth0出去,将其源地址转换成192.168.50.150
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.50.150
#要实现SNAT功能,必须让filter表的FORWARD链允许转发
iptables -t filter -I FORWARD -p all -s 10.0.0.0/24 -j ACCEPT
iptables -t filter -I FORWARD -p all -d 10.0.0.0/24 -j ACCEPT
或者将filterFORWARD最后一条拒绝的链删除
iptables -D FORWARD 1
-------------------------------------------------------------------------
 
 
-------------------------------------------------------------------------
###KVM DNAT配置过程,将宿主机的8022端口映射到客户机vm1的22端口
-------------------------------------------------------------------------
#重新启动iptables,恢复iptables配置
service iptables restart
#设置宿主机iptables允许tcp8022端口通过
iptables -I INPUT -p tcp --dport 8022 -j ACCEPT
#设置nat表的PREROUTING链,将访问192.168.50.150 tcp 8022端口的数据转发到10.0.0.11的22号端口
iptables -t nat -A PREROUTING -d 192.168.50.150 -p tcp -m tcp --dport 8022 -j DNAT --to-destination 10.0.0.11:22
#要实现SNAT功能,必须让filter表的FORWARD链允许转发
iptables -t filter -I FORWARD -p all -s 10.0.0.0/24 -j ACCEPT
iptables -t filter -I FORWARD -p all -d 10.0.0.0/24 -j ACCEPT
或者将filterFORWARD最后一条拒绝的链删除
iptables -D FORWARD 1
-------------------------------------------------------------------------
 
 
-------------------------------------------------------------------------
###KVM DNAT配置过程,将宿主机的一个单独ip(如192.168.50.150)映射到客户机
#ip为10.0.0.11的vm1虚拟机上,即IP一对一映射
-------------------------------------------------------------------------
#重新启动iptables,恢复iptables配置
service iptables restart
#设置nat表的PREROUTING链,将访问192.168.50.150的转发到10.0.0.11
iptables -t nat -A PREROUTING -d 192.168.50.150 -j DNAT --to-destination 10.0.0.11
#设置nat表的POSTROUTING链,将来自10.0.0.11的数据包的源地址转换成192.168.50.150
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.11 -j SNAT --to-source 192.168.50.150
#要实现SNAT功能,必须让filter表的FORWARD链允许转发
iptables -t filter -I FORWARD -p all -s 10.0.0.0/24 -j ACCEPT
iptables -t filter -I FORWARD -p all -d 10.0.0.0/24 -j ACCEPT
或者将filterFORWARD最后一条拒绝的链删除
iptables -D FORWARD 1
-------------------------------------------------------------------------
 
 
-------------------------------------------------------------------------
###KVM 扁平的网络模式(flat)配置过程,即将虚拟机分配一个内网ip一个外网ip
-------------------------------------------------------------------------
#在宿主机上配置两个网卡eth0和eth1,eth0作为外网eth1作为内网
#如果是使用的是vmware workstation虚拟出的宿主机,eth0选用NAT网络eth1选用host-only网络
#将eth0不设置IP,eth1设置ip为192.168.80.150
#创建两个网桥br0和br1,将br1与eth0连接到一起
#使用virsh的iface-bridge命令非常方便,创建br1的同时再与eth0连接
iface-bridge eth0 br1
#注意:上面的命令有可能失败,因为如果安装了图形桌面的CentOS,NetworkManager接管网络,
#需要将NetworkManager停掉,并重新启动network服务来接管网络服务
chkconfig NetworkManager off
service NetworkManager stop
service network restart
#使用virsh创建虚拟机,在其配置文件中有两个网卡,注意mac地址要唯一
<interface type="bridge">
<mac address='06:64:12:00:00:54'/>
<!--当前主机网桥的名称-->
<source bridge="br0" />
<model type='virtio'/>
</interface>
<interface type="bridge">
<mac address='06:64:12:00:00:55'/>
<!--当前主机网桥的名称-->
<source bridge="br1" />
<model type='virtio'/>
</interface>
#在客户机中设置eth0的ip为192.168.50.200/24,网关为192.168.50.2
#在客户机中设置eth1的ip为10.0.0.11/24,不设置网关
-------------------------------------------------------------------------
 
virsh
两种模式:交换模式、非交互模式
suspend
resume
dumpxml
 
KVM平台以存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录、通过远端磁盘阵列(iSCSINFS)分配过来磁盘或目录,当然也支持各类分布式文件系统。
存储池(Storage pools)是放置虚拟机的存储位置,可以是本地的,也可以是网络存储,具体的虚拟机实例放置在卷(Volume)上。
KVM创建的存储池可以理解为一种映射关系,即将某一块挂接至宿主机器上的存储空间形成可被KVM使用的逻辑存储池,以方便虚拟主机的管理。
 
定义一个存储池
pool-define-as images-pool dir - - - - /cloud/images/pool
查看已定义的存储池
pool-list --all
建立基于文件夹的存储池
pool-build images-pool
启用存储池
pool-start images-pool
设置存储池自动运行
pool-autostart images-pool
查看存储池信息
pool-info images-pool
xml格式显示存储池信息
pool-dumpxml images-pool
 
通过XML创建一个存储池
先创建一个test-pool.xml
<pool type='dir'>
<name>test-pool</name>
<source>
</source>
<target>
<path>/cloud/imgs</path>
<permissions>
<mode>0755</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</pool>
 
pool-define test-pool.xml
pool-build test-pool
pool-start test-pool
pool-dumpxml test-pool
 
创建卷
vol-create-as images-pool billstudy-centos.img 8G --format qcow2
查看存储池里面的卷信息
vol-list images-pool
查看某个卷的信息
vol-info billstudy-centos.img images-pool
更详细卷的信息
vol-dumpxml billstudy-centos.img images-pool
 
 
关于KVM的快照,如果没有快照的话,虚拟机也就失去了很大的作用。
创建快照
snapshot-create-as --domain vm03 --name 2015-02-19 --description "mv03 snap"
查看快照
snapshot-list vm03
查看快照配置
snapshot-current vm03
回复快照位置
snapshot-revert vm03 2015-02-19
删除快照
snapshot-delete vm03 2015-02-19
获取帮助
help snapshot
 
 
QEMU monitorQEMU与用户交互的一种控制台,一般用于为QEMU模拟器提供较为复杂的功能,
 
QEMU monitor的切换
"Ctrl + Alt + 2" --> QEMU monitor状态
"Ctrl + Alt + 1" --> 客户机标准显示窗口
 
 
查看帮助信息
help/? [cmd]
help savevm ? savevm
 
 
显示系统命令状态:info
 
查看QEMU的版本信息
info versions
查看当前QEMU是否有KVM的支持
info kvm
info name
info status
查看客户机各个vCPU的信息
info cpus
查看块设备信息,如硬盘、软盘、光驱等
info block
查看客户机的网络配置信息
info network
显示当前系统中已保存的客户机快照信息
info snapshots
查看当前客户机的迁移状态
info migrate
显示当前客户机的VNC状态
info vnc
查看QEMU monitor中命令执行的历史
info history
 
 
创建快照
savevm snap20150406
恢复快照
loadvm snap20150406
删除快照
delvm snap20150406
 
 
 
-------------------------------------------------------------------------
###虚拟机动态迁移
-------------------------------------------------------------------------
安装NFS并使用NFS网络存储
 
动态迁移:将客户机从源宿主机 -> 目的宿主机
注意:都要挂载NFS
1.在源宿主机上挂载NFS
2.在源宿主机上启动虚拟机
3.在目的宿主机上挂载NFS
4.在目的宿主机上启动虚拟机
5.关闭目的宿主机的防火墙或开启相应端口
/usr/libexec/qemu-kvm -m 4096 -smp 1 -incoming tcp:0:8888 /mnt/storage/centos.qcow2 -vnc :1 &
-incoming 这个参数使qemu-kvm进程进入到迁移监听模式
tcp:0:8888 这个参数表示在8888端口上建立一个TCP Socket连接用于接收来自源宿主机动态迁移的内容,"0"表示允许来自任何主机的连接
5.在源宿主机上切换到QEMU monitor,然后执行迁移命令
migrate tcp:192.168.50.160:8888
6.查看迁移结果
 
使用virsh进行热迁移
migrate centos-nfs --live qemu+ssh://192.168.50.160/system --unsafe
#出现错误1
error: internal error Attempt to migrate guest to the same host 564d46b4-6d6b-2a13-3f81-bb970716d517
sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\"" /etc/libvirt/libvirtd.conf
#出现错误2
error: Unable to resolve address 'kvm02.billstudy.com' service '49152': No address associated with hostname
vi /etc/hosts
192.168.50.150 kvm01.billstudy.com
192.168.50.160 kvm02.billstudy.com

Bill

赶紧打开电脑 写两行代码压压惊 ~

发表评论

电子邮件地址不会被公开。 必填项已用*标注