CentOS 6.5 安装部署iSCSi共享存储

一、前言

  1、什么是iSCSI?

    iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。

    iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface)。
Internet 小型计算机系统接口(iSCSI)是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。
    SCSI 结构基于客户/服务器模式,其通常应用环境是:设备互相靠近,并且这些设备由 SCSI 总线连接。iSCSI 的主要功能是在 TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。此外,iSCSI 提供了在 IP 网络封装 SCSI 命令,且运行在 TCP 上。

 

  2、环境介绍:

 

    本次部署由3台物理机实现,具体信息分别为以下:

      a、iSCSI_Server:192.168.30.133

      b、iSCSI_Client1:192.168.30.131

      c、iSCSI_Client2:192.168.30.132

    需要用到的软件为:

      a、scsi-target-utils    # 提供Server端服务

      b、iscsi-initiator-utils   #提供Client服务

 二、安装部署服务端,即iSCSI_Server


   1、在服务端创建可共享的磁盘或卷;这里就新添加一块新磁盘做为共享;

    查看新添加的硬盘:

     

 

[root@iSCSI_Server ~]# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
64 heads, 32 sectors/track, 30720 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000da3dc
Device Boot Start End Blocks Id System
/dev/sda1 * 2 501 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 502 30720 30944256 8e Linux LVM
Partition 2 does not end on cylinder boundary.
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
64 heads, 32 sectors/track, 20480 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


  2、对硬盘进行分区并创建LVM卷:

[root@iSCSI_Server ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x47756356.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to         switch off the mode (command 'c') and change display units to         sectors (command 'u'). Command (m for help): p      # 查看分区信息

Disk /dev/sdb: 21.5 GB, 21474836480 bytes64 heads, 32 sectors/track, 20480 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x47756356   Device Boot      Start         End      Blocks   Id  System Command (m for help): n      #新建一个分区

Command action   e   extended   p   primary partition (1-4) e                   # 新建一个逻辑分区
 
Partition number (1-4): 4     # 卷标为 4

First cylinder (1-20480, default 1): Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-20480, default 20480): Using default value 20480Command (m for help): p      # 查看信息
 
Disk /dev/sdb: 21.5 GB, 21474836480 bytes64 heads, 32 sectors/track, 20480 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x47756356   Device Boot      Start         End      Blocks   Id  System/dev/sdb4               1       20480    20971504    5  Extended Command (m for help): n      # 新建逻辑卷

Command action   l   logical (5 or over)   p   primary partition (1-4) l                   # 选择l,逻辑卷
 
First cylinder (1-20480, default 1): Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-20480, default 20480): Using default value 20480Command (m for help): p      # 查看信息

Disk /dev/sdb: 21.5 GB, 21474836480 bytes64 heads, 32 sectors/track, 20480 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x47756356   Device Boot      Start         End      Blocks   Id  System
/dev/sdb4               1       20480    20971504    5  Extended
/dev/sdb5               1       20480    20971488   83  Linux Command (m for help): w      # 保存

The partition table has been altered!Calling ioctl() to re-read partition table. Syncing disks

