zoukankan      html  css  js  c++  java
  • openstack 平台P2V迁移

    【Openstack】P2V迁移

    一、前言

    P2V,含义为物理机转成虚拟机,并可以健康运行在openstack或其他虚拟化的环境中。

    二、前提准备

    三、操作步骤

    1、安装迁移中转机

    安装步骤省略,

    需要注意的是,一般被迁移的物理机,磁盘比较大,所以中转机的磁盘空间最好大于1T。

    2、配置中转机

    a)、制作的离线仓库

    b)、安装软件包

    # 安装kvm 虚拟化环境
    yum install  virt-p2v virt-manager virt-v2v  virt-* libguestfs-win-support  libguestfs*  -y
    
    # 安装virtio-win-0.1.141-1.noarch.rpm
    yum localinstall virtio-win-0.1.141-1.noarch.rpm
    

    3、创建存储池(可选)

    [root@p2v-node ~]# mkdir /p2v-pool    #创建存储目录
    
    [root@p2v-node ~]# chown root:root /p2v-pool    #修改属主属组
    
    [root@p2v-node ~]# chmod 755 /p2v-pool     #更改权限
    
    [root@p2v-node ~]# virsh pool-define-as P2vPool --type dir --target /p2v-pool     #定义存储池
    Pool P2vPool defined
    
    [root@p2v-node ~]# virsh pool-build P2vPool      #创建存储池
    Pool P2vPool built
    
    [root@p2v-node ~]# virsh pool-start P2vPool      #启动存储池
    Pool P2vPool started
    
    [root@p2v-node ~]# virsh pool-autostart P2vPool      #设置自动启动
    Pool P2vPool marked as autostarted
    
    [root@p2v-node ~]# virsh pool-info P2vPool     #查看存储池信息
    Name:           P2vPool
    UUID:           f7f2dc1c-67ab-48b9-891b-bb3698fbc040
    State:          running
    Persistent:     yes
    Autostart:      yes
    Capacity:       499.76 GiB
    Allocation:     84.87 MiB
    Available:      499.67 GiB
    

    4、制作virt-p2v的 U盘引导启动工具

    a)、下载virt-p2v镜像文件

    下载地址: http://oirase.annexia.org/virt-p2v/RHEL-7.4-preview/virt-p2v-1.36.3-1.el7.iso

    b)、使用 UltraISO 软件制作u盘启动盘

    选择 写入硬盘映像。

    目前virt-p2v-1.32.7-2.el7.iso此版本不支持centos6.x系统的迁移,可以使用virt-p2v-1.36.10-1.el7.iso或更新版本对centos6.x系统进行迁移

    5、操作物理机,进行迁移。

    将使用virt-p2v镜像制作的U盘启动盘来引导物理机。

    进入到图形界面

    1.填写中转机的IP地址

    2.填写中转机的sshd服务端口号(默认为22)

    3.填写中转机用户名

    4.填写中转机对应用户名的密码

    5.填写私有sshd服务密钥路径(可以不填写)

    配置网络, 如果没有dhcp。需要手动配置一个静态ip地址,点击configure network ,删除所有默认的网络配置,手动创建新的

    选择网卡设备,这里我们要选择可以 连接到 中转机的网卡设备

    配置ip地址

    通常这里保存之后,会有一会时间,网络才会配置上,可能需要进入到xterm ,查看一下。

    点击Test connection,然后 测试通过后,点击Next。

    设置迁移信息,

    1.填写主机名称,cpu数量,内存容量(此项自定义)

    2.选择管理工具(libvirt),生成镜像文件的输出位置(存储池名称)和输出格式(raw,qcow2)

    填写 物理机转换为虚拟机的输出方式和格式,具体如下:
    
    output to (-o): 选择输出模式,推荐选择 libvirt 模式或者 local 模式
    output conn (-oc): 填写一个 kvm 虚拟化的域名 (可选)
    output storage (-os): 填写一个存储位置,对应输出模式选择存储位置, libvirt 对应存储池名称, local 对应中转机的存储目录
    output format (-of): 填写输出格式,推荐 qcow2 格式,如果存储位置空间够大,可以填写 raw 格式
    

    3.选择需要转换的硬盘

    4、要转换成虚拟机的时候,保留的物理网卡

    配置好后,点击Start conversion。

    以下是示例配置信息:

    将转换成的虚拟机磁盘,保存到中转机的/p2v-pool,虚拟磁盘格式为qcow2 格式。

    登录到中转机查看过程

    根据被迁移的物理机的磁盘大小决定迁移时间,1.4T迁移了大概一天的时间,
    #####会在中转机的/tmp目录下面,生成相关文件
    
    查看迁移进度:
    # tailf /tmp/virt-p2v-20191031-a2b1r92d/virt-v2v-conversion-log.txt
    
    查看转换成功的虚拟机磁盘文件
    [root@virt-p2v /p2v-pool]# qemu-img info P2V-DISK-NAME  #切换到存储池目录查看磁盘信息
    
    image: P2V-DISK-NAME
    file format: qcow2
    virtual size: 6.3G (6713966592 bytes)
    disk size: 1.5G
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
    

    迁移过程中选择了libvirt模式,那么物理机的操作系统迁移过来后,会直接在中转机virt-manager中生成shut off状态的虚拟机。

    6、优化参数

    刚p2v迁移过来的虚拟机是无法正常使用的,需要进行优化参数,尤其是windows操作系统。另外如果要迁移到云平台上面,那么需要安装一些软件。

    a)、优化windows

    • 更新驱动

      windows 驱动程序:

      https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.171-1/virtio-win-0.1.171.iso

      将准备好的windows 驱动iso镜像,上传到中转机上

       virt-install 
      --name p2v-win-test
      --ram 8192 --vcpus 2 --boot hd 
      --network network=default,model=virtio 
      --disk path=/p2v-pool/win08-new-sda,format=raw,device=disk,bus=ide 
      --disk path=/p2v-pool/virtio-win-0.1.141.iso,device=cdrom 
      --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type windows --os-variant win2k8r2
      

      使用vnc 软件远程登录到 虚拟机里面,

      # 查看虚拟机的vnc 端口
      virsh vncdisplay p2v-win-test
      :0
      
      #####使用 ip+vnc端口远程连接虚拟机。(ip为中转机的ip地址)
      

      更新驱动主要驱动

      
      #根据实际情况填写路径
      
      PnPutil.exe -i -a D:viostor2k8r2amd64viostor.inf
      PnPutil.exe -i -a D:vioserial2k8R2amd64vioser.inf
      PnPutil.exe -i -a D:vioscsi2k8R2amd64vioscsi.inf
      PnPutil.exe -i -a D:viorng2k8R2amd64viorng.inf
      

      更新其他驱动

    • 安装Balloon服务

      拷贝 D:Balloon2k8r2amd64 (使用对应操作系统版本的Balloon下的文件)目录到 C:Program Files 下并重命名为 Balloon

      打开PowerShell并运行命令: & 'C:Program FilesBalloonlnsvr.exe' -i


      .png)

    • 安装qemu-guest-agent

    • 安装cloudbase-init

    • 最后一步比较重要,如果是迁移物理机,可以不用执行这一步,因为物理机就这一台,而且物理机一般硬盘比较大,我们要直接上传到openstack 平台作为虚拟机,而不是作为镜像。

    b)、优化linux

    1. 安装基本软件包

      # 安装NetworkManager,用于网卡的自动发现及管理
      # 安装acpid,用于虚拟机的电源管理
      yum install -y NetworkManager acpid
      
      # 开机启动服务
      
      #centos6:
      chkconfig acpid on
      chkconfig NetworkManager on
      
      #centos7:
      systemctl enable acpid
      systemctl enable NetworkManager
      
    2. 安装cloud-init相关软件包

      # 安装cloud-init,用于注入密码/密钥和主机名
      # 安装qemu-guest-agent,用于在面板更新密码/密钥
      # 安装cloud-utils,用于更改虚拟机根分区大小(可选安装,需要启用epel源)
      yum install -y cloud-init qemu-guest-agent cloud-utils
      
      # 开机启动服务(有的linux发行版默认不开机自启这些服务,需要手动设置开机自启)
      
      #centos6:
      chkconfig cloud-init on
      chkconfig cloud-init-local on
      chkconfig cloud-config on
      chkconfig cloud-final on
      chkconfig qemu-ga on
      
      #centos7:
      systemctl enable cloud-init
      systemctl enable cloud-init-local
      systemctl enable cloud-config
      systemctl enable cloud-final
      systemctl enable qemu-guest-agent
      
    3. 修改配置文件

      /etc/cloud/cloud.cfg

      users:
       - default
      
      disable_root: 0
      ssh_pwauth:   1
      locale_configfile: /etc/sysconfig/i18n
      mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
      resize_rootfs_tmp: /dev
      ssh_deletekeys:   0
      ssh_genkeytypes:  ~
      syslog_fix_perms: ~
      datasource_list: ['ConfigDrive','Ec2','NoCloud']
      datasource:
         Ec2:
           timeout: 2
           max_wait: 5
      cloud_init_modules:
       - migrator
       - seed_random
       - bootcmd
       - write-files
       - growpart
       - resizefs
       - set_hostname
       - update_hostname
       - update_etc_hosts
       - ca-certs
       - rsyslog
       - users-groups
       - ssh
      cloud_config_modules:
       - mounts
       - locale
       - set-passwords
       - timezone
       - puppet
       - chef
       - salt-minion
       - mcollective
       - disable-ec2-metadata
       - runcmd
      cloud_final_modules:
       - rightscale_userdata
       - scripts-per-once
       - scripts-per-boot
       - scripts-per-instance
       - scripts-user
       - ssh-authkey-fingerprints
       - keys-to-console
       - phone-home
       - final-message
      system_info:
        distro: rhel
        default_user:
          name: cloud-user
        paths:
          cloud_dir: /var/lib/cloud
          templates_dir: /etc/cloud/templates
        ssh_svcname: sshd
      
    4. 禁用默认的 zeroconf route

      echo "NOZEROCONF=yes" >> /etc/sysconfig/network
      
    5. 修改kernel启动参数,编辑/boot/grub/grub.conf,在kernel所在行添加console字段

      Note

      centos6需要配置此项

      kernel ... console=ttyS0,115200n8 console=tty0
      

    7、上传到openstack 平台

    a) 、更改虚拟机磁盘文件的格式

    将转换后的qcow2文件转换成 raw 格式

    [root@overcloud-novacompute-0 ~]# qemu-img convert win08-new-sda.qcow2 -f qcow2 -O raw win08-new-sda.raw
    # 如果已经转换成 raw 格式,就不需要进行这一步了
    

    b)、 在openstack平台上新创建一个虚拟机,并将虚拟机关机。

    此步骤略

    c)、因为我的环境使用的是ceph 环境,所以进行如下操作

    # rbd ls -l -p vms | grep <vm id>
    1c10d2d5-0c90-420c-b07c-0719a91fb66d_disk 40960M images/5a39368b-5d1e-4007-b20e-608d38a36b84@snap   2
    
    # 其中《vm id》为平台所创建虚拟机的 id
    

    d)、 删除新建虚拟机的磁盘文件,使用迁移过来的磁盘文件替换新建虚拟机的磁盘文件。

    # rbd -p vms rm 1c10d2d5-0c90-420c-b07c-0719a91fb66d_disk
    Removing image: 100% complete...done.
    
    # rbd import -p vms P2V-DISK-NAME.raw 1c10d2d5-0c90-420c-b07c-0719a91fb66d_disk
    rbd: --pool is deprecated for import, use --dest-pool
    Importing image: 100% complete...done.
    

    e)、回到openstack 平台,开启刚创建的虚拟机,进入系统后,为被迁移物理机的操作系统。

    四、常见问题解决方法

    1、windows启动不了,显示为蓝屏

    1573119187810

    解决方法:

    1、删除虚拟机

    virsh destroy win-08-new
    virsh undefine win-08-new
    

    2、修改启动参数,重新启动虚拟机

    修改--disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=virtio

    为 --disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=ide

     virt-install 
    --name win-08-new 
    --ram 8192 --vcpus 2 --boot hd 
    --network network=default,model=virtio 
    --disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=ide 
    --disk path=/p2v-pool/virtio-win-0.1.141.iso,device=cdrom 
    --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type windows --os-variant win2k8r2
    

    3、在中转机上强制关闭虚拟机

    virsh destroy  win-08-new
    

    4、在中转机上执行如下操作

    wget https://github.com/jakobadam/kvm-mergeide/archive/master.zip
    unzip  master.zip
    cd kvm-mergeide-master
    virt-win-reg --merge win-08-new  mergeide.reg
    # 注意:这条命令里的win-08-new是你之前创建kvm虚拟机的名称,virt-win-reg会自动搜索KVM中noactive的虚拟机名称,然后执行mergeide.reg
    

    4、使用vnc软件远程连接,安装驱动(重要),具体步骤看优化windows 步骤。

    # 启动虚拟机
    virsh start win-08-new
    

    更新驱动步骤省略

    5、在中转机上为刚启动的windows虚拟机,动态添加磁盘 (重要)

    # 创建空的虚拟机磁盘文件
    dd if=/dev/zero  of=/opt/test.img bs=4k count=20
    # 挂载文件
    virsh attach-disk p2v-test-win2008-2 /opt/test.img  --targetbus=virtio vdb
    

    6、使用vnc 进入设备管理器,查看磁盘控制器,可以看到redhar virtio scsi device 设备驱动,说明操作成功。

    然后关闭虚拟机,删除虚拟机,将bus修改成 virtio ,重新启动虚拟机。

    virsh destroy win-08-new
    virsh undefine win-08-new
    
    
    virt-install 
    --name win-08-new 
    --ram 8192 --vcpus 2 --boot hd 
    --network network=default,model=virtio 
    --disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=vitio
    --disk path=/p2v-pool/virtio-win-0.1.141.iso,device=cdrom 
    --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type windows --os-variant win2k8r2
    

    虚拟机正常启动,导致虚拟机无法正常启动,是因为没有vitio的驱动程序,所以bus为virtio的时候,系统无法启动。

    参考文档:

    https://blog.csdn.net/tianci_zzz/article/details/73896955

    https://bugzilla.redhat.com/show_bug.cgi?id=1142993

  • 相关阅读:
    Zabbix 3.0编译安装
    用Python发布自己的代码
    欧拉公式为世界上最完美的公式
    通过别人远端安装anaconda来说配置文件
    jupyter安装与使用
    make在latex中的妙用
    latex源码到PDF文件
    anconda配置国内源
    git命令速查
    一张色环图教你搞定配色(转)
  • 原文地址:https://www.cnblogs.com/yanling-coder/p/11814045.html
Copyright © 2011-2022 走看看