OpenStack 冷热迁移

本文详细介绍了OpenStack中两种在线迁移类型:Live Migration 和 Block Migration 的工作原理与配置步骤。Live Migration 主要涉及实例内存状态的迁移,适用于共享存储场景;而 Block Migration 还包括磁盘文件的迁移,不依赖共享存储但速度较慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是热迁移

热迁移(Live Migration,又叫动态迁移、实时迁移),即虚拟机保存/恢复(Save/Restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。

openstack热迁移

OpenStack有两种在线迁移类型:live migration和block migration。Livemigration需要实例保存在NFS共享存储中,这种迁移主要是实例的内存状态的迁移,速度应该会很快。Block migration除了实例内存状态要迁移外,还得迁移磁盘文件,速度会慢些,但是它不要求实例存储在共享文件系统中。

NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

热迁移条件:

1.计算节点之间可以通过主机名互相访问

2.计算节点和控制节点的nova uid和gid保持一致

3.vncserver_proxyclient_address和vncserver_listen 监听的是本地IP

4.必须有共享存储,实例存放在共享存储中,且每个计算节点都可以访问共享存储。否则只能使用块迁移

添加live_migration_flag

修改nova的配置文件,在[libvirt] 段下 添加如下字段

live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"

修改libvirt配置

配置versh免密码连接,修改/etc/libvirt/libvirtd.conf

添加如下配置

listen_tls = 0

listen_tcp = 1

tcp_port = "16509"

listen_addr = "172.16.201.8" #根据自己的计算节点IP改写

auth_tcp = "none"

修改/etc/sysconfig/libvirtd 添加如下参数

LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf

LIBVIRTD_ARGS="--listen"

重启libvirt

systemctl restart libvirtd.service

查看监听端口:

[root@compute1 ~]# netstat -lnpt | grep libvirtd

tcp 0 0 172.16.206.6:16509 0.0.0.0:* LISTEN 9852/libvirtd

测试:

在compute1节点上:

virsh -c qemu+tcp://compute2/system

在compute2节点上

virsh -c qemu+tcp://compute1/system

如果能无密码连接上去,表示配置没问题

  • 查看所有实例

nova list

  • 查看需要迁移虚拟机实例

nova show f3d749ba-98e1-4624-9782-6da729ad164c

  • 查看可用的计算节点
    nova-manage service list
  • 查看目标节点资源
    nova-manage service describe_resource computer1
  • 开始迁移,正常无任何回显

nova live-migration 8da00f69-05f6-4425-9a8a-df56b79a474f computer1

  • 也可以通过dashboard 节点迁移
    用节点迁移需要使用admin管理员用户执
冷迁移配置

冷迁移需要启动nova账户,并配置ssh 免密码认证

usermod -s /bin/bash nova

su - nova

ssh-keygen -t rsa

#生成密钥

cp -fa id_rsa.pub authorized_keys

将密钥复制到所有计算节点的/var/lib/nova/.ssh下,并设置权限为nova用户

编辑/etc/nova/nova.conf的配置文件,修改下面参数

allow_resize_to_same_host=True

scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

在计算节点重启nova服务

systemctl restart openstack-nova-compute

在controller节点重启nova 相关服务

systemctl restart openstack-nova-api.service openstack-nova-scheduler.service

转载于:https://www.cnblogs.com/wangyifu/p/7741944.html

### OpenStack 虚拟机迁移教程与 API 在 OpenStack 中,虚拟机迁移是一种常见的操作,用于优化资源使用或维护环境。OpenStack 提供了冷迁移热迁移两种方式来实现虚拟机的迁移[^1]。 #### 冷迁移迁移是指将处于关机状态的虚拟机从一个计算节点迁移到另一个计算节点。这种迁移不会影响存储卷的位置,但需要关闭虚拟机实例。冷迁移的命令如下: ```bash openstack server migrate --os-compute-api-version 2.30 <server-id> ``` 上述命令通过 OpenStack CLI 发起冷迁移请求,其中 `--os-compute-api-version` 参数指定了 API 版本[^1]。 #### 热迁移 热迁移(也称为在线迁移)允许在不停止虚拟机的情况下将其从一个计算节点迁移到另一个计算节点。这要求共享存储环境的支持,例如 NFS 或 Ceph。热迁移的命令如下: ```bash openstack server migrate --live <destination-host> <server-id> ``` 在执行热迁移时,目标主机必须具有足够的资源,并且源主机和目标主机之间的网络连接必须正常[^2]。 #### API 调用 除了通过 CLI 执行迁移外,还可以通过 OpenStack 的 Compute API 来调用迁移功能。以下是热迁移的 API 示例: ```http POST /servers/{server_id}/action HTTP/1.1 Host: compute.example.com Content-Type: application/json X-Auth-Token: {auth_token} { "os-migrateLive": { "host": "destination_host", "block_migration": false, "disk_over_commit": false } } ``` 上述 API 请求中,`os-migrateLive` 表示发起热迁移操作,`host` 参数指定目标主机名称,`block_migration` 和 `disk_over_commit` 控制迁移行为[^3]。 #### 迁移过程详解 虚拟机迁移的过程可以分为以下几个阶段: 1. **预迁移阶段**:通知目标主机准备接收虚拟机实例,并返回相关数据。 2. **实际迁移阶段**:执行虚拟机内存、磁盘等资源的迁移。 3. **后迁移阶段**:确认迁移成功后,清理源主机上的虚拟机资源。 4. **回滚阶段**:如果迁移失败,则销毁目标主机上的临时数据,并恢复源主机的状态[^3]。 #### 注意事项 - 热迁移需要共享存储支持,否则必须启用块设备迁移(`block_migration=True`)。 - 目标主机必须满足虚拟机运行所需的资源条件。 - 在大规模环境中,建议监控迁移过程中的性能指标以避免对生产环境造成影响。 ```python # 示例代码:通过 Python SDK 实现热迁移 from openstack import connection conn = connection.Connection(auth_url="http://auth.example.com/v3", project_name="demo", username="admin", password="password", user_domain_id="default", project_domain_id="default") server = conn.compute.find_server("server_id") conn.compute.live_migrate_server(server, host="destination_host", block_migration=False) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值