[root@iSCSI_Server ~]# partprobe /dev/sdb      # 使刚才的配置立即生效
[root@iSCSI_Server ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes
64 heads, 32 sectors/track, 30720 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000da3dc

Device Boot Start End Blocks Id System
/dev/sda1 * 2 501 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 502 30720 30944256 8e Linux LVM
Partition 2 does not end on cylinder boundary.

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
64 heads, 32 sectors/track, 20480 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x47756356

Device Boot Start End Blocks Id System
/dev/sdb4 1 20480 20971504 5 Extended
/dev/sdb5 1 20480 20971488 83 Linux

[root@iSCSI_Server ~]# cat /proc/partitions
major minor #blocks name
8 0 31457280 sda
8 1 512000 sda1
8 2 30944256 sda2
8 16 20971520 sdb
8 20 1 sdb4
8 21 20971488 sdb5
253 0 27795456 dm-0
253 1 3145728 dm-1

#注:看到以上标黄的信息证明已经创建逻辑卷成功!

接下来创建LVM卷


[root@iSCSI_Server ~]# pvcreate /dev/sdb5        # 创建PV
Physical volume "/dev/sdb5" successfully created
[root@iSCSI_Server ~]# vgcreate kvmvg /dev/sdb5     # 创建VG
Volume group "kvmvg" successfully created
[root@iSCSI_Server ~]# lvcreate -L 19G -n kvmlv kvmvg  # 创建LV
Logical volume "kvmlv" created.
[root@iSCSI_Server ~]# lvs                 # 查看
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 26.51g
lv_swap VolGroup -wi-ao---- 3.00g
kvmlv kvmvg -wi-a----- 19.00g
[root@iSCSI_Server ~]#

#注:看到以上标黄的信息证明已经创建成功!


  3、安装服务端软件:scsi-target-utils

 

[root@iSCSI_Server ~]# yum -y install epel-release
[root@iSCSI_Server ~]# yum -y install scsi-target-utils.x86_64


   4、配置iSCSI服务:

[root@iSCSI_Server ~]# vim /etc/tgt/targets.conf
#### 在 40行后添加以下信息#######
<target iqn.2017-03.com.zlyang:kvm.iscsi>
  backing-store /dev/kvmvg/kvmlv      
  initiator-address 192.168.30.0/24
</target>

  注:

  iqn.2017-03.com.zlyang:kvm.iscsi : 为共享名

    iqn.2017-03.com.zlyang:kvm.iscsi  :共享卷名及路径

    initiator-address 192.168.30.0/24  :允许哪些地址访问

 

  5、启动服务

[root@iSCSI_Server ~]# service tgtd start
[root@iSCSI_Server ~]# chkconfig tgtd on
[root@iSCSI_Server ~]# netstat -tnlt|grep 3260

   tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 
   tcp 0 0 :::3260 :::* LISTEN 

  

  6、添加防火墙规则

[root@iSCSI_Server ~]# iptables -I INPUT 4 -p tcp --dport 3260 -j ACCEPT  
[root@iSCSI_Server ~]# iptables-save
[root@iSCSI_Server ~]# service iptables save
[root@iSCSI_Server ~]# service iptables restart


 三、安装Client

  因为两台Client配置几乎一样,在此以Client1为例给大家演示具体部署过程

  

  1、首先查看本地磁盘

 

[root@iSCSI_Client_1 ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes64 heads, 32 sectors/track, 30720 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000da3dc

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           2         501      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             502       30720    30944256   8e  Linux LVM
Partition 2 does not end on cylinder boundary.

Disk /dev/mapper/VolGroup-lv_root: 28.5 GB, 28462546944 bytes
255 heads, 63 sectors/track, 3460 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_swap: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

# 可以看出只有一块磁盘


  2、安装Client软件

[root@iSCSI_Client_1 ~]# yum -y install epel-release
[root@iSCSI_Client_1 ~]# yum -y install iscsi-initiator-utils.x86_64


   3、启动服务

[root@iSCSI_Client_1 ~]# service iscsid start
[root@iSCSI_Client_1 ~]# chkconfig iscsid on




   4、发现下iSCSI服务端

[root@iSCSI_Client_1 ~]# iscsiadm -m discovery -t st -p 192.168.30.133
192.168.30.133:3260,1 iqn.2017-03.com.zlyang:kvm.iscsi


  5、挂载该磁盘

    a、加载磁盘

# iscsiadm -m node -T iqn.2017-03.com.zlyang:kvm.iscsi -p 192.168.30.133 -l
Logging in to [iface: default, target: iqn.2017-03.com.zlyang:kvm.iscsi, portal: 192.168.30.133,3260] (multiple)
Login to [iface: default, target: iqn.2017-03.com.zlyang:kvm.iscsi, portal: 192.168.30.133,3260] successful.
# echo "iscsiadm -m node -T iqn.2017-03.com.zlyang:kvm.iscsi -p 192.168.30.133 -l" >> /etc/rc.d/rc.local"

[root@iSCSI_Client_1 ~]# fdisk -l
Disk /dev/sdc: 20.4 GB, 20401094656 bytes
64 heads, 32 sectors/track, 19456 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000



注:看到此信息表示已经加载成功


    b、分区格式化

[root@iSCSI_Client_1 ~]# mkfs.ext4 /dev/sdc
mke2fs 1.41.12 (17-May-2010)/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1245184 inodes, 4980736 blocks
249036 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
152 block groups3
2768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@iSCSI_Client_1 ~]#


    c、挂载到本地

[root@iSCSI_Client_1 ~]# mount /dev/sdc /mnt
[root@iSCSI_Client_1 ~]# echo "mount /dev/sdc /mnt" >> /etc/rc.d/rc.local [root@iSCSI_Client_1 ~]# df -h Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root                       26G  2.6G   23G  11% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             477M   52M  400M  12% /boot
/dev/sdc               19G   44M   18G   1% /mnt
[root@iSCSI_Client_1 ~]#


Client_1的所有配置已经配置完成,Client_2配置与Client_1基本相同,只是Client_2不需要再分区格式化了,直接加载及挂载就可以!


CentOS6.5部署KVM及实现在线迁移

一、前言
  虚拟化技术已经成为未来计算机技术的一个重要的发展方向。Linux在虚拟化方面已经有了很多种解决方案:VMware、VirtualBox、Xen和KVM!现在给大家分享下本人在KVM里遇到坑及解决方法。大牛们别喷.....
  
  KVM简介
    KVM是一个全虚拟化的解决方案。可以在x86架构的计算机上实现虚拟化功能。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel
  CPU和具有AMD-V功能的AMD CPU。
  在kvm技术中应用到2样东西:kvm+qemu
  kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备;
  qemu是模拟IO设备(网卡,磁盘),kvm加上qemu之后就能实现真正意义上服务器虚拟化。
  因为用到了上面两个东西,所以一般都称之为qemu-kvm

  关于KVM的介绍在这里我就不多说了,有兴趣的童鞋可以自己去查找下;下面我们直接进行部署阶段。


二、环境介绍
  本环境需要至少3台机器分别为:

1、KVM_Server_1: 192.168.30.131
2、KVM_Server_2: 192.168.30.132
3、iSCSI_Server: 192.168.30.133


三、安装前的准备(3台主机都需要操作)

  1、开启BISO中的CPU虚拟化支持(具体方法在这里就不多介绍了)
  2、查看系统对KVM虚拟化的支持

[root@localhost ~]# egrep "svm|vmx" /proc/cpuinfo |wc -l1

  注:vmx是Intel系列CPU支持虚拟化的标签;
    svm是AMD系列CPU支持虚拟化的标签;
     如果数值大于0表示支持虚拟化



       3、配置主机FQDN

[root@localhost ~]# hostname --fqdn
localhost
[root@localhost ~]# sed -i "s/HOSTNAME=.*$/HOSTNAME=KVM-1/g" /etc/sysconfig/network
[root@localhost ~]# hostname KVM-1
[root@KVM-1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@KVM-1 ~]# echo "192.168.30.131 KVM-1" >> /etc/hosts
[root@KVM-1 ~]# echo "192.168.30.132 KVM-2" >> /etc/hosts
[root@KVM-1 ~]# hostname --fqdn
KVM-1
[root@KVM-1 ~]# exit



        4、关闭Selinux

[root@KVM-1 ~]# grep "SELINUX=enforcing" /etc/selinux/config 
SELINUX=enforcing
[root@KVM-1 ~]# sed -i 's/SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
[root@KVM-1 ~]# setenforce 0[root@KVM-1 ~]# getenforce
Permissive
[root@KVM-1 ~]#


        5、同步时间

[root@KVM-1 ~]# yum -y install epel-release
[root@KVM-1 ~]# yum -y install ntp*[root@KVM-1 ~]# date
Thu Mar 2 11:13:03 CST 2017
[root@KVM-1 ~]# cp -Rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp: overwrite `/etc/localtime'? y
[root@KVM-1 ~]# ntpdate 133.100.11.8
2 Mar 11:44:58 ntpdate[11762]: step time server 133.100.11.8 offset 1756.326390 sec
[root@KVM-1 ~]# sed -i 's#ZONE="America/New_York"#ZONE="Asia/Shanghai"#g' /etc/sysconfig/clock
[root@KVM-1 ~]# hwclock -w
[root@KVM-1 ~]# date -R
Thu, 02 Mar 2017 11:46:05 +0800
[root@KVM-1 ~]# echo "ntpdate 133.100.11.8" >> /etc/rc.d/rc.local


三、部署KVM;
  

  以下操作需要在2台KVM宿主机上部署,这里以KVM-1为例给大家演示具体的安装流程
  1、安装常用软件包

[root@KVM-1 ~]# yum -y install vim wget gcc make crontabs mlocate \
ntp lrzsz gcc-c++ autoconf setuptool ntsysv iptables \
system-config-securitylevel-tui system-config-network-tui \
sysstat dstat screen


  2、安装KVM

[root@KVM-1 ~]# yum -y groupinstall Virtualization 'Virtualization Client' \
'Virtualization Platform' 'Virtualization Tools'

    注:
      Virtualization:提供虚拟机的环境,主要包含qumu-kvm
      Virtualization-client:管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer    
      Virtualization-platform:提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client
      Virtualization-tools:管理离线虚拟机镜像的工具,主要有libguestfs根据需求选择软件包。

  

  3、启动 Libvirt 服务

[root@KVM-1 ~]# service libvirtd start
[root@KVM-1 ~]# chkconfig libvirtd on
[root@KVM-1 ~]# chkconfig --list libvirtd
libvirtd 0:off 1:off 2:off 3:on 4:on 5:on 6:off


  4、验证KVM模块的加载情况

[root@KVM-1 ~]# lsmod | grep kvm
kvm_intel    55464 0
kvm             345070 1 kvm_intel


  5、创建网桥(必须操作)

[root@KVM-1 ~]# virsh iface-bridge eth0 cloudbr0


四、部署iSSCi磁盘共享
  八卦:前一篇文章已经介绍了《iSCSi共享存储》的具体部署方案,在这里我就不再重复介绍了;但是要注意确保两台KVM宿主机的挂载路径必须一样;
    例如:
      KVM-1的iSCSi磁盘为/dev/sdb挂载到本地的/mnt下,KVM-2的iSCSi磁盘也必须挂载到/mnt下:

[root@KVM-1 ~]# df -h |egrep "Filesystem|sdb"
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 19G 2.2G 16G 13% /mnt

[root@KVM-2 ~]# df -h |egrep "Filesystem|sdb"
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 19G 2.2G 16G 13% /mnt

请参考:http://zlyang.blog.51cto.com/1196234/1902349


五、创建Guest虚拟机
  八卦:因为我们下一步要做Guest虚拟机在服务不中断的情况下从KVM-1的宿主机上动态迁移到KVM-2的宿主机上,所以我们在创建虚拟机的时候只需要在KVM-1的宿主机上创建就行了;但需要iSCSi的配置必须相同;

    1、创建磁盘文件

[root@KVM-1 ~]# qemu-img create -f qcow2 /mnt/CentOS6.8.qcow2 10G


    2、创建Guest虚拟机

[root@KVM-1 ~]# virt-install --name CentOS6.8 --os-variant=rhel6 --ram 512 --vcpus=1 \
--disk path=/mnt/CentOS6.8.qcow2,device=disk,format=qcow2,size=7,bus=virtio --accelerate \
--cdrom /mnt/iso/CentOS-6.8-x86_64-minimal.iso \
--vnc --vncport=5900 --vnclisten=0.0.0.0 \
--network bridge=cloudbr0,model=virtio --noautoconsole

    参数介绍:
      --name name      虚拟机名称,需全局惟一
      --ram memory      分配给虚拟机的内存大小
      --vcpus CPU        分配给虚拟机的cpu核心数
      --disk          指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;常用的选项有:
        device       设备类型,如cdrom、disk或floppy等,默认为disk;
        bus         磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
        perms       访问权限,如rw、ro或sh(共享的可读写),默认为rw;
        size         新建磁盘映像的大小,单位为GB;
        cache        缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
        format      磁盘映像格式,如raw、qcow2、vmdk等;
        sparse        磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
      --cdrom         指定安装方法: 格式为 --cdrom /mnt/iso/CentOS-6.8-x86_64-minimal.iso
      --vnc         开启×××
      --vncport       vnc端口,默认为5900
      --vnclisten         vnc监听地址,建议设为:0.0.0.0 即:监听所有地址
      --network        启用网络
        bridge         桥接到物理桥
        model         使用virtio驱动
      --autoconsole        不自动打开终端


    3、安装Guest虚拟机操作系统
       使用vnc-Viever来连接
        配置如下:
        VNC地址:192.168.30.131:5900
        注:如果出现窗口一闪就消失了,无法连接
        解决方法:
        点击vnc-viewer下面的options-----> expert ------> ColourLevel 的值改为rgb222 ---->确定
        然后重新连接就OK了!


    4、配置Guest虚拟机IP使其可以正常上网
       具体配置在这里就不做演示了!


六、配置KVM动态迁移
    前言
    虚拟机的迁移技术为服务器的虚拟化提供简便的方法。目前流行的虚拟化产品 VMware,Xen,Hyper-V,KVM 都提供各自的迁移工具。其中 Linux 平台上开源的虚拟化工具KVM发展迅速,基于KVM的虚拟机的迁移特性也日趋完善。本文全面介绍KVM虚拟机在不同的应用环境下的静态迁移(离线迁移)和动态迁移(在线迁移),并且在最新发布的 Suse Linux Enterprise Edition 11 SP1 上分别演示如何应用 libvirt/virt-manager 图形化工具和基于命令行的 qemu-kvm 工具进行迁移操作。
迁移方式的分类
    静态迁移
    静态迁移:也叫做常规迁移、离线迁移(Offline Migration)。就是在虚拟机关机或暂停的情况下从一台物理机迁移到另一台物理机。因为虚拟机的文件系统建立在虚拟机镜像上面,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理主机上;如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要显式的停止虚拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。

    共享存储的动态迁移
    动态迁移(Live Migration):也叫在线迁移(Online Migration)。就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。

    目前主流的动态迁移工具,VMware 的 VMotion,Citrix 的 XenMotion,他们都依赖于物理机之间采用 SAN(storage area network)或 NAS(network-attached storage)之类的集中式共享外存设备,因而在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而获得较好的迁移性能。
    详细信息参考:https://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm2/



  1、配置iSCSi共享存储
      由于之前已经提到iscsi的配置方法了,且已经配置了这里就不多做介绍了

  2、配置ssh免密码登录
    a、KVM-1上操作

[root@KVM-1 ~]# ssh-keygen -t rsa
[root@KVM-1 ~]# scp /root/.ssh/id_rsa.pub root@192.168.30.132:/root/


    b、KVM-2上操作

[root@KVM-2 ~]# ssh-keygen -t rsa
[root@KVM-2 ~]# scp /root/.ssh/id_rsa.pub root@192.168.30.131:/root/
[root@KVM-2 ~]# cat /root/id_rsa.pub >> /root/.ssh/authorized_keys


    c、KVM-1上操作

[root@KVM-1 ~]# cat /root/id_rsa.pub >> /root/.ssh/authorized_keys


    d、相互测试登录情况

[root@KVM-1 ~]# ssh 192.168.30.132
[root@KVM-2 ~]# ssh 192.168.30.131


  3、为了保证实验的顺利进行,我们先把iptables关闭

[root@KVM-1 ~]# service iptables stop
[root@KVM-2 ~]# service iptables stop


  4、执行迁移
    a、将Guest虚拟机从KVM-1上迁移至KVM-2上

[root@KVM-1 ~]# virsh list
Id                 Name         State
----------------------------------------------------
11                 centos       running

[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
[root@KVM-1 ~]# virsh list
Id                 Name         State
----------------------------------------------------
[root@KVM-1 ~]#


    b、在KVM-2上查看

[root@KVM-2 ~]# virsh list
Id                 Name         State
----------------------------------------------------
4                  centos       running

[root@KVM-2 ~]#


七、总结

    关于KVM的动态迁移很多小伙伴儿们都没有提到需要做ssh免密码登录,在这里提醒大家一定要做哦,否则会出现错误的。
    虽然在安装过程中踩到了很多坑,但本人还是坚持走了过来;下面来分享下大家在搭建过程中可能会遇到的坑:

    1、迁移时遇到的错误描述:

[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: unable to connect to server at 'KVM-2:49152': No route to host

    原因:你的免密登录没有成功
    解决方法:重新做免密登录即可



    2、迁移时的存储错误:

[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: Failed to open file '/mnt/CentOS6.8.qcow2': Input/output error

    原因:存储没有挂载成功

    解决方法:mount -o remount /dev/sdb /mnt



    3、迁移时FQDN错误:

[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: internal error hostname on destination resolved to localhost, but migration requires an FQDN

    原因:两台宿主机没有FQDN名称
    解决方法:重新配置FQDN,具体方法见上.


    4、迁移时语法错误:

?

1
2
[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132:/system
error: internal error Unable to parse URI qemu+ssh://192.168.30.132:/system

    原因:qemu+ssh语法写错了
    解决方法:正确的应该是:virsh migrate centos --live qemu+ssh://192.168.30.132/system

 

 到此KVM的动态迁移就暂时到一个段落了,如果小伙伴儿们遇到问题可以直接回复或发邮件至:DBA_Master@163.com

本文出自 “Elephant” 博客,请务必保留此出处http://zlyang.blog.51cto.com/1196234/1902